如何使用 nginx 将请求代理到内部服务器?

如何使用 nginx 将请求代理到内部服务器?

我已经设置了一个 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;

到位置块。

相关内容