Articles of nginx

Nginx的子目录Drupal +其他应用程序

我有一个Drupal应用程序和其他2个应用程序写在PHP中,我想使用重写Uri的Drupal,并将Drupal的虚拟根/另一个由他们的名字…并使用服务器caching的每个应用程序的IMG。 例如: xxx.com或xxx.com/ – > /var/www/xxx.com/drupal/ xxx.com/app1或xxx.com/app1/ —-> /var/www/xxx.com/app1/ xxx.com/app2或xxx.com/app2/ —-> /var/www/xxx.com/app2/ 我已经testing:别名,根在每个位置,条件$ request_uri,单独的configuration…总是一个错误:IMGpath,PHPpath,所有应用程序或Drupal之一404 所以我真的迷路了 这里testing(也许有些好东西): # enforce www if ($host !~* ^(www)) { rewrite ^/(.*)$ $scheme://www.$host/$1 permanent; } location / { root /var/www/gplaza.cl/Drupal; index index.php index.html; if (!-f $request_filename) { rewrite ^(.*)$ /index.php?q=$1 last; break; } if (!-d $request_filename) { rewrite ^(.*)$ /index.php?q=$1 last; […]

PHP在周一到周五的同一时间点击100%CPU并吃掉RAM

我们在英国为小学开设了一个学习平台,并且运行得非常好。 然而在星期一到星期五的下午四点左右,我们看到同样的问题出现–1-2个PHP线程会跳到100%的CPU,并逐渐开始吞噬内存,直到服务器崩溃。 我们的请求中有98%是HTTPS,它们进入我们的第7层负载均衡器,然后解密SSL数据,添加X-HTTP-Forwarded-For头并将数据转发到应用服务器(我们有2个时刻)。我们的应用服务器在端口80上有Varnish,它接受来自负载均衡器的请求,并将请求通过端口81传递给Nginx。然后Nginx会计算出需要使用哪个“虚拟主机”,并通过任何PHP处理通过在套接字上监听的PHP-CGI(通过spawn-fcgi进行pipe理)。 有一个Memcached的实例也在运行,MySQL运行在一个单独的服务器/从属设置上。 在整个一天中,任何应用服务器的负载通常不会高于0.8,但是在下午4点左右,我们会遇到问题。 当他们引发问题时,我设法在一些实际的线程上运行strace ,而且我总是看到相同的东西: stat("/usr/share/zoneinfo/Europe/London", {st_mode=S_IFREG|0644,st_size=3661, …}) = 0 stat("/usr/share/zoneinfo/Europe/London", {st_mode=S_IFREG|0644,st_size=3661, …}) = 0 这是无限的重复,永远不会停止,直到你SEGKILL过程或oomkiller杀死它。 当时没有计划运行的cron作业,而且我也没有办法看到Nginx请求与正在运行的PHP进程关联的是什么。 我们正在运行PHP 5.3.14,我们从上周的5.3.8升级到排除旧版本的问题。 这个问题已经持续了几个月,我们不知道是什么原因造成的。 我们非常频繁地部署我们的软件,所以很难find可能引发问题的特定版本 – 尤其是因为我们不知道这个问题首次发生的date。 Varnish是3.0.1版本,Nginx是1.0.6(据我所知现在大概有一岁了),我们的服务器运行的CentOS版本5.7(最终),他们有3.07Ghz英特尔i3 540s和8GB内存。 Debian邮件列表上有关于非常相似的东西的讨论,你可以在这里find。 有没有人在过去看过这样的事情,有没有人有任何想法或build议? 有没有办法将一个Nginx请求直接链接到一个PHP线程? 有没有更好的方法来看看PHP过程在做什么? (我见过GDB提到,但我将不得不重新编译PHP) 谢谢!

UWSGI,Django,nginx cookie问题 – 导致405错误

我通过uwsgi和nginx运行django,每当我的应用程序尝试设置一个cookie,nginx显示一个405错误。 该应用程序工作正常与Apache,runserver或gunicorn,和uwsgi服务通常除了redirect问题。 我正在运行uwsgi: uwsgi –master –http-socket :8082 \ –wsgi-file /var/django/mysite/apache/live.wsgi \ –touch-reload /var/django/mysite/apache/live.wsgi 我的live.wsgi文件如下所示: import os, sys PROJECT_ROOT = '/var/django/mysite/' directory = os.path.join(PROJECT_ROOT, 'src') if not directory in sys.path: sys.path.insert(0, directory) os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() nginx正在代理请求127.0.0.1:8082这个网站。 更新:奇怪的是,这个问题似乎是由django的消息框架触发 – 删除django.contrib.messages.middleware.MessageMiddleware停止错误。 这导致我认为这与redirect没有任何关系,而是与在django admin中保存的对象上创build的消息有关。 更新2:一些进一步挖掘显示,它似乎是一个问题与设置cookie – 切换消息框架使用会话后端停止错误。 我仍然不知道为什么uwsgi / nginx堆栈不会让django设置cookie。 我已经更新了这个问题来反映这一点。

我怎样才能优化系统资源使用许多不同的gunicorn动力Django网站stream量低?

我的服务器是768MB RAM的Linode。 这里有大约8个由Nginx,Supervisor和Gunicorn提供支持的小型低stream量Django站点。 目前,每个站点都有自己的Linux用户帐户,该站点的文件位于用户的主目录中。 每个用户都有一个开发和生产主pipe程序,运行1到4名工人的Gunicorn。 我们是一家小型的咨询公司,在不久的将来,我们只会把越来越多的小型,低stream量的Django网站添加到服务器上。 当我看上面的时候,我有一堆Gunicorn进程在运行,RAM几乎完全用完了。 有一段时间,我们只有512MB的内存,几乎完全用完,但是当我们增加了更多的内存时,Gunicorn进程只占用了更多的内存。 有没有好的方法来优化这个服务器的尽可能多的低stream量(如1000个点击一个月)Django的网站尽可能? 我select了Apache上的Nginx设置,因为我读了它在系统资源上更好,但似乎目前的设置不是非常有效地使用资源。

configurationNginx和php5-fpm以使用Codeigniter

正当我试图从Apache 2切换到Nginx时,我遇到了许多问题,并且仍在修复它们。 无论如何,我试图让他们工作,但没有运气。 所以我在这里寻求帮助/以前的经验。 我使用默认的configuration来运行PHP,并且只在运行PHP文件时效果很好。 但不幸的是,codeigniter的URL不会以* .PHP结尾。 所以我认为PHP-FPM不会将我的脚本当作PHP文件,因为URL不会以*.PHP 。 我只是猜测。 那么,有没有什么办法让他们工作? 对我来说似乎是不可能的,我尝试了很多configuration(在修改它们以适应我的环境,ofcource之后),但是它们中没有一个与Codeigniter一起工作。 希望张贴我目前的configuration,正常的PHP文件的作品,将导致一些解决scheme。 注意:这与Nginx的Codeigniter框架的wiki页面中的内容完全相同。 server { server_name _;#_ to catch all requests. root /usr/share/nginx/www; index index.html index.php; # set expiration of assets to MAX for caching location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ { expires max; log_not_found off; } location / { # Check if a file exists, or […]

Access-Control-Allow-Origin与nginx反向代理

我有一个服务器使用nginx作为反向代理,它将foo.example.com的请求传递到10.0.0.210端口80转发工作正常,但我也需要转发端口9292的JavaScript消息传递服务。 我的服务器9292服务器{}条目是: server{ listen 9292; server_name foo.example.com; location / { add_header Access-Control-Allow-Origin http://foo.example.com; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://10.0.0.210:9292; } } 但是当我去应用程序我的铬控制台得到这个错误: Unexpected response code: 400 然后加载这个错误: XMLHttpRequest cannot load http://foo.example.com:9292/faye. Origin http://foo.example.com is not allowed by Access-Control-Allow-Origin. 它可以从http://foo.example.com:9292/faye.js服务器请求最初的JavaScript,但之后我只是得到这个错误。 我正在阅读的一切意味着这应该工作正常,所以我错过了什么?

通过共享域访问服务器上的所有网站

我的设置是: Nginx(80)作为透明代理 Apache(81)作为后端Web服务器 服务器上每个域的path如下所示: /var/www/$username/data/www/$domainname 当然要访问您需要使用每个网站的域名的文件。 但是我想要一种使用像这样的URL访问所有域的方法: http://dm.some.com/clientdomain.com 我怎样才能做到这一点? 这个URL将被用来访问静态文件,所以我认为最好使用Nginx。

使用nginx,uWSGI和virtualenv部署Flask应用程序

在CentOS 6服务器上部署Flask应用程序时遇到了很多麻烦。 我知道关于这个问题还有其他一些问题,但是我还没有成功。 描述 默认的Python是Python 2.6.6 nginx版本是1.0.15 uWSGI版本是1.2.5 我的virtualenv文件夹是/home/me/dev/.venv 我的virtualenv Python版本是2.7.3(我想用uWSGI运行Python 2.7.3) 我的app.run() Python文件是/home/me/dev/runserver.py 我的文件,模块,类等在/ home / me / dev / contacts下 我试过了 这里是nginx.conf的相关部分: server { listen 80; access_log off; # … location / { include uwsgi_params; uwsgi_pass 127.0.0.1:3031; } } 这里是完整的runserver.py: from contacts import app if __name__ == "__main__": app.run() 根据文档,我试图运行以下命令: uwsgi -H .venv/ […]

nginx:后端https,proxy_pass显示ip

我正在使用nginx作为侦听端口80(http)的反向代理。 我正在使用proxy_pass转发请求到后端http和https服务器。 一切工作正常我的http服务器,但是当我尝试通过nginx反向代理到达https服务器的HTTPS服务器的IP显示在客户端的Web浏览器。 我希望显示nginx服务器的URI,而不是https后端服务器的ip(再一次,这可以正常使用http服务器,但不能用于https服务器)。 在论坛上看到这个post 这是我的configuration文件: server { listen 80; server_name domain1.com; access_log off; root /var/www; if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } location / { proxy_pass http://ipOfHttpServer:port/; } } server { listen 80; server_name domain2.com; access_log off; root /var/www; if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } location / { proxy_pass […]

nginx在发送到fastcgi之前缓冲数据

我的nginx服务器正在缓冲客户端发送的所有数据,当它有所有数据时,它将数据写入fastcgi套接字。 我们如何避免这种延迟,让fastcgi一接收到客户端的数据,就立即开始接收数据? 我试图玩fastcgi设置,但没有运气。 谢谢