Nginx常用配置

调试

nginx的调试大致可以通过如下几种方式来进行:

  • 通过日志进行调试
  • 通过手动return状态码进行调试(多用于调试location,看url是否匹配到某个location)

location

匹配类型

~ 表示执行一个正则匹配,区分大小写
* 表示执行一个正则匹配,不区分大小写
^
表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location。
= 进行普通字符精确匹配。也就是完全匹配。
@ “@” 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

优先级

在nginx的location和配置中location的顺序没有太大关系。正location表达式的类型有关。相同类型的表达式,字符串长的会优先匹配。
以下是按优先级排列说明:
第一优先级:等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。
第二优先级:^类型表达式。一旦匹配成功,则不再查找其他匹配项。
第三优先级:正则表达式类型(
~*)的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
第四优先级:常规字符串匹配类型。按前缀匹配。

重定向与转发

转发时改变url

可以通过alias来实现。

比如想要将http://xxx.com/devprocess/index.html这个请求,通过服务器的/var/www/dev-process/index.html这个文件来响应,可以这样配置:

1
2
3
4
5
location ^~ /devprocess
{
index index.html index.htm index.php;
alias /var/www/dev-process;
}

注意在location ^~ /devprocess的末尾,不要加斜杠。

将请求转发到服务器的某个端口

1
2
3
4
5
6
7
8
location ^~ /devprocess/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header Connection "";
proxy_pass http://127.0.0.1:3000/;
}

常见问题

修改配置并reload后,部分请求可以用到新的配置,但是部分请求还是老的配置

遇到的这种情况,是因为nginx的多个进程中,有部分在reload后并未读取到修改后的配置。kill掉nginx进程重启后,就正常了。