##Nginx配置说明
Nginx是目前非常流行的Web server。它可以高效的处理多并发网络请求,可以比较简便的配置成Web server或者mail server,又或者可以作为反向代理服务器来使用。Nginx除了高性能,功能全,还有配置灵活的特性,通过配置可以实现很多复杂的功能,尤其是Server, Location,Rewrite的配置。
Server Block 配置
"virtual host"是Apache的术语,现在Apache已经年老色衰了,基本上都是在使用Nginx作为web server。在Nginx中,类似的概念叫Server Block. 通过配置一个Server,就可以支持一个域名,设置对应的目录就可以当做一个新的网站。配置上多个Server,就可以在同一台机器上配置多个域名,这样比较节省云主机资源。基本的语法如下:
1 | server { |
其中server_name配置项就是此战域名的配置,可以直接写,也可以通过*通配符,还支持正则表达式,具体可以参考官网这篇文章。Nginx的每项指令要有分号最为结尾,如果没有的话则不生效,这会导致很多莫名其妙的错误,比如跳转到本机上其他网站。
nginx Server Block的配置中,还可以写入listen, index, access_log 等指令,比较重要的是Location指令的规则。
Location指令规则
通过Server Block的配置,nginx可以确定一个请求对应哪个域名,再通过Location的配置,确定使用哪个具体的文件来相应URI的请求。Location可以根据不同请求设置不同配置,比如对于静态图片设置缓存时间,对于.php脚本设置fastcgi的端口,对于特殊的URL进行重定向或者重写。
Location的语法规则如下:
1 | location <font color='red'>[ = | ~ | ~* | ^~ ]</font> uri { |
修饰符是可选的,他的规则如下:
=
:等号表示完全匹配~
:破折号表示大小写敏感的正则匹配~*
:表示大小写不敏感的正则匹配^~
:表示前缀匹配,但是优先级高于正则匹配- <无>: 没有修饰符,表示为按location_match前缀匹配。
多个 location 配置的情况下匹配顺序为(未验证,仅供参考):
- 首先精确匹配
=
- 其次前缀匹配
^~
- 其次是按文件中顺序的正则匹配
- 然后匹配不带任何修饰的前缀匹配。
- 最后是交给
/
通用匹配 - 当有匹配成功时候,停止匹配,按当前匹配规则处理请求
Rewrite配置
当需要对URL进行重写的时候,就要rewrite了。就像当初困惑我很久的问题:PHP做后台的程序,为什么在URL上看不到.php后缀,也看不到?xx=xxx的参数,原来是都写入URL上了。这些在Nginx都是通过Rewrite来实现的。
Rewrite指令可以放到Server、Location或者if的配置块中去,能够实现比较复杂的逻辑。基本语法如下:
1 | rewrite regex URL [flag]; |
官网的这篇文章写的不错,值得看一下,它比较了try_files、return和rewrite三个命令的区别。