记录一些 Nginx 的常用配置及其说明
反向代理
配置及其注释如下,可以看到 proxy_pass 后面加/
与不加/
的区别
总结起来可以把 /proxy/
理解为~ ^/proxy/(.*)
。如果 proxy_pass
以 /
结尾,则在proxy_pass
后拼接上 $1
,否则拼拼接上 $uri
server {
listen 80;
server_name localhost;
# http://127.0.0.1/proxy1/api/test.json
# => http://127.0.0.1:5500/proxy1/api/test.json
location /proxy1/ {
proxy_pass http://127.0.0.1:5500;
}
# http://127.0.0.1/proxy2/api/test.json
# => http://127.0.0.1:5500/api/test.json
location /proxy2/ {
proxy_pass http://127.0.0.1:5500/;
}
# http://127.0.0.1/proxy3/api/test.json
# => http://127.0.0.1:5500/apiapi/test.json
location /proxy3/ {
proxy_pass http://127.0.0.1:5500/api;
}
# http://127.0.0.1/proxy4/api/test.json
# => http://127.0.0.1:5500/api/api/test.json
location /proxy4/ {
proxy_pass http://127.0.0.1:5500/api/;
}
}
Tomcat 反向代理配置
所以对于 tomcat 下 context path 为 /app01/
的应用,如果为期分配一个域名单独访问,最佳写法如下
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080/app01/;
}
# 某些接口使用绝对路径时,请求`/app01/api/`经过上述代理实际上在内部请求的是`:8080/app01/app01/api/`
# 所以需要加上如下配置
location /app01/ {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;
}