NGINX 作为 Tomcat 的 SSL 代理

NGINX as SSL Proxy for Tomcat

我在同一台 Linux RH7 EC2 主机上安装了 Angular 站点和 Tomcat 网络服务应用程序。我正在尝试从 / 为网站提供服务,并将 /service 处的任何内容重定向到我的 tomcat 实例,均通过 SSL。

通过 SSL 服务的静态站点工作正常。另外,如果我点击 http://mydomain:8080/mytomcatapp 也能正常工作。然而,尝试通过 https://mydomain/service/mytomcatapp 为 tomcat 应用程序设置反向代理会导致 502 响应。我见过的其他示例对 headers 等有更多花哨的设置,不确定我是否需要,建议会很方便。另外,我在 mytomcatapp 的网络服务也接受 get 参数,所以不确定那里是否需要任何特殊的东西。

nginx 配置文件片段

server {
listen       80;
server_name mydomain   ;
root /var/www;
index index.html index.htm;

location / {
    # index  index.html index.htm;
    try_files $uri $uri$args $uri/index.html /index.html =404;
}

location /service {
    proxy_pass http://mydomain:8080;
}

...

tomcat server.xml 片段

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           proxyPort="443"
           scheme="https"
            />

注意:nginx conf 中的 mydomain 已从我的真实域交换(不想在这里发布)。我也尝试过 server.xml 配置与 proxyName 属性集的组合,但似乎没有影响它。

谢谢!

您是否实施了 SSL 证书??如果您想使用 HTTPS,您将需要证书。

最终成为阻止代理的 SELinux 的增强安全状态。参见:

https://www.nginx.com/blog/nginx-se-linux-changes-upgrading-rhel-6-6/

您需要通过运行命令将其设置为宽容模式:setenforce 0

作为参考,我在 nginx 配置中的最终位置块在下面供其他任何人尝试,花了一些时间才正确。请注意,locationproxy_pass 变量的尾部斜杠 非常 重要。

location /service/ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_pass http://example.com:8080/;
}