nginx.conf 优化版 (for PHP)

nginx.conf 优化版 (for PHP)

Chris Yue No Comment
Posts

通过一下午对 NGINX 的官方文档的研究和不断的尝试,对之前的 nginx.conf 做了蛮大的修改(请参见之前的文章《PHP 全局变量 PATH_INFO 与 NGINX 的配置》《让 symfony 运行在 NGINX 上的完美配置》不靠谱的百度空间已经把我之前的文章完全删除了,不过也无所谓,有了这篇文章后,之前写的也没太多价值了),下面将对优化后的版本进行详细的解释。

2016-1-10 更新:请跳转至此参考更“现代”的配置方式

因为 symfony 框架的 webserver 配置要求算是目前比较典型的 PHP 配置要求,所以还以它举例子:

另外 fastcgi_params 文件需要添加的规则为:

这一次配置的最重要的收获是 Nginx 的 location 配置原来是有一定的规则会去影响他的顺序的。location 与后面的 URI 之间的匹配方式有

  1. = 绝对匹配,比如 location = / 那就只能匹配首页,这也是效率最好的匹配
  2. ^~ 开头部分匹配,比如 location ^~ /sf/
  3. ~ 或者 ~* 正则匹配,比如 location ~ \.\w+~* 是不区分大小写的正则匹配
  4. 无任何符号 部分匹配,比如 location / 匹配任何 uri

匹配的优先顺序就是上面列表的顺序,所以无论把规则 location = / 写在最前还是最后,都会优先执行这条规则的匹配。

有的时候会出现同一个 URI 会同时匹配同一种类型的不同规则的情况,比如上面的配置中 /index.php 这条 uri 既匹配 .php 又匹配 .\w+,那么这两条规则谁在前面就执行谁的规则。

如果只是测试环境,不用考虑太多性能以及安全问题,配置还能更简单:

参考资料:

  1. Nginx Pitfalls
  2. Nginx HttpCoreModule

nginx.conf 优化版 (for PHP) by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

文章不错,我要帮站长分担建站费!
天使投赏人

发表评论

+ 65 = 72