我想知道 nginx 是否能够在同一个端口上处理 http 和 https 请求。[*]
这就是我想要做的。我正在运行处理 http 请求的 Web 服务器 (lighttpd),以及通过 https 为文档树的特定部分提供服务的 C 程序。这两个进程运行在同一台服务器上。
在防火墙级别,我只能有一个端口将流量转发到此服务器。所以我想做的是在这台服务器上设置 nginx 以便它侦听单个端口上的请求,然后:
A) 重定向所有http://myhost.com/*请求,以便它们转到 localhost:8080(lighttpd 正在侦听的位置)
B) 如果用户请求以 https://myhost.com/app 开头的 URL,它会将该请求发送到 localhost:8008(C 程序)。请注意,在这种情况下,远程浏览器和 nginx 之间的流量必须加密。
你认为这可能吗?如果是,怎么做?
我知道如何使用两个不同的端口来做到这一点。我面临的挑战是仅使用一个端口来完成此操作(不幸的是,我无法控制此特定环境中的防火墙配置,因此这是我无法避免的限制)。使用诸如通过 ssh 进行反向端口转发来绕过防火墙的技术也不起作用,因为这应该适用于只有 Web 浏览器和 Internet 链接的远程用户。
如果这超出了 nginx 的能力,您知道还有其他产品可以满足此要求吗?(到目前为止,我在使用 lighttpd 和 pound 进行设置时没有成功)。我也更喜欢避免使用 Apache(尽管如果这是唯一可能的选择,我愿意使用它)。
提前致谢,亚历克斯
[*] 为了清楚起见,我说的是通过同一端口处理加密和未加密的 HTTP 连接。加密是通过 SSL 还是 TLS 完成都没有关系。
请看下图。
这应该如何工作?
当远程请求 http://myhost.com:8080/* 时,请求应该转发到监听环回接口 8008 端口的 http 服务器。这是简单的部分。
当远程用户请求 http://myhost.com:8080/specialurl ...
充当应用程序级网关的程序应该能够将连接升级为加密会话(无需更改端口)
与远程浏览器建立加密会话后,应将请求转发给监听环回接口8000端口的C程序
我的问题是:
硬限制:
软限制:
迄今为止尝试过的应用程序网关产品(未成功)
相关 RFC