22

编辑:事实证明我下面的设置确实有效。以前,我正在重定向到端口 36000,但这是由于我的后端应用程序上的一些配置设置导致的。

我不完全确定,但我相信我可能想使用 nginx 设置反向代理。

我有一个应用程序在端口 36000 的服务器上运行。默认情况下,端口 36000 不可​​公开访问,我的目的是让 nginx 监听公共 url,将对该 url 的任何请求定向到在端口 36000 上运行的应用程序。在此期间在整个过程中,用户不应该知道他/她的请求正在发送到在我的服务器端口 36000 上运行的应用程序。

更具体地说,假设我的网址是http://domain.somehost.com/

在访问http://domain.somehost.com/时,nginx 应该获取请求并将其重定向到已经在服务器上运行的应用程序的 36000 端口,应用程序进行一些处理,并将响应传回。端口 36000 不可​​公开访问,不应作为任何 url 的一部分出现。

我尝试了一个看起来像这样的设置:

server {
    listen 80;
    server_name domain.somehost.com
    location / {
        proxy_pass http://127.0.0.1:36000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

并将其包含在我的主要 nginx.conf 中

但是,它要求我使端口 36000 可公开访问,我正在努力避免这种情况。端口 36000 也显示为 Web 浏览器中转发 url 的一部分。

有什么方法可以做同样的事情,但不使端口 36000 可访问?

谢谢你。

4

1 回答 1

26

编辑:下面的配置来自一个工作的 nginx 配置,主机名和端口已更改。

您可能需要将侦听端口 36000 的服务器设置为upstream服务器(请参阅http://nginx.org/en/docs/http/ngx_http_upstream_module.html)。

server {
        listen   80;
        server_name domain.somehost.com;

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_set_header X-NginX-Proxy true;
                proxy_pass http://localhost:36000/;
                proxy_redirect http://localhost:36000/ https://$server_name/;
        }
}
于 2013-05-21T12:23:59.463 回答