|
@@ -11,16 +11,16 @@ tags:
|
|
|
|
|
|
众所周知,Apache是全球使用最广泛的Web服务器,各种模块很多、教程也多,几乎可以满足你的各种需求。Nginx是一个高性能的Web服务器,它占用资源少,能轻松应对高并发的连接,相比Apache更加轻量化。可以说Nginx与Apache风格迥异,然而,网上很多关于Nginx的教程都是用的Apache的思路,一个配置文件各种写法的都有,让人很疑惑。也许是Nginx配置文件比较智能吧,感觉怎么写都能正常访问,然而作为强迫症,找不到最正确最科学的配置方法,简直难受。
|
|
|
|
|
|
-好好看了一下Nginx的官方文档,结合了codex.wordpress.org以及Nginx Wiki上的教程,姑且认为我现在Nginx的配置文件写对了吧,有什么不妥的欢迎讨论……
|
|
|
+好好看了一下Nginx的官方文档,结合了codex.wordpress.org以及Nginx Wiki上的教程,我这里就简单总结一下,贴一下我的配置,有什么问题欢迎指出……
|
|
|
|
|
|
-在运行WordPress时,Nginx与Apache有些区别是你必须要了解的:
|
|
|
+首先,在运行WordPress时,Nginx与Apache大概有这些区别:
|
|
|
|
|
|
-* 执行php请求时,Nginx无法直接处理php文件,所以一般它是将php请求传送到后端的php-fpm(默认在本地的9000端口侦听,即127.0.0.1:9000)来处理。而Apache是将php当作自己的一个模块来调用,只要开启了这个模块,无需进一步的配置,Apache就能直接执行php请求。
|
|
|
-* Nginx没有像Apache的.htaccess那样的文件目录级别的配置文件。Apache的配置文件是可以AllowOverride的,也就是说你在.htaccess文件中的配置可以覆盖程序目录中的主配置文件(那么这也就意味着每次请求,Apache都会去读取网站根目录下的.htaccess文件,这效率想想就可怕)。当然对于虚拟主机用户来说,由于无法自行更改Apache的主配置文件,.htaccess就很有用了。WordPress的自定义固定链接功能正是通过自动将伪静态规则添加到.htaccess中实现的,由于Nginx没有这个特性,所以伪静态规则就要在nginx.conf中自行添加了。
|
|
|
+* 对于一个php请求,Nginx无法直接处理php文件,所以一般它是将php请求传送到后端的php-fpm(默认在本地的9000端口侦听,即127.0.0.1:9000)来处理。而Apache是将php当作自己的一个模块来调用,只要开启了这个模块,无需进一步的配置,Apache就能直接解析php。
|
|
|
+* Nginx没有像Apache的`.htaccess`那样的文件目录级别的配置文件。Apache的配置文件是可以`AllowOverride`的,也就是说你在`.htaccess`文件中的配置可以覆盖程序目录中的主配置文件(那么这也就意味着每次请求,Apache都会去读取网站根目录下的`.htaccess`文件,这效率想想就可怕)。当然对于虚拟主机用户来说,由于无法自行更改Apache的主配置文件,`.htaccess`就很有用了。WordPress的自定义固定链接功能正是通过自动将伪静态规则添加到`.htaccess`中实现的,由于Nginx没有这个特性,所以伪静态规则就要在`nginx.conf`中自行添加了。
|
|
|
|
|
|
## HTTPS+HTTP/2配置
|
|
|
|
|
|
-这一部分配置应该写在`http {}`块中。
|
|
|
+这一部分配置应该写在`http`块中。
|
|
|
|
|
|
```nginx
|
|
|
# Upstream to abstract backend connection(s) for php
|
|
@@ -82,7 +82,7 @@ server {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-其中,`location / {}`块的`try_files`非常机智。网上很多教程都是在这里用了if判断加rewrite,就像这样:
|
|
|
+其中,`location / {}`里的`try_files`非常机智。网上很多教程都是在这里用了if判断加rewrite,就像这样:
|
|
|
|
|
|
```nginx
|
|
|
if (-f $request_filename/index.html) {
|
|
@@ -143,13 +143,13 @@ Nginx官方文档上是这么写的,强烈建议大家去看看这一页:
|
|
|
|
|
|
> This is a wrong, cumbersome, and ineffective way. The right way is to define a separate server for `example.org`
|
|
|
>
|
|
|
-> <cite>《[Converting rewrite rules](http://nginx.org/en/docs/http/converting_rewrite_rules.html)》</cite>
|
|
|
+> <cite>[Converting rewrite rules](http://nginx.org/en/docs/http/converting_rewrite_rules.html)</cite>
|
|
|
|
|
|
这里使用的是`return 301`,也是新版Nginx推荐的用法。
|
|
|
|
|
|
## WP Super Cache
|
|
|
|
|
|
-Apache下,WP Super Cache可以自己生成rewrite规则并写入.htaccess文件中,而Nginx没有.htaccess这样的机制,因此rewrite规则需要自己配置。这个规则可以直接放入`server {}`块中。
|
|
|
+Apache下,WP Super Cache可以自己生成rewrite规则并写入`.htaccess`文件中,而Nginx没有这样的机制,因此rewrite规则需要自己配置。这个规则可以直接放入`server`块中。
|
|
|
|
|
|
```nginx
|
|
|
# WP Super Cache rules.
|
|
@@ -198,18 +198,16 @@ location / {
|
|
|
|
|
|
## 一些其他问题
|
|
|
|
|
|
-我们知道WordPress能上传文件的最大体积是由php.ini的配置决定的。除此之外,Nginx对文件的上传大小也有限制(默认好像是2MB),超过这个大小WordPress会报http错误。因此nginx.conf的`http {}`块中需加一句`client_max_body_size 64m;`(改成你想要的大小)。另外,别忘了开启gzip压缩,`gzip on;`。
|
|
|
+我们知道WordPress能上传文件的最大体积是由php.ini的配置决定的,然而除此之外,Nginx对文件的上传大小也有限制(默认好像是2MB),超过这个大小WordPress会报http错误。因此nginx.conf的`http`块中需加一句`client_max_body_size 64m;`(改成你想要的大小)。另外,别忘了开启gzip压缩,`gzip on;`。
|
|
|
|
|
|
使用`nginx -t`命令可以测试nginx.conf的语法是否正确。
|
|
|
|
|
|
暂时就说这么多吧,有什么其他东西以后再慢慢添加。并非专业人士,有问题欢迎指出。
|
|
|
|
|
|
-个人感觉Nginx的配置文件比Apache的简洁多了,写Nginx的配置文件就跟写作文一样,每一行的意思都很清楚,非常接近英文语句,可读性高。还记得我刚换Nginx时的各种不适应,感觉现在已经离不开了。Nginx的一些特性真的是让人不得不爱。
|
|
|
+个人感觉Nginx的配置文件比Apache的简洁多了,写Nginx的配置文件就跟写作文一样,每一行的意思都很清楚,非常接近英文语句,可读性很高。
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-我的Nginx配置参考自这些页面,英语好的强烈建议打开看看:
|
|
|
+我的Nginx配置主要参考自:
|
|
|
|
|
|
* https://codex.wordpress.org/Nginx
|
|
|
* https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/
|
|
|
-* 关于Nginx的配置常见错误,官方吐槽:《[Pitfalls and Common Mistakes](https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/)》
|
|
|
+* 关于Nginx的配置常见错误,官方吐槽:[Pitfalls and Common Mistakes](https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/)
|