在nginx中如果想配置反项代理且去除URL前缀,用location 指令来匹配带有前缀的请求,再使用 proxy_pass 指令将请求转发到后端服务器,并在 proxy_pass 指令中去除前缀。华纳云为大家分享以下示例配置:
假设有一个后端服务器运行在 http://backend_server,并且想将 /api/v1/ 前缀的请求转发到这个后端服务器,同时去除 /api/v1/ 前缀。
首先,需要配置 Nginx打开你的网站配置文件:
sudo nano /etc/nginx/sites-available/your_domain
在 server 块中添加以下配置:
server {
listen 80;
server_name your_domain www.your_domain;
# 静态文件配置
location / {
root /var/www/your_domain/html;
index index.html index.htm;
try_files $uri $uri/ =404;
}
# 反向代理配置
location /api/v1/ {
proxy_pass http://backend_server/;
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-Forwarded-Proto $scheme;
}
}
以上配置中
location /api/v1/ 匹配带有 /api/v1/ 前缀的请求。
proxy_pass http://backend_server/; 将请求转发到后端服务器,并且会去除匹配的
/api/v1/ 前缀。
再来,就是需要测试和重载nginx。测试nginx的配置正确性
sudo nginx -t
重新加载nginx以应用新配置
sudo systemctl reload nginx
假设完整的配置文件为:
server {
listen 80;
server_name your_domain www.your_domain;
# 静态文件配置
location / {
root /var/www/your_domain/html;
index index.html index.htm;
try_files $uri $uri/ =404;
}
# 反向代理配置
location /api/v1/ {
proxy_pass http://backend_server/;
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-Forwarded-Proto $scheme;
}
}
其中,用户开始访问 http://your_domain/api/v1/some/path 时,Nginx 将请求转发到 http://backend_server/some/path,并去除 /api/v1/ 前缀。