nginx反向署理tomcat

打印 上一主题 下一主题

主题 995|帖子 995|积分 2985

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
背景

因客户必要对某个应用对外开放访问,必要有ssl安全协议,又思量到背面可能还会有多个应用对外开放访问,因此决定用nginx来配置ssl证书,通过nginx来转发到后台应用。
情况

后台应用服务:tomcat7
负载均衡服务:nginx1.26.3
配置

nginx.conf
  1.     # HTTPS server
  2.    
  3.     server {
  4.       #   listen       443 ssl;
  5.          listen       8088 ssl;
  6.         http2 on;
  7.      #   server_name  localhost;
  8.         server_name  *.example.com;
  9.         ssl_certificate      pem文件位置;
  10.         ssl_certificate_key  key文件位置;
  11.         ssl_session_cache    shared:SSL:1m;
  12.         ssl_session_timeout  5m;
  13.         ssl_ciphers  HIGH:!aNULL:!MD5;
  14.         ssl_prefer_server_ciphers  on;
  15.         location / {
  16.     #        root   html;
  17.     #        index  index.html index.htm;
  18.             proxy_pass   http://127.0.0.1:8080;
  19.             proxy_set_header Host $host;
  20.             proxy_set_header X-Real-IP $remote_addr;
  21.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  22.             proxy_set_header X-Forwarded-Proto $scheme;
  23.         }
  24.     }
复制代码
注意,我上面的ssl的端口为8088,不是一般的443
tomcat里的server.xml
  1. .....省略
  2.   <Connector port="8080" protocol="HTTP/1.1" maxThreads="2000"
  3.                connectionTimeout="20000" maxHttpHeaderSize="3145728"
  4.                 redirectPort="8443"
  5.         />
  6. ....省略
  7.   <Valve className="org.apache.catalina.valves.RemoteIpValve"
  8.          protocolHeaderHttpsValue="https"
  9.          remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" />
  10.   <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  11.        prefix="localhost_access_log." suffix=".txt"
  12.        pattern="%h %l %u %t &quot;%r&quot; %s %b" />
复制代码
如今配置完毕,重启没标题,可以用https://xxxx:8088/index打开首页
到此,你一定以为没标题了,我当时也这么以为,结果一登录。。。无法打开主页
由于地址变成了https://xxxx/main 端口没了!!!
办理过程

起首,我把nignx配置文件的端口改回443,打开首页登录都没标题,好吧,已经确定是重定向的标题。那么为什么重定向的时间端标语会没呢。经过一通查找,终于在各路网友的帖子和tomcat的官方api找到了答案

当用https转发时,tomcat默认配置的端口是443,因此这里只必要把端口改成8088就行了,如下
  1. <Valve className="org.apache.catalina.valves.RemoteIpValve"
  2.   protocolHeaderHttpsValue="https" httpsServerPort="8088"
  3.   remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" />
复制代码
在之前的server.xml加上httpsServerPort="8088"即可
将nginx的ssl配置改回8088端口,重启,ok,首页和登录跳转都没标题了
插曲

由于体系中还集成了oss,代码内里照旧http,因此用https访问的时间会报错
因此相关的代码要改成https协议请求oss
  1. ClientConfiguration cfg = new ClientConfiguration();
  2. cfg.setProtocol(Protocol.HTTPS);
  3. OSSClient client = new OSSClient(endpoint, accessId, accessKey,cfg);
复制代码
如许就大功造成了!
相关参考:
   nginx反向署理tomcat 时,出现https redirect后变成http的标题办理方法 - 滚动的蛋 - 博客园
  nginx中https请求转发为本服务器的tomcat的http请求_nginx 转发tomcat-CSDN博客
  Apache Tomcat 7.0.109 API Documentation
  OSS generatePresignedUrl如何返回一个https的URL_问答-阿里云开辟者社区
  2024阿里云免费版SSL证书申请流程,跟着教程一步步,非常简朴!-阿里云开辟者社区
  nginx配置https转发到tomcat(使用自署名的证书)-腾讯云开辟者社区-腾讯云

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表