我不知道该如何实现这一点。网络上的大多数人似乎都希望为各种应用程序根目录提供一个子目录 (example.com/my-subdirectory)。
我希望 example.com/foo 透明地代理到 127.0.0.1/my-subdirectory/foo。
有什么指点吗?
我尝试了几乎所有的 proxy_pass 和 proxy_redirect 的组合 :(
我觉得这很接近
201 rewrite /(.*) /my-subdirectory/$1 break;
202 proxy_pass http://127.0.0.1:8000;
203 proxy_redirect off;
205 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
但不幸的是,它也重写了浏览器上的 URL。
更新
我发现代理传递正在工作,但我的应用程序重定向到 HTTPS,导致我的大部分调试都无用。我会更改 nginx 中的设置,并发现令人困惑的输出、重定向循环等,因为 nginx 正在执行 listen 443 规则。
现在我已经在应用程序中尽可能地禁用重定向,一切又恢复正常了。
感谢大家的反对 - 我不认为我的问题特别不值得问,而且我只在我花了至少 5 个小时解决一个看不到尽头的问题时才会提问。
答案1
如果你只是想将所有内容传递给你的应用程序,则无需重写任何内容。尝试一些
location / {
proxy_pass http://127.0.0.1:8000/my-subdirectory/;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
要让你的浏览器重定向到正确的主机(如果你的应用没有这样做),你应该使用
proxy_redirect default;
相反,这应该相当于
proxy_redirect http://127.0.0.1:8000/my-subdirectory/ /;
在你的情况下。检查