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

我已经build立了一个Web服务器来查看我的存储库(一个Gitalist实例)在http:// localhost:3000 ,我想用nginxbuild立一个代理

我希望当接收到像DOMAIN / git /这样的URI时,请求会被代理到我的存储库视图中。

我现在的nginxconfiguration已经被声明如下:

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/; } 

但是在代理时应该有一种隐藏实际服务器地址的方法。

在这种情况下,URI是绝对的,一个解决scheme可以使用Nginx的HTTPSubModule或者通过mod_proxy_html模块切换到Apache。 他们都能够修改从后端服务器收到的响应并进行一些replace。

尝试nginx wiki中提供的解决scheme:

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/; } 

如果一个应用程序生成的HTML具有graphics/脚本/页面和浏览器请求的绝对path,那么应用程序和浏览器都不知道你正试图隐藏/gitpath下的应用程序,所以浏览器会试图通过它们的绝对path加载它们。 如果Nginx可以重新编写HTML,那么整个想法都可以工作,但是不能。

如果使用请求中发送的主机头生成绝对链接, 则应该设置Nginx将其设置为原始主机头值,方法是:

 proxy_set_header Host $http_host; 

到位置块。