![如何使用 nginx 将请求代理到内部服务器?](https://linux22.com/image/577524/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20nginx%20%E5%B0%86%E8%AF%B7%E6%B1%82%E4%BB%A3%E7%90%86%E5%88%B0%E5%86%85%E9%83%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9F.png)
我已经设置了一个 Web 服务器来查看我的存储库(一个 Gitalist 实例)http://本地主机:3000我想使用 nginx 设置代理。
我希望在收到像 DOMAIN/git/ 这样的 URI 时,请求被代理到我的存储库视图。
我当前的 nginx 配置已声明如下:
location /git {
proxy_pass http://localhost:3000/;
}
请求确实被代理到服务器,但是没有任何图像/链接或 CSS 能够被解析,因为它们指向“http://localhost:3000/logo.png“ 例如。
编辑
如果我通过 proxy_pass 连接到实际的服务器地址它确实有效:
location /git {
proxy_pass http://192.168.1.111:3000/;
}
但是应该有一种方法可以在代理时隐藏实际的服务器地址。
答案1
如果 URI 是绝对的,解决方案可能是使用 NginxHTTP子模块或者切换到 Apachemod_proxy_html模块。它们都能够修改从后端服务器收到的响应,并进行一些替换。
答案2
尝试 nginx wiki 中提供的解决方案:
http://wiki.nginx.org/LikeApache
结果,应该是这样的。
location /git {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.1.111:3000/;
}
答案3
答案4
如果您使用请求中发送的 Host 标头生成绝对链接,那么你应该设置Nginx要将其设置为原始 Host 标头值,请添加:
proxy_set_header Host $http_host;
到位置块。