相同server_name多个虚拟主机优先级访问
比如如下配置:
server {
listen 80;
server_name testserver1 127.0.0.1;
location {
...
}
}
server {
listen 80;
server_name testserver2 127.0.0.1;
location {
...
}
}
比如配置了不同的虚拟主机,使用了相同的IP和端口。
当进行多个相同IP和端口进行-t
检查和启动时,都会爆出如下警告,但不影响启动。
结论
Nginx读取配置文件的时候是按照文件名顺序进行读取的,优先读取第一个文件名下的虚拟主机(IP端口相同)。
如server1.conf,server2.conf,那优先加载的配置是server1.conf下面的配置。
location匹配优先级
=
:进行普通字符精确匹配,也就是完全匹配
(高优先级)
^~
:表示普通字符匹配,使用前缀匹配
(高优先级)
~ \~*
:表示执行一个正则匹配()
如下配置:
location = /code1/ {
rewrite ~(.*)$ /code1/index.html break;
}
location ~ /code.* {
rewrite ^(.*)$ /code3/index.html break;
}
location ^~ /code {
rewrite ^(.*)$ /code2/index.html break;
}
范文链接http://XXX.XXX.XXX.XXX/code1/
,则访问到的是Server1。
将第一条注释掉,则访问到的是Server2(匹配到第二条,不是高优先级,就接着匹配),将第二条注释掉,才访问到Server3。
try_files使用
顺序检测文件是否存在,如
location / {
try_files $uri $uri/ .index.php
}
若$uri
存在,则返回结果,若不存在,则接着访问$uri/
,直到返回结果或者没有结果返回错误。
Nginx的alias和root区别
root
location /request_path/image/ {
root /loca_path/image/;
}
一个请求http://XXX.XXX.XXX.XXX/request_path/iamge/cat.png
,则实际的资源路径为/local_path/image/request_path/image/cat.png
,实际是root+请求路径。
alias
location /request_path/image/ {
alias /loca_path/image/;
}
一个请求http://XXX.XXX.XXX.XXX/request_path/iamge/cat.png
,则实际的资源路径为/loca_path/image/cat.png
,没有请求的那个路径。
用什么方法传递用户的真实IP
使用remote_addr经过多级代理就无法获取真实用户的IP。
使用X-Forwarded-For容易被篡改。
方案:和每一级代理取得连续,进行HTTP头字段的添加,一级一级传递。
其他
错误码
413 Request Entity Too Large
修改用户上传文件限制 client_max_body_size
502 bad gateway
后端服务器无响应
504 Gateway Time-out
后端服务执行超时