如何在非根路径的server location中通过proxy_pass转发至Unix套接字?
解决Nginx代理转发到
/myapi/路径的配置问题 当你需要将mysite.com/myapi/路径下的请求转发到Gunicorn的Unix套接字时,核心问题是处理Nginx对请求路径的传递规则,以下是两种可行的配置方案:
方案一:调整proxy_pass末尾的斜杠
server { listen 80; server_name mysite.com www.mysite.com; location /myapi/ { # 末尾添加斜杠,让Nginx自动替换路径前缀 proxy_pass http://unix:/home/myuser/app/run/gunicorn.sock/; } }
这种写法下,Nginx会将请求中的/myapi/前缀替换为/后再转发给后端。比如curl mysite.com/myapi/data会被转发为后端的/data请求,和原来根路径转发的逻辑完全一致。
方案二:用rewrite重写请求路径
server { listen 80; server_name mysite.com www.mysite.com; location /myapi/ { # 重写URI,去掉/myapi/前缀 rewrite ^/myapi/(.*)$ /$1 break; proxy_pass http://unix:/home/myuser/app/run/gunicorn.sock; } }
通过rewrite规则将/myapi/xxx格式的请求重写为/xxx,再转发给后端,效果和方案一相同,适合需要更灵活路径处理的场景。
注意事项
- 必须使用
location /myapi/(带末尾斜杠),这样只会匹配以/myapi/开头的合法请求,避免误匹配类似/myapia这类不符合预期的路径。 - 无需使用
alias指令,alias主要用于映射本地文件系统路径,不适用于代理转发场景。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

