如何将 nginx 重定向到运行 https 的 tornado 后端

如何将 nginx 重定向到运行 https 的 tornado 后端

我有 nginx 作为我的主要 Web 服务器,但我还有一个运行 https 的 tornado 服务器127.0.0.1:8888(与 nginx 服务器在同一台机器上)。当用户访问时,我想将流量重定向到我的 tornado 服务器http://myserver.com/tornadoapp。我至今为止有这个……

# tornado server
upstream tornadoserver {
        server 127.0.0.1:8888;
}

server {
        listen  80 default_server;
        root    /var/www;
        location /tornadoapp {
                proxy_pass https://tornadoserver;
        }
}

它实际上将请求转发到我的 tornado 服务器应用程序,但是 tornado 会生成此错误...

WARNING:tornado.access:404 GET /tornadoapp (127.0.0.1) 1.75ms

因此重定向将转到 tornado,但我收到错误,因为 tornado 没有 的处理程序/tornadoapp。它有 、 和 等的处理程序/.../login/user希望使用http://myserver.com/tornadoapp作为“别名”或掩码,以便 URL 对于最终用户来说看起来是无缝的(没有端口号),这样...

# When this is typed
http://myserver.com/tornadoapp/login

# they are directed here...
https://localhost:8888/login  

url 中不显示端口号。有办法吗?我在网上查看了一些示例,但大多数似乎都涉及 https 重定向到其他域或用作/服务器块中的位置。它们似乎都没有解决这个确切的问题。如果这不可能,或者我的方法完全错误,请告诉我。我对 nginx 还很陌生,所以任何帮助都会很感激。谢谢!

答案1

/在您的行中添加尾随内容proxy_pass,使其看起来像这样:

proxy_pass https://tornadoserver/;

/tornadoapp这应该会导致 nginx 在将 URI传递给 tornado 之前剥离其位置部分(在您的情况下)。

另请参阅文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

相关内容