Articles of nginx

nginx的$ time_local日志variables是什么意思,具体是什么意思?

我正在阅读一些nginx日志的一些相当长期的请求(长达10秒)。 在日志格式中,我们使用$time_localvariables来logging时间。 但这是否意味着请求开始或结束的时间 ? 对于一个长时间运行的请求,这些时间是截然不同的,我在ngx_http_log_module文档中找不到任何东西来解释这个。

与php5-fpm的神秘错误

我遇到了一个非常困难的情况,最新的php5-fpm(来自debphp)和Ubtuntu 12.04LTS上的nginx 1.4.3。 总之,我无法启动php5-fp ,我在syslog中一直收到这个错误: kernel: [1213013.564441] init: php5-fpm main process (7357) terminated with status 78 kernel: [1213013.564496] init: php5-fpm main process ended, respawning ….. (repeated several times) kernel: [1213014.143911] init: php5-fpm respawning too fast, stopped 我的/var/log/php5-fpm.log根本没有被填充。 在/run (或/var/run )中没有php5-fpm.sock和php5-fpm.pid 。 我的/etc/php5/fpm/php-fpm.conf如下:(这个文件似乎不是现在加载,因为我试图把一些伪造的信息,但没有造成任何改变) ;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; include=/etc/php5/fpm/*.conf ;;;;;;;;;;;;;;;;;; ; Global Options ; ;;;;;;;;;;;;;;;;;; […]

Nginx + php-fpm – 运行时每个php-fpm进程70-100%cpu

我有以下情况发生: 我们正在使用8核,8gb ram,2.6 ghz的linode(使用nginx + php-fpm) – 我们获得了非常高的cpu使用率图表(我们不想成为如此糟糕的VPS邻居)… 我们的网站一次只有不到100个用户 – 所以这种情况也令人难以置信 – 我们的CPU使用率非常高。 我们正在使用一个非常未知的,可能是CPU密集型的PHP智慧,可怕的框架,而不是众所周知的,有据可查的,精心制作的其他框架,如WordPress或Drupal,其中有大量关于caching的文档(以及插件处理caching)在一个nginx + php_fpm平台上的php。 因此,我们有大约6个开放的php-fpm进程,当运行时,单独消耗大量(30+,通常接近99%)的CPU数量 – 而且我并没有真正想到如何阻止他们使用如此之多的CPU 。 我不知道是哪个php脚本导致这些尖峰,因为它们一直在发生……通常只有1或2个正在运行 – 但是当所有6个运行时,我们最大化所有8个cpus。 我的pool.d / www.conf文件具有以下设置: pm = dynamic pm.max_children = 10 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 6 我们做了这个设置,因为按照我解释的方式,我们的记忆实际上是惊人的(htop显示472/7000 + mb使用,没有交换等),我们可以处理更多的进程,并打破等待获得的线处理 – 但不幸的是,因为在运行时我们的CPU上每个进程都过于激烈 – 我们最终将通过车顶驱动CPU – 所以我们无法处理足够的进程。 这个问题 – 我们可以做些什么来减lessphp-fpm cpu使用的过程,这样我们可以增加php-fpm池configuration文件中的设置 – […]

位置指令不起作用

对于我的NGINX服务器,我设置了一个虚拟服务器来清理静态内容。 目前我正在设置,以便图像有一个到期date。 但是,当我为此创build一个位置指令时,所有内容都会导致404错误。 我现在的configuration是这样的: /srv/www/static.conf server { listen 80; server_name static.*.*; location / { root /srv/www/static; deny all; } location /images { expires 1y; log_not_found off; root /srv/www/static/images; } } 注意,这个文件包含在http指令中的/etc/nginx/nginx.conf中 我正在尝试访问图片,比方说… static.example.com/images/screenshots/something.png 。 果然,图片也存在于/srv/www/static/images/screenshots/something.png 。 然而,去说的地址不起作用,只是告诉我404 Not Found 。 但是,如果我删除location /images并更改location /以下… location / { root /srv/www/static; } 有用! 我在这里做错了什么?

Nginx的通配符/正则expression式的位置path

Nginx的configuration我已经抛出了404的.php像: ## Any other attempt to access PHP files returns a 404. location ~* ^.+\.php$ { return 404; } 不过,我想要运行子文件夹中的一些index.php文件。 目前的configuration如下所示: location = /sitename/subpage/index.php { fastcgi_pass phpcgi; #where phpcgi is defined to serve the php files } location = /sitename/subpage2/index.php { fastcgi_pass phpcgi; } location = /sitename/subpage3/index.php { fastcgi_pass phpcgi; } 它完美的工作,但问题是重复的位置,如果有很多的子页面,那么configuration变得巨大。 我试图通配符*和一些正则expression式,它说nginxtesting通过,但不加载页面,即404。我试过的是: location = […]

将所有请求redirect到HTTPS,除了一个子目录

我试图从自签名证书转到我们的nginxnetworking服务器上encryption证书。 目前,我将所有请求redirect到http/80到https/443 ,它使用我刚刚创build的自签名证书。 现在 – 根据我的理解,Let's Encrypt向端口80发出请求(因为我使用的是certbot的webroot选项)。 这些请求被redirect,导致证书生成失败。 我试图用下面的服务器块来实现这个function,在80端口监听: server { listen 80; server_name sub.domain.tld; server_tokens off; location /.well-known { root /var/www/letsencrypt; } location / { return 301 https://$host$request_uri; } } 但是https/443 /.well-known请求被redirect到https/443 。 如何将所有请求从http/80redirect到https/443 ,除了对/.well-known/的请求?

升级代理NGINX服务器的内核是否足以阻止CVE-2017-6214的利用?

我们的安全部门最近要求我们升级我们的服务器,以避免可能由http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-6214 现在,我们有很多这样的服务器,但是所有请求都是通过NGINX来代理的。 所以,问题是,仅仅升级这个就足够了吗? 据我了解,如果TCP软件包包含一个特殊的URG标志,则该漏洞存在于TCP层面。 我是否理解正确,NGINX以下列方式作为代理: 接收TCP包并将它们组合为HTTP请求。 select适当的后端服务器将其发送到。 发送请求,生成它自己的TCP包,这是安全的,不包含任何有漏洞的信息? 或者情况并非如此,NGINX只是重新发送收到的TCP包。

你可以依靠Nginx作为你唯一的PHP / MySQL的networking服务器

你可以依靠Nginx作为你唯一的networking服务器。 就性能而言,我知道它运行良好,但是它在安全性方面又如何呢? 我知道Apache是​​稳定的,有ModSecurity。 Nginx不是这种情况。 我将使用Nginx作为唯一的Web服务器,并且仅用于dynamic内容。 我的所有静态内容都由CDN提供。

如何configurationNginx,以便将'?…'作为文件名的一部分

Nginx只提供静态文件,但是一些文件名包含'?'。 是的,问号。 所有包含“?”的url 即使文件实际存在,也会产生404。 例如 > GET /foo?lang=ar.html HTTP/1.1 … … < HTTP/1.1 404 Not Found 在预期位置存在一个名为foo?lang = ar.html的文件。 我想知道是否有办法告诉Nginx将整个请求视为URL,包括当前被翻译为查询string的内容。 我唯一想到的解决scheme就是编写一个小型的Web服务器,它具有这个function,并且有nginx反向代理服务器,但是我宁愿单独使用nginx来完成。

在nginx中设置一个默认variables

在nginx中,我可以使用set来定义一个variables,但是可以定义一个默认的? 例如 set $foo bar if $foo is not defined