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 配置中的最终位置块在下面供其他任何人尝试,花了一些时间才正确。请注意,location
和 proxy_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/;
}
我在同一台 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 配置中的最终位置块在下面供其他任何人尝试,花了一些时间才正确。请注意,location
和 proxy_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/;
}