内部主机和端口使用nginx显示在网页中

时间:2013-12-01 23:19:33

标签: nginx proxy port host

我有两个网站运行在两个tomcat服务器上(单独的机器或LAN IP)。这是我的nginx配置:

server { # simple reverse-proxy
    listen       80;
    server_name  server1.com www.server1.com;

    # pass requests for dynamic content to rails/turbogears/zope, et al
    location / {
      proxy_pass      http://192.168.1.141:8080;
    }
}

server { # simple reverse-proxy
    listen       80;
    server_name  server2.com www.server2.com;

    # pass requests for dynamic content to rails/turbogears/zope, et al
    location / {
      proxy_pass      http://192.168.1.129:8080;
    }
}

Nginx在与server1的IP(192.168.1.141)相同的硬件上运行。一切似乎都运行良好,除非我去server1上的某个页面时,该页面(以及后续页面)上的所有相对URL都变为http://192.168.1.141:8080/blah而不是http://www.server1.com/blah。有许多页面工作正常,并使用www.server1.com和默认端口(80)维护主机/端口。我找不到为什么有些页面工作而其他一些页面改变了主机和端口。任何帮助表示赞赏。

谢谢!

2 个答案:

答案 0 :(得分:0)

我会在代理块

中添加此行
proxy_set_header Host $http_host;

这将使后端服务器检测外部主机而不是内部IP。

修改

<base>标记为页面中的所有相对链接设置了基础,就像我的网页托管在foo.com并且我放了base = bar.com一样,例如像这样的网址

<a href = '/some/random/uri'>click me</a>

通常它应该转到http://foo.com/some/random/uri,但基数会指向bar.com/some/random/uri

这就是有基础的页面工作的原因。

答案 1 :(得分:0)

原来我的Tomcat版本是6.0。传递real-ip的阀门在后来的版本中引入。获得6.0.37后,现在工作正常。

在Tomcat server.xml文件中,在Engine块中添加以下内容。

 <!--pass remote IP into the log-->
  <Valve className="org.apache.catalina.valves.RemoteIpValve"
      remoteIpHeader="x-forwarded-for"
      protocolHeader="x-forwarded-proto"
      protocolHeaderHttpsValue="https" />

In nginx.conf:

  location / {
      proxy_pass      http://saturn.com:81;
      proxy_redirect off;
      proxy_buffering off;
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP       $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }