【问题标题】:nginx reverse proxy to backend running on localhostnginx 反向代理到在 localhost 上运行的后端
【发布时间】:2013-05-16 04:57:30
【问题描述】:

编辑:事实证明我下面的设置确实有效。以前,我会重定向到端口 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 可访问?

谢谢。

【问题讨论】:

    标签: nginx reverse-proxy


    【解决方案1】:

    编辑:下面的配置来自正常工作的 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/;
            }
    }
    

    【讨论】:

    • 它没有用。但是上面的配置中有一些错误。我不得不将上游块移出服务器块,并删除“127.0.0.1:36000”部分的“http://”前缀。有一个内部服务器块,我也必须删除“服务器{”和“}”部分。但是,是的,它没有成功……有什么想法吗?
    • 啊,对不起,我打错了。第二个服务器块不应该存在。现在编辑。
    • 另外,尝试使用proxy_redirect 语句。 proxy_redirect http://localhost:36000/ http://$server_name/
    • 还是不行。现在我的配置看起来像:upstream backend { server 127.0.0.1:36000; } 服务器 { 听 80; server_name domain.somehost.com;位置 / { proxy_pass backend; proxy_redirect 127.0.0.1:36000 http://$server_name/; proxy_set_header 主机 $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
    • @bibstha 很好,我已经编辑了我的答案。它适用于 $http_host,但从技术上讲,它应该使用 $host 来去除端口号等。
    猜你喜欢
    • 2021-03-02
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2018-03-12
    • 2012-10-25
    • 2019-02-16
    • 2012-11-04
    • 1970-01-01
    相关资源
    最近更新 更多