Articles of nginx

有什么办法可以检测nginx何时完成正常关机?

我有一个在乘客和nginx上运行的rails应用程序,有一个主要的web服务器和多个应用程序服务器。 我试图更新我的部署过程,以最大限度地减less(或理想情况下,删除)由部署造成的任何停机时间。 现在的主要障碍是乘客需要一些时间来重新启动(即重新加载应用程序),所以为了解决这个问题,我想错开重新启动,以便一次只有一个应用程序服务器重新启动。 为了做到这一点,而不会丢失任何长时间运行的乘客进程,我想我需要优雅地closures应用程序服务器的nginx实例,这将导致它不再接受新的连接,但继续处理现有的连接; 同样,HAProxy将检测到应用程序服务器已closures,并将新请求路由到其他服务器。 但是,假设有一个长期运行的过程,我不知道如何检测正常关机何时完成,以便我可以启动备份。 由于关机是由发送信号(即kill -QUIT $( cat /var/run/nginx.pid ) )导致的,kill命令将立即返回,所以我不能合并命令(即kill … && touch restarted ),因为touch命令将立即执行,即使nginx尚未完成closures。 有没有什么好办法做到这一点?

nginx:“server_name”的parsing顺序?

我在我的nginx.conf中有多个“服务器”块。 该文档似乎错误的server_name匹配发生的顺序。 我的conf看起来像这样: server { listen 80 server_name domain.com *.domain.com # do stuff } server { listen 80 server_name sub.domain.com *.sub.domain.com # do something else } 我试图找出为什么请求与主机= www.sub.domain.com是去正确的地方(第二台服务器),当文档表明它应该去第一台服务器。 Nginx的文档指出,为了匹配,“按顺序”检查服务器块,这意味着任何与主机* .sub.domain.com的请求应该被第一个服务器而不是第二个服务器捕获。 ( http://wiki.nginx.org/HttpCoreModule#server_name ) 此外,*通配符可以匹配任意数量的子域名部分,所以* .domain.com匹配www.sub.domain.com。 ( http://nginx.org/en/docs/http/server_names.html#wildcard_names ) 如果这个文档是错误的,那么实际的匹配顺序是什么?

带有分隔符的可parsing的NGINX访问日志文件

默认的NGINX格式是这样的: log_format combined '$remote_addr – $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; 这有点难以parsing。 我恐怕人们注入"在请求,引荐者或用户代理。 我曾考虑过使用分隔符,并使用我自己的格式,使用|P-,| 作为分隔符: log_format parsable '$status |P-,| $time_iso8601 |P-,| $http_host |P-,| $bytes_sent |P-,| $http_user_agent |P-,| $http_referer |P-,| $request_time |P-,| $request'; 但是,没有什么能阻止用户注入|P-,| 纳入他们的请求,推荐人或用户代理。 我读了这篇关于ASCII分隔文本的文章: https : //ronaldduncan.wordpress.com/2009/10/31/text-file-formats-ascii-delimited-text-not-csv-or-tab-delimited-text/ 我认为这可以用来解决这个问题,但是用户也可以在他们的数据中注入ASCII分隔符。 有没有最好的方法来解决这个问题?

Nginx + PHP 5.3.3(使用php-fpm) – 内存使用情况?

我最近用Debian 5.0 Lenny(i386), 512MB RAM购买了Xen VPS (linode.com)。 目前,我只有三个小型网站(用Drupal构build),每天大约有600个用户在该服务器上运行。 作为一个networking服务器,我使用nginx 0.7.67 ( PHP 5.3.3与php-fpm )。 平均内存消耗约为100-105MB 。 这是穆宁图显示: 这是什么“顶部”命令diplay(按内存使用sorting): 在我的php5-fpm.conf中: pm = dynamic pm.max_children = 50 pm.start_servers = 2 pm.min_spare_servers = 2 pm.max_spare_servers = 5 pm.max_requests = 500 在将一些更大的项目迁移到此VPS之前,我想知道这是否是这种服务器configuration的正常内存消耗? 网站上有多less用户(比方说,用Zend Framework构build)这个VPS可以处理? 谢谢!

在主目录中使用nginx托pipe文件夹

我想在adduser脚本中添加一个条件来更新nginx.conf,以便在我创build一个新用户的时候,将它作为http:// ipaddress /〜用户加载〜/ www。 当用户名为www.domainname时,它将在〜/ www文件夹中托pipe该域名。 有没有脚本已经这样做?

是否可以使用多个负载平衡器将stream量redirect到我的应用程序服务器?

我是新来的负载平衡,我想知道是否有可能使用多个负载平衡器redirectstream量到我的应用程序服务器。 我真的不明白如何做到这一点。 一个域名不能与某个服务器的IP地址一一对应(在这个例子中是一个负载均衡器的IP地址)? 如果每个负载均衡服务器具有不同的IP,那么两个负载均衡器(或10个负载均衡器或50或100)是如何接收请求的?

复制并向另一个nginx服务器发送请求以进行真正的stream量testing

我有一个在uwsgi + nginx上运行的Flask web服务,它运行良好。 我有另一个服务器上运行的另一个开发版本的服务。 它也运行在uwsgi + nginx上。 我想要做的是,testing开发服务器'真正'的stream量(POST请求)我已经做了validation开发服务器基本上工作良好。 只是想比较两个相同的实际stream量。 我的基本想法如下: (A)是传统服务器(B)是testing服务器 用户请求 Nginx(A)获取请求并将请求传递给uwsgi(A)进行处理。 Nginx(A)“复制”请求并将其交给Nginx(B)进行testing uwsgi(A)在Flask App(A)中处理请求并响应用户(通过Nginx(A)) Nginx(B)像传统服务器一样处理请求,但不响应用户(只是日志logging) 这是有道理的吗? 我应该采取什么方法?

nginx的错误日志很大,所以我删除并创build了一个新的,现在nginx不会启动

我删除了/var/log/nginx/error.log文件,然后创build一个新的使用: sudo nano error.log Doinga ls -la显示error.log和access.log具有相同的权限。 当我尝试启动nginx时,出现错误: 警报:无法打开错误日志文件:打开()“/var/log/nginx/error.log”失败的权限被删除。 更新当试图启动nginx时,我也看到: emerg:/var/run/nginx.pid失败13:权限被拒绝。

内容长度标题不存在

我在Linux上安装了nginx服务器。 当我用curl发送请求时, Content-Length头部在响应中缺失。 1.php文件是: <?php echo "hello"; ?> 示例请求是: curl api.mysite.com/taxi/1.php -i HTTP/1.1 200 OK Server: nginx/1.2.1 Date: Wed, 17 Sep 2014 06:16:00 GMT Content-Type: text/html; charset=utf8 Vary: Accept-Encoding X-Powered-By: PHP/5.4.4-14+deb7u14 Age: 0 X-Cache: MISS from cache.turonnet.uz Transfer-Encoding: chunked Connection: keep-alive 我该如何解决这个问题?

Nginx的/ FPM / PHP所有的PHP文件说'文件没有find。

我刚安装了CentOS 5.8最后的64位机器上的nginx 1.1.13和php 5.4.0。 Nginx和PHP / Fpm正在运行,我可以通过ssh命令行运行php脚本,但是在浏览器中我总是收到'找不到文件'。 所有的PHP文件错误。 这是我如何让我的nginx.conf处理PHP脚本: location ~ \.php$ { root /opt/nginx/html; fastcgi_pass unix:/tmp/fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /opt/nginx/html$fastcgi_script_name; include fastcgi_params; } 这是从我的其他服务器的直接复制/粘贴,在这个设置工作正常(但他们运行旧版本的PHP / FPM)。 为什么我会收到这些错误?