Nginx 基本配置Tips

207 阅读1分钟

server 配置

location 配置

proxy_set_header

当代理到不属于本服务器的网址时,注释掉proxy_set_header Host $http_host;

location /api {
    proxy_pass http://127.0.0.1:8080;
#   proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Accept-Encoding "";
    proxy_read_timeout 300;
}

斜线问题

当请求 http://127.0.0.1:8080/api/user/list 时,nginx有以下类似配置时,实际nginx请求路径会变成什么?

location /api { 
    proxy_pass http://127.0.0.1:8080;
}
# http://127.0.0.1:8080/api/user/list

location /api/ { 
    proxy_pass http://127.0.0.1:8080;
}
# http://127.0.0.1:8080/api/user/list

location /api { 
    proxy_pass http://127.0.0.1:8080/;
}
# /api/user/list -> 
# /user/list ->
# http://127.0.0.1:8080//user/list

location /api/ { 
    proxy_pass http://127.0.0.1:8080/;
}
# /api/user/list -> 
# user/list ->
# http://127.0.0.1:8080/user/list

location /api {
    proxy_pass http://127.0.0.1:8080/server;
}
# /api/user/list -> 
# /user/list ->
# http://127.0.0.1:8080/server/user/list

location /api/ {
    proxy_pass http://127.0.0.1:8080/server;
}
# /api/user/list -> 
# user/list ->
# http://127.0.0.1:8080/serveruser/list

location /api {
    proxy_pass http://127.0.0.1:8080/server/;
}
# /api/user/list -> 
# /user/list ->
# http://127.0.0.1:8080/server//user/list

location /api/ {
    proxy_pass http://127.0.0.1:8080/server/;
}
# /api/user/list -> 
# user/list ->
# http://127.0.0.1:8080/server/user/list

总结:

  • 判断ip:port后是否接了字符串,ip:port/ 的 / 也是字符串。
  • 当 proxy_pass 的 ip:port 后未接字符串的时候,nginx 会将原请求路径原封不动地转交给下一站 nginx
  • 当 proxy_pass 的 ip:port 后接了字符串的时候,nginx 会将location后的字符串原请求路径中剔除,再将剩余的字符串拼接到 proxy_pass 后生成新请求路径

报错

浏览器Network 报301错误,状态为Mixed Content
背景:https 网页中,nginx代理了一个http的ip
解决:nginx配置时出现问题:location斜线 持续更新中...