![如何将 nginx 重定向到运行 https 的 tornado 后端](https://linux22.com/image/636660/%E5%A6%82%E4%BD%95%E5%B0%86%20nginx%20%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E8%BF%90%E8%A1%8C%20https%20%E7%9A%84%20tornado%20%E5%90%8E%E7%AB%AF.png)
我有 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