目录
前言
- nginx 1.14.2
proxy配置
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host:$server_port;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Nginx-Proxy true;
# index页面设置
index index;
}
proxy_set_header Host $host:$server_port;
:告知后端,客户端请求的真实host和port。proxy_set_header X-Real-IP $remote_addr;
:真实IP,即客户端的IP。需要用ngx_http_realip_module
一起使用。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
:代理走过的ip路径。X-Forwarded-For
的值可能为:218.107.55.254, 192.168.0.3, 192.168.0.99, ...
,对应Client IP, Proxy1 IP, Proxy2 IP, ...
全部追加到url中
location [location表达式] {
proxy_pass [proxy_pass表达式];
....
}
当proxy_pass 表达式
中端口号后面不包含/
字符时,location匹配的部分全部追加到proxy_pass表达式后面。
location / {
proxy_pass http://127.0.0.1:8080;
....
}
request url | location 表达式 | 匹配的部分 | proxy_pass 表达式 | proxy 后的 url | 是否符合预期 |
---|---|---|---|---|---|
http://127.0.0.1/logo.png | / | /logo.png | http://127.0.0.1:8080 | http://127.0.0.1:8080/logo.png | 符合预期 |
http://127.0.0.1/images/logo.png | / | /images/logo.png | http://127.0.0.1:8080 | http://127.0.0.1:8080/images/logo.png | 符合预期 |
http://127.0.0.1/user/add | / | /user/add | http://127.0.0.1:8080 | http://127.0.0.1:8080/user/add | 符合预期 |
http://127.0.0.1/oa/logo.png | /oa/ | /oa/logo.png | http://127.0.0.1:8080 | http://127.0.0.1:8080/oa/logo.png | 符合预期 |
http://127.0.0.1/oa/images/logo.png | /oa/ | /oa/images/logo.png | http://127.0.0.1:8080 | http://127.0.0.1:8080/oa/images/logo.png | 符合预期 |
http://127.0.0.1/oa/user/add | /oa/ | /oa/user/add | http://127.0.0.1:8080 | http://127.0.0.1:8080/oa/user/add | 符合预期 |
http://127.0.0.1/oa/logo.png | /oa | /oa/logo.png | http://127.0.0.1:8080 | http://127.0.0.1:8080/oa/logo.png | 符合预期 |
http://127.0.0.1/oa/images/logo.png | /oa | /oa/images/logo.png | http://127.0.0.1:8080 | http://127.0.0.1:8080/oa/images/logo.png | 符合预期 |
http://127.0.0.1/oa/user/add | /oa | /oa/user/add | http://127.0.0.1:8080 | http://127.0.0.1:8080/oa/user/add | 符合预期 |
http://127.0.0.1/oauser/add | /oa | /oauser/add | http://127.0.0.1:8080 | http://127.0.0.1:8080/oauser/add | 符合预期 |
注:按照使用代理方式将url中的端口号去掉进行评判,比如将http://127.0.0.1/logo.png代理成ttp://127.0.0.1:8080/logo.png。 |
proxy_pass 表达式
中端口号后面不包含/
字符时:
- location 表达式是否以
/
结尾均可。
部分追加到url中
当proxy_pass 表达式
中端口号后面包含/
字符时,对location匹配的部分进行截取操作,将截取所得的部分追加到proxy_pass表达式后面。
location / {
proxy_pass http://127.0.0.1:8080/oa/;
....
}
request url | location表达式 | 截取所得的部分 | proxy_pass 表达式 | proxy 后的 url | 是否符合预期 |
---|---|---|---|---|---|
http://127.0.0.1/logo.png | / | logo.png | http://127.0.0.1:8080/ | http://127.0.0.1:8080/logo.png | 符合预期 |
http://127.0.0.1/images/logo.png | / | images/logo.png | http://127.0.0.1:8080/ | http://127.0.0.1:8080/images/logo.png | 符合预期 |
http://127.0.0.1/user/add | / | user/add | http://127.0.0.1:8080/ | http://127.0.0.1:8080/user/add | 符合预期 |
http://127.0.0.1/logo.png | / | logo.png | http://127.0.0.1:8080/oa/ | http://127.0.0.1:8080/oa/logo.png | 不符合预期 |
http://127.0.0.1/images/logo.png | / | images/logo.png | http://127.0.0.1:8080/oa/ | http://127.0.0.1:8080/oa/images/logo.png | 不符合预期 |
http://127.0.0.1/user/add | / | user/add | http://127.0.0.1:8080/oa/ | http://127.0.0.1:8080/oa/user/add | 不符合预期 |
http://127.0.0.1/logo.png | / | logo.png | http://127.0.0.1:8080/oa | http://127.0.0.1:8080/oalogo.png | 不符合预期 |
http://127.0.0.1/images/logo.png | / | images/logo.png | http://127.0.0.1:8080/oa | http://127.0.0.1:8080/oa/imageslogo.png | 不符合预期 |
http://127.0.0.1/user/add | / | user/add | http://127.0.0.1:8080/oa | http://127.0.0.1:8080/oa/useradd | 不符合预期 |
http://127.0.0.1/oa/logo.png | / | oa/logo.png | http://127.0.0.1:8080/ | http://127.0.0.1:8080/oa/logo.png | 符合预期 |
http://127.0.0.1/oa/images/logo.png | / | oa/images/logo.png | http://127.0.0.1:8080/ | http://127.0.0.1:8080/oa/images/logo.png | 符合预期 |
http://127.0.0.1/oa/user/add | / | oa/user/add | http://127.0.0.1:8080/ | http://127.0.0.1:8080/oa/user/add | 符合预期 |
http://127.0.0.1/oa/logo.png | /oa/ | logo.png | http://127.0.0.1:8080/ | http://127.0.0.1:8080/logo.png | 不符合预期 |
http://127.0.0.1/oa/images/logo.png | /oa/ | images/logo.png | http://127.0.0.1:8080/ | http://127.0.0.1:8080/images/logo.png | 不符合预期 |
http://127.0.0.1/oa/user/add | /oa/ | user/add | http://127.0.0.1:8080/ | http://127.0.0.1:8080/user/add | 不符合预期 |
http://127.0.0.1/oa/logo.png | /oa/ | logo.png | http://127.0.0.1:8080/oa/ | http://127.0.0.1:8080/oa/logo.png | 符合预期 |
http://127.0.0.1/oa/images/logo.png | /oa/ | images/logo.png | http://127.0.0.1:8080/oa/ | http://127.0.0.1:8080/oa/images/logo.png | 符合预期 |
http://127.0.0.1/oa/user/add | /oa/ | user/add | http://127.0.0.1:8080/oa/ | http://127.0.0.1:8080/oa/user/add | 符合预期 |
http://127.0.0.1/oa/logo.png | /oa/ | logo.png | http://127.0.0.1:8080/oa | http://127.0.0.1:8080/oalogo.png | 不符合预期 |
http://127.0.0.1/oa/images/logo.png | /oa/ | images/logo.png | http://127.0.0.1:8080/oa | http://127.0.0.1:8080/oaimages/logo.png | 不符合预期 |
http://127.0.0.1/oa/user/add | /oa/ | user/add | http://127.0.0.1:8080/oa | http://127.0.0.1:8080/oauser/add | 不符合预期 |
http://127.0.0.1/oa/logo.png | /oa | /logo.png | http://127.0.0.1:8080/oa/ | http://127.0.0.1:8080/oa//logo.png | 符合预期 |
http://127.0.0.1/oa/images/logo.png | /oa | /images/logo.png | http://127.0.0.1:8080/oa/ | http://127.0.0.1:8080/oa//images/logo.png | 符合预期 |
http://127.0.0.1/oa/user/add | /oa | /user/add | http://127.0.0.1:8080/oa/ | http://127.0.0.1:8080/oa//user/add | 符合预期 |
http://127.0.0.1/oauser/add | /oa | user/add | http://127.0.0.1:8080/oa/ | http://127.0.0.1:8080/oa/user/add | 不符合预期 |
http://127.0.0.1/oa/logo.png | /oa | /logo.png | http://127.0.0.1:8080/oa | http://127.0.0.1:8080/oa/logo.png | 符合预期 |
http://127.0.0.1/oa/images/logo.png | /oa | /images/logo.png | http://127.0.0.1:8080/oa | http://127.0.0.1:8080/oa/images/logo.png | 符合预期 |
http://127.0.0.1/oa/user/add | /oa | /user/add | http://127.0.0.1:8080/oa | http://127.0.0.1:8080/oa/user/add | 符合预期 |
http://127.0.0.1/oauser/add | /oa | user/add | http://127.0.0.1:8080/oa | http://127.0.0.1:8080/oauser/add | 符合预期 |
注:按照使用代理方式将url中的端口号去掉进行评判,比如将http://127.0.0.1/logo.png代理成ttp://127.0.0.1:8080/logo.png。 |
proxy_pass 表达式
中端口号后面包含/
字符时:
proxy_pass 表达式
以/
结尾时,location 表达式也应以/
结尾proxy_pass 表达式
不以/
结尾时,location 表达式也不应以/
结尾
多次代理配置
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host:$server_port;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
set $xscheme $scheme;
if ( $http_x_nginx_proxy ) {
set $xscheme $http_x_forwarded_proto;
}
proxy_set_header X-Forwarded-Proto $xscheme;
proxy_set_header X-Nginx-Proxy true;
index index;
}
以某个路径开头
location ^~ /api {
...
}
或者
location ~* ^/api {
...
}
weblogic:https请求转成http请求
location / {
...
proxy_set_header WL-Proxy-SSL true;
...
}
proxy_set_header WL-Proxy-SSL true;
https请求转成http请求时,weblogic设置
tomcat:https请求转成http请求
location / {
...
proxy_set_header X-Forwarded-Proto $scheme;
...
}
proxy_set_header X-Forwarded-Proto $scheme;
https请求转成http请求时,tomcat设置
nginx多次代理:(tomcat中)scheme或https丢失问题
- 在第1层代理上设置
X-Forwarded-Proto
location / {
...
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Nginx-Proxy true;
...
}
- 在第2层代理上再次设置
X-Forwarded-Proto
location / {
...
set $xscheme $scheme;
if ( $http_x_nginx_proxy ) {
set $xscheme $http_x_forwarded_proto;
}
proxy_set_header X-Forwarded-Proto $xscheme;
...
}
- 在第3层及更多层,参考第2层的设置
nginx多次代理:客户端真实IP丢失 问题
- 在第1层代理上设置
X-Real-IP
location / {
...
proxy_set_header X-Real-IP $remote_addr;
...
}
- 在第2层代理上再次设置
X-Real-IP
location / {
...
proxy_set_header X-Forwarded-Proto $http_x_real_ip;
...
}
- 在第3层及更多层,参考第2层的设置
nginx配置ws
ws协议必须要有的
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
nginx 全局添加
在nginx.conf中添加
单Server添加
server {
listen 80;
server_name xxx;
root /xxx/xxx;
# ws://
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
...
}
局部添加
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host:$server_port;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Nginx-Proxy true;
# ws://
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
# index页面设置
index index;
}