gpt4 book ai didi

Nginx : how to proxy both HTTP and HTTPS, 后面的 Tomcat 可能在非标准端口上?

转载 作者:行者123 更新时间:2023-11-28 21:50:09 25 4
gpt4 key购买 nike

描述

我们正在为不同的客户端安装一些在 Nginx 后面运行 Tomcat 6 的应用程序。其中一些安装仅支持 HTTP,一些仅支持 HTTPS,有些则两者兼而有之。由于缺少公共(public) IP,其中一个安装在非标准端口(8070 和 8071)上运行 HTTP 和 HTTPS。手头的应用程序在另一个应用程序中显示为 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;
}

期望的行为

  1. Tomcat 应该在一个端口上监听 HTTP 和 HTTPS 请求。

    如果会有两个<Connector>标签,配置 Nginx 将更加困难。

  2. Tomcat 不应在模式之间重定向。

  3. Nginx 可以监听任意端口(例如 listen 8071 ssl spdy; )。
  4. Tomcat 生成的链接应该是相对的,或者包括 Nginx 提供的模式、主机和端口。

附加信息

我尝试添加 schemaproxyPort <Connector> 的属性,之后 Tomcat 将始终从 HTTP 重定向到 HTTPS(至少它更好)。

我无法用谷歌搜索这样的配置,而且我没有使用过 Tomcat。请帮忙。

最佳答案

其实我想要的真的是不可能的,所以需要有两个分开的Connector Nginx 中的标签和两个上游,如下所示:

Tomcat 的 server.xml :

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
proxyPort="80"
/>

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

匹配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-$scheme; # This is upstream name, note the variable $scheme in it
proxy_redirect off;
}
}

upstream saiku-server-http {
server ip.of.tomcat.server:8080;
}

upstream saiku-server-https {
server ip.of.tomcat.server:8443;
}

请注意,Tomcat 在 8080 和 8443 端口上接收纯 HTTP 流量(那里没有 SSL,它被 Nginx 终止),但是对于 8443 端口上的连接,它将生成必须以 https:// 开头的链接。而不是 http:// (通过属性 scheme="https" secure="true" )并将插入链接端口,在 proxyPort 中指定属性。

Nginx 将终止 SSL 并通过 saiku-server-https 代理所有到 Tomcat 8443 端口的安全连接。上游,其中 https$scheme 的值Nginx 请求变量(参见 location block )

关于Nginx : how to proxy both HTTP and HTTPS, 后面的 Tomcat 可能在非标准端口上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30603263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com