nginx配置反向代理规范
nginx中配置location代理转发规则的时候不同写法对应不同转发规则。
在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/表示绝对根路径;如果没有/表示相对路径,把匹配的路径部分也给代理走。
为方便理解将前端的框架代理设置与nginx的反向代理比较说明
以请求访问地址:http://127.0.0.1:8080/proxy/getuser为例
第一种配置
server {
listen 8080;
server_name 127.0.0.1;
location /proxy/ { # 接口反向代理配置 不携带proxy去请求
proxy_pass http://192.123.0.102:9000/;
}
}
相对路径
最后实际请求: http://192.123.0.102:9000/getuser
第二种配置
server {
listen 8080;
server_name 127.0.0.1;
location /proxy/ { # 接口反向代理配置 携带proxy去请求
proxy_pass http://192.123.0.102:9000;
}
}
绝对路径
最后实际请求: http://192.123.0.102:9000/proxy/getuser
第三种配置
server {
listen 8080;
server_name 127.0.0.1;
location /proxy/ { # 接口反向代理配置 携带proxy去请求
proxy_pass http://192.123.0.102:9000/api/;
}
}
相对路径
最后实际请求: http://192.123.0.102:9000/api/getuser
或
server {
listen 8080;
server_name 127.0.0.1;
location /proxy { # 接口反向代理配置 携带proxy去请求
proxy_pass http://192.123.0.102:9000/api;
}
}
最后实际请求: http://192.123.0.102:9000/api/getuser
第四种配置
server {
listen 8080;
server_name 127.0.0.1;
location /proxy/ { # 接口反向代理配置 携带proxy去请求
proxy_pass http://192.123.0.102:9000/api;
}
}
相对路径
最后实际请求: http://192.123.0.102:9000/apigetuser
第五种配置与第二种类似
server {
listen 8080;
server_name 127.0.0.1;
location /proxy { # 接口反向代理配置 携带proxy去请求
proxy_pass http://192.123.0.102:9000;
}
}
相对路径
最后实际请求: http://192.123.0.102:9000/proxy/getuser
应用 对比webpack的本地代理与nginx的反向代理
dev: {
// 接口全路径:request('http://192.123.0.102:9090/market-api/data/media/mainList')
'/market-api': {
target: 'http://192.123.0.102:9090',
changeOrigin: true,
pathRewrite: {
// '^/proxy': '', // proxy 替换 '' 意味着请求不带proxy
// 对应nginx配置
// location /proxy/ { 代理将proxy字符去后掉拼接上proxy后面的接口地址
// proxy_pass http://192.168.4.121:9090/;
// }
'^/proxy':'proxy' // proxy 替换 'proxy' 意味请求携带proxy
// 对应nginx配置
// location /proxy { 代理带着proxy拼接上后面的接口地址
// proxy_pass http://192.168.4.121:9090;
// }
// 或
// location /proxy/ { 代理带着proxy拼接上后面的接口地址
// proxy_pass http://192.168.4.121:9090;
// }
}
}
}