在Nginx中,如果你想在访问一个子目录时代理到其他端口的内容,但不希望将子目录路径传递给后端服务,可以通过调整location
块中的rewrite
指令来实现。
假设你希望访问http://yourdomain.com/app
时,(注意,访问时可能需要最后一个斜杠 http://yourdomain.com/app/)内容实际上来自于运行在本机3000端口上的服务,且不希望将/app
这一子目录路径传递给后端,可以这样配置Nginx:
server {
listen 80;
server_name yourdomain.com;
location /app {
rewrite ^/app/(.*)$ /$1 break; # 重写请求路径,去掉/app前缀
proxy_pass http://127.0.0.1:3000; # 代理到本机3000端口
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;
# WebSocket支持(如果需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 其他location配置...
}
在这个配置中,rewrite ^/app/(.*)$ /$1 break;
这一行的作用是将请求URL中的/app
部分剔除。正则表达式^/app/(.*)$
匹配以/app/
开头的任何路径,并捕获其后的所有字符(用(.*)
表示)。然后,/$1
将这部分路径(即捕获组1,不包含/app
)放回,通过break
终止重写规则执行。这样,当请求到达后端服务时,URL路径中就不包含原来的/app
子目录了。
Was this helpful?
0 / 0