Articles of nginx

正确的方法来旋转Nginx日志

我想实现nginx日志的轮换: 将工作没有任何额外的软件(即 – 如果没有“logrotate”最好) 会创build基于date名称的旋转文件 最好的办法就像PostgreSQL一样 – 即在它的log_filenameconfigurationvariables中,我可以指定strftime-style%Y-%m-%d,它会自动更改logindate(或时间)更改。 Apache的另一种方法 – 通过pipe道发送日志到rotatelogs程序。 就我所能search到的,不存在这样的方法。 我所能做的就是使用带有dateext选项的logrotate,但是它有自己的缺点,我宁愿使用像PostgreSQL中的rotatelogs或log_filename一样的东西。

Apache MPMs – 工人vs Prefork

我试图找出哪些是我可以安装在我的VPS上的最好的Apache MPM。 我看到了一些基准,MPM Worker似乎比Prefork更好,但出于某种原因,似乎每个人似乎都推荐了Prefork for Worker来安装PHP。 这只是因为一些PHP函数不是线程安全的? 想起来只有setlocale() ,但是我将在每个实例上使用相同的语言环境,所以我不认为这会是一个问题。 我的VPS有一点记忆,我觉得工人MPM会更适合我的需求,但是我不确定。 有人可以帮我下定决心吗? 谢谢! PS:我也看过nginx和lighttpd。 nginx看起来很棒,但我试图避免从源代码编译,我仍然不明白什么是PHP-FPM。 关于lighttpd – 使用它设置PHP / FCGI令人难以置信,但我听说它有内存泄漏。 这是真的吗?

Nginx:相对于conf文件的根path

是否可以指定相对于包含conf文件的rootpath? 我们正在开发一个Web应用程序,并在项目的目录中保存具有应用程序特定configuration的app-nginx.conf文件。 我希望能够将这个文件包含在主要的nginx.conf文件中,并且具有正确引用所需项目子目录的rootpath。 例: # /etc/nginx/nginx.conf http { include /absolute/path/to/app/app-nginx.conf } # /absolute/path/to/app/app-nginx.conf server { server_name localhost; listen 9090; root ./app; } 以相似的configuration启动nginx之后,nginx尝试parsing相对于nginx安装目录( /usr/local/Cellar/nginx/1.4.3/ )的./apppath,而不是应用程序的目录。

nginx用参数重写url

我有这种types的URL: http://www.example.com/?param1=val1&param2=&param3=val3&param4=val4&param5=val5 我想把它redirect到这个: http://www.example.com/newparam/val3/val4 所以我试过这个重写规则没有成功: rewrite "/?param1=val1&param2=&param3=(.+)&param4=(.+)&param5=(.+)" http://www.example.com/newparam/$1/$2 redirect; nginx不能处理查询参数吗? 编辑:我不想重写所有的请愿书。 我只需要重写那个URL,而不影响其他的。

为什么nginx server_name指令的最大长度是14个字符?

我有以下虚拟主机 server { server_name abc.example.com; root /var/www/test/; index index.html; } 在运行nginx -s reload ,出现以下错误: nginx:[emerg]无法build立server_names_hash,你应该增加server_names_hash_bucket_size:32 对于具有15个或更多字符的任何server_name,情况也是如此。 如果我将server_name设置为ab.example.com (或15个字符ab.example.com任何名称),则问题将停止显示。 为了解决这个问题,我在/etc/nginx/nginx.conf (以前没有定义)中添加了以下内容: server_names_hash_bucket_size 64; 设置为33也可以,但不是32。 为什么server_name的默认最大长度是14个字符? 这个限制是由nginx的默认设置还是由系统运行? 15个server_name如何影响最大哈希桶大小? (系统上只定义了4个虚拟主机)

使用nginx作为主要Web服务器的缺点?

我已经看到数以百万计的网站使用nginx作为代理networking服务器与Apache一起工作。 但是我已经看到很less的服务器只运行nginx作为它们的默认web服务器。 这种configuration的主要缺点是什么? 我可以看到一些: 无法使用每个目录configuration文件,如.htaccess所以每个configuration更改应该对主服务器configuration文件进行,并需要服务器重新加载。 但pecl htscanner可以弥补他们的PHP设置 mod_php对于nginx是不可用的,例如可以通过php-fpm进行补偿。 别人是什么? 为什么人们不放弃Apache并转向nginx或其他任何轻量级解决scheme? 可能是,有一些特殊的原因? 编辑:这个问题主要是关于使用LAMP堆栈。

Nginx设置server_names_hash_max_size和server_names_hash_bucket_size

我们使用Nginx作为Apache的反向代理服务,为任何人提供自己的网站。 在创build帐户时,系统为两个条目创build一个新的nginx conf文件,一个用于端口80,另一个用于443.我们注意到在每30个域左右,我们得到错误: Restarting nginx: nginx: [emerg] could not build the server_names_hash, you should increase either server_names_hash_max_size: 256 or server_names_hash_bucket_size: 64. 随着大约200个域名的不断增长,我们必须将server_names_hash_max的大小提高到4112,并且担心这个规模不会很好。 我期待了解这些configuration是如何工作的,以及使用这种方法确保我们可以成长为数千个域的最佳设置。 另外,在散列大小nginx开始需要几秒钟的时间来重新加载,这导致系统在重新启动时不可用。 以下是整体设置(在Ubuntu服务器10.10 nginx / 1.0.4上运行): user www-data; worker_processes 4; pid /var/run/nginx.pid; events { worker_connections 4096; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; […]

Nginx缺乏Apache的function是什么?

据说Nginx比Apache更节省资源,更容易configuration。 一位朋友告诉我说:“它不能做一些Apache可以做的事情,但是我不需要那些东西。” 不过,我很好奇: Apache能做些什么Nginx不能做的事情? 我不需要一个详尽的列表,只是一个普遍的想法,其中Apache将是一个更好的select。

nginx:未知指令“http”

当我尝试使代码如下所示: 1. http { 2. script 3. server { 4. … 5. location … 6. } 7. } 我收到错误: nginx: [emerg] unknown directive "http" in /etc/nginx/conf.d/nginx.conf:1 当代码是这样的: 1. server { 2. … 3. location … 4. script 5. } 6. server { 7. … 8. location …. 9. script 10. } 一切都很稳定 有人知道我为什么不能使用http吗? 我看到每个好用的例子都可以看到http,但是由于这个错误我不能使用它。 nginx: […]

如何定义哪个SSL证书nginx先发送SNI?

在Debian Squeeze上,我使用nginx 1.2.7和OpenSSL 0.9.8o共30个域名。 在其中两个我启用了SSL,这两个工作正常。 SSLconfiguration用于两个域: listen 443 ssl; ssl_certificate /etc/nginx/ssl/example.org-unified.crt; ssl_certificate_key /etc/nginx/ssl/example.org.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security max-age=600000; 使用ssllabs.com检查器检查两个域我得到一个域的通知“这个网站只适用于具有SNI支持的浏览器”。 对于其他域我没有得到这个消息。 似乎nginx默认情况下将按字母顺序排列的第一个域的证书发送给没有SNI支持的客户端。 我可以改变这种行为吗? 换句话说:我想configurationnginx使一个具有SSL的特定域,即使对于没有SNI支持的客户端也是如此。 其他域也应该与SSL一起工作,但是如果它仅适用于启用了SNI的客户端,则可以。 谢谢!