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斜线持续更新中...