Nginx代理proxy pass配置去除前缀
在项目开发中,会遇到门户网站需要根据统一的前缀代理到其他服务器,在此记录下nginx的相关配置。
不加前缀的配置
大多数的情况下,我们都是配置的没有前缀,比如访问跟路径代理到本地的8088端口。
upstream one {
server localhost:8088 weight=5;
}
server {
listen 80;
server_name localhost;
access_log "pipe:rollback /data/log/nginx/access.log interval=1d baknum=7 maxsize=1G" main;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://one;
}
}
加前缀的配置
上游的配置增加前缀是为了方便统一代理,但是下游的服务其实是不关心前缀的,那么可以通过nginx的配置将该前缀去除。
方案一:proxy_pass后面加根路径/
server {
listen 80;
server_name localhost;
access_log "pipe:rollback /data/log/nginx/access.log interval=1d baknum=7 maxsize=1G" main;
location ^~/user/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://user/;
}
location ^~/order/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://order/;
}
}
^~/user/
表示匹配前缀是user
的请求,proxy_pass
的结尾有/
, 则会把/user/*
后面的路径直接拼接到后面,即移除user
。
方案二:使用rewrite
upstream user {
server localhost:8089 weight=5;
}
upstream order {
server localhost:8090 weight=5;
}
server {
listen 80;
server_name localhost;
access_log "pipe:rollback /data/log/nginx/access.log interval=1d baknum=7 maxsize=1G" main;
location ^~/user/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
rewrite ^/user/(.*)$ /$1 break;
proxy_pass http://user;
}
location ^~/order/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
rewrite ^/order/(.*)$ /$1 break;
proxy_pass http://order;
}
}
修改前端配置
修改nginx
配置的同时,前端也需要同步修改。其实很简单,在每一个调用的接口前加上统一的前缀即可,以axios
为例:
import axios from 'axios'
axios.defaults.baseURL = '/common-api' // 与nginx保持一致
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。