nginx常见问题
1.相同server_name多个虚拟主机优先级访问
优先访问最先读取的server_name
server {
listen 80; #监听的端口
server_name testserver3 jeson.t.imoocc.io; #域名
#charset koi8-r; #字符集
#access_log /var/log/nginx/log/host.access.log main; #访问日志
location / {
root /opt/app/code3;#项目文件路径
index index.html index.htm; #默认定位
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 404 /50x.html; #异常处理
location = /50x.html {
root /usr/share/nginx/html; //异常处理页面
}
}
2.location匹配优先级
以下是按优先级排列说明:
1.等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。
2.^~类型表达式。一旦匹配成功,则不再查找其他匹配项。
3.正则表达式类型(~ ~*)的优先级次之。
4.常规字符串匹配类型。按前缀匹配。
实例:
location / {
# 匹配所有以 / 开头的请求。
# 但是如果有更长的同类型的表达式,则选择更长的表达式。
# 如果有正则表达式可以匹配,则优先匹配正则表达式。
[ configuration B ]
}
location /documents/ {
# 匹配所有以 /documents/ 开头的请求。
# 但是如果有更长的同类型的表达式,则选择更长的表达式。
# 如果有正则表达式可以匹配,则优先匹配正则表达式。
[ configuration C ]
}
location ^~ /images/ {
# 匹配所有以 /images/ 开头的表达式,如果匹配成功,则停止匹配查找。
# 所以,即便有符合的正则表达式location,也不会被使用
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配所有以 gif jpg jpeg结尾的请求。
# 但是 以 /images/开头的请求,将使用 Configuration D
[ configuration E ]
}
3.try_files使用
找指定路径下文件,如果不存在,则转给哪个文件执行。(缓存,动静分离)
实例:
location / {
root /opt/app/code;
try_files /cache $uri @java_page;
}
location @java_page{
proxy_pass http://127.0.0.1:9090;
}
4.nginx的alias和root的区别
location /img/ { #匹配url的路径 http://www.yuyu.com/img/request_path/1.png
root /var/www/image; #定位访问路径
}
#若按照这种配置的话,nginx会去/var/www/image/img/request_path/1.png
location /img/ { #匹配url的路径 http://www.yuyu.com/img/request_path/1.png
alias /var/www/image; #定位访问路径
}
#若按照这种配置的话,nginx会去/var/www/image/1.png
5.用什么方法传递用户的真实ip
代理:set x_real_ip=$remote_addr
后端服务:$x_real_ip=IP1
6.其他错误处理
问题:nginx:413 Request Entity Too Large
解决
1.用户上传文件限制 client_max_body_size
问题:nginx:502 bad gateway (后端服务无响应)
问题:504 gateway time-out(后端服务执行超时)