我们有一个在 EC2 实例上的 Tomcat 中运行的应用程序。我们在 EC2 前面有一个 ELB,它配置了以下侦听器:
ELB
port 80 --> nginx port 80 --> redirect |
port 443 <--> tomcat port 8080 <---
在 EC2 实例上,我们运行 nginx 并执行反向代理,将端口 80 上的连接重定向到端口 8080(Tomcat)。配置如下:
http {
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
}
在同一服务器上运行的 Tomcat 配置为端口 8080:
<Connector port="8080"
maxThreads="300"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000" />
大多数情况下,这种方法都很好,但当我们的应用程序返回非 HTTPS 流量时,少数情况下会出现问题。在研究这个问题时,我发现本文。
该系统由承包商部分配置,他倾向于使用在 EC2 实例上运行的 nginx 作为反向代理。我的问题是,如果 Tomcat 可以执行相同的功能并通过安全端口重定向非安全流量(如链接文章中所示),那么在我们的用例中,当 nginx 在同一台服务器上运行时,使用 nginx 作为反向代理是否有优势?在这种情况下为什么要使用 nginx?