Nginx / uWsgi / Django站点可以使用重写URL处理更多stream量

我正在运行一个Django应用程序,在nginx后面使用uWsgi。 我一直在使用ApacheBench进行一些性能调优和负载testing,并且发现了一些意想不到的东西,不知有人能为我解释。 在我的Nginxconfiguration中,我有一个rewrite指令,它可以捕获很多不同的URL排列,然后将它们转发到我希望使用的规范URL,例如,它可以捕捉www.mysite.com/whatever,www.mysite.co.uk/whatever并转发给http://mysite.com/whatever 。

如果我用任何一个redirectURL(即不是最终转发的规范URL)加载testing,它可以服务15000个并发连接,而​​不会出汗。

如果我加载testing反对规范的URL,上面的testing,我会期望得到转发到任何地方,它不能处理的差不多。 在15000个请求中将会减less4000个,只能可靠地处理9000个。

这是我用来testing的命令行:

ab -c15000 -n15000 http://www.mysite.com/somepath/ 

 ab -c15000 -n15000 http://mysite.com/somepath/ 

我已经尝试了几种不同的types – 这与我做它们的顺序没有什么不同。这对我来说没有任何意义 – 我可以理解为什么涉及redirect的请求可能无法处理太多的并发连接,但是正在发生另一边。 谁能解释一下? 如果规范的URL可以处理更多的stream量,我真的更喜欢它。

我将在下面发布我的Nginxconfiguration。

感谢加载任何帮助!

 server { server_name www.somesite.com somesite.net www.somesite.net somesite.co.uk www.somesite.co.uk; rewrite ^(.*) http://somesite.com$1 permanent; } server { root /home/django/domains/somesite.com/live/somesite/; server_name somesite.com somesite-live.myserver.somesite.com; access_log /home/django/domains/somesite.com/live/log/nginx.log; location / { uwsgi_pass unix:////tmp/somesite-live.sock; include uwsgi_params; } location /media { try_files $uri $uri/ /index.html; } location /site_media { try_files $uri $uri/ /index.html; } location = /favicon.ico { empty_gif; } } 

实际上,答案很简单。 在你的第一个testing(redirect)中,ab只是基准“301永久移动”的请求。 第二个testing是testing你的实际内容。

为了说明我的意思,curl你的redirecturl。 你会得到像这样的东西:

 <html> <head><title>301 Moved Permanently</title></head> <body bgcolor="white"> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx/0.8.52</center> </body> </html> 

要处理15000个并发请求并不难! ;)

你有没有提交给开发邮件列表? 非常有趣的肯定。 你有没有尝试启用完整的debugging; 你可能不得不在编译期间启用它。 一旦启用,请向标准和一个到另一个请求。 也许debugging日志将会stream露出一些光芒。 您是否尝试删除第二个server_name域(somesite-live ..)? 祝你好运,让我们知道,如果你弄明白了!