【发布时间】:2015-08-16 16:04:09
【问题描述】:
说明
我们正在为不同的客户端安装一些在 Nginx 后面运行 Tomcat 6 的应用程序。其中一些安装仅是 HTTP,一些仅是 HTTPS,或者两者兼而有之。由于缺少公共 IP,其中一个安装使 HTTP 和 HTTPS 在非标准端口(8070 和 8071)上工作。手头的应用程序在另一个应用程序中显示为 iframe。
当前行为
Tomcat 将所有 HTTPS 请求重定向到 HTTP(由于浏览器对混合内容的限制,因此 iframe 中不会显示任何内容)。
当前配置
iframe 代码:
<iframe src="/saiku-ui">
Tomcat 的server.xml:
<Connector port="8080" protocol="HTTP/1.1"/>
<!-- A bit later... -->
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="x-forwarded-for"
protocolHeader="x-forwarded-proto"
/>
Nginx 虚拟主机:
server {
listen 80;
listen 443 ssl spdy;
location /saiku-ui {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://saiku-server; # This is upstream name
proxy_redirect off;
}
}
upstream saiku-server {
server ip.of.tomcat.server:8080;
}
期望的行为
-
Tomcat 应该在一个端口上同时监听 HTTP 和 HTTPS 请求。
如果会有两个
<Connector>标签,那么配置 Nginx 会更加困难。 Tomcat 不应在模式之间重定向。
- Nginx 可以监听任意端口(例如
listen 8071 ssl spdy;)。 - Tomcat 生成的链接应该是相对的,或者包括 Nginx 提供的架构、主机和端口。
附加信息
我尝试将schema 和proxyPort 属性添加到<Connector>,之后Tomcat 将始终从HTTP 重定向到HTTPS(至少这样更好)。
我无法在 google 上搜索这样的配置,也没有使用过 Tomcat 的经验。请帮忙。
【问题讨论】:
-
试试:webapp.org.ua/sysadmin/… 我想这就是你正在“尝试”做的事情。
-
我已经阅读了这篇文章。这是仅 HTTPS 设置的配置,但我需要 HTTP 和 HTTPS。无论如何,谢谢你的帮助。
-
你不能在同一个端口中拥有 http 和 https。
标签: tomcat nginx reverse-proxy