首页 > 系统相关 >解决Nginx SSL 代理 Tomcat 获取 Scheme 总是 Http 问题

解决Nginx SSL 代理 Tomcat 获取 Scheme 总是 Http 问题

时间:2023-08-25 10:37:02浏览次数:36  
标签:set Http Tomcat 212 header proxy https http Scheme

背景

公司之前用的是http,但是出于苹果app审核和服务器安全性问题,要改为https,我们公司用的是沃通的ssl,按照沃通的官方文档提供的步骤完成服务器的配置。 架构上使用了 Nginx +tomcat 集群, 且nginx下配置了SSL,tomcat 没有配置SSL,项目使用https协议。

原因

img
配置成功后明明是https url请求,发现 log里面,tomcat获取scheme的时候,一直是http,而不是想像中的https

0415 16:01:10 INFO  (PaymentInterceptor.java:44) preHandle() - requestStringForLog:    {
        "request.getRequestURL():": "http://m.xxx.com/payment/paymentChannel?id=212&s=a84485e0985afe97fffd7fd7741c93851d83a4f6",
        "request.getMethod:": "GET",
        "_parameterMap":         {
            "id": ["212"],
            "s": ["a84485e0985afe97fffd7fd7741c93851d83a4f6"]
        }
    }

request.getRequestURL() 输出出来的 一直是
http://m.xxx.com/payment/paymentChannel?id=212&s=a84485e0985afe97fffd7fd7741c93851d83a4f6
但是浏览器中的URL却是
https://m.xxx.com/payment/paymentChannel?id=212&s=a84485e0985afe97fffd7fd7741c93851d83a4f6
下面我们进一步研究发现,java API上写得很清楚:

getRequestURL():
Reconstructs the URL the client used to make the request. 

The returned URL contains a protocol, server name, port number, and server path, 
but it does not include query string parameters.

img

解决

配置nginx

放到localhost /里面去

proxy_connect_timeout 300s;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_redirect off;
proxy_hide_header Vary;
proxy_set_header Accept-Encoding '';
proxy_set_header Referer $http_referer;
proxy_set_header Cookie $http_cookie;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto  $scheme;

其中的proxy_set_header X-Forwarded-Proto $scheme;起到了关键性的作用。

配置tomcat

<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
protocolHeader="X-Forwarded-Proto"
protocolHeaderHttpsValue="https"/>

增加到Engine标签中
配置双方的 X-Forwarded-Proto 就是为了正确地识别实际用户发出的协议是 http 还是 https。

标签:set,Http,Tomcat,212,header,proxy,https,http,Scheme
From: https://www.cnblogs.com/almightyYantao/p/17656196.html

相关文章

  • tomcat9中设置jks证书和pfx证书
    jks证书设置server.xml<Connectorport="443"protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="1000"connectionTimeout="30000"maxPostSize="-1"enabl......
  • Tomcat与JavaWeb开发
    安装Tomcat&JDK安装时候选择tomcat软件版本要与程序开发使用的版本一致。jdk版本要进行与tomcat保持一致。准备2个linux虚拟机,一个运行nginx进行负载均衡一个用来运行tomcat第一步:安装JDKJDK官网地址:https://www.oracle.com/java/technologies/downloads/##下载JDK......
  • HttpWebRequestElement.UseUnsafeHeaderParsing Property
    目录异常信息解决办法相关参考异常信息System.Net.WebException:“服务器提交了协议冲突.Section=ResponseHeaderDetail=CR后面必须是LF”解决办法一、通过配置文件实现web.config或app.config中设置如下属性<system.net><settings><httpWebRequestuseUn......
  • WireShark抓包探究TCP/HTTP之间的关系
    WireShark抓包探究TCP/HTTP之间的关系_wireshark追踪tcp流和http流的区别__微风轻起的博客-CSDN博客使用wireshark抓取httphttpstcpip协议进行学习-胖大星--博客园(cnblogs.com)......
  • OKHttp3主流程再分析
    一、概述为什么要是用OKHttp3 总结下来就两个大的方面 一、成熟稳定 OkHttp距今已有10多年的历史,在Android中大量且广泛的应用,在大、中、小项目中无处不在。可以这样说,只要是一个Android项目,网络框架的底层必定是OKHttp 二、高效 1.OkHttp的底......
  • Nginx-配置https证书
    一、说明在有些项目中需要帮客户配置https证书,如果你的服务使用Nginx作为静态服务器并且做为了端口转发,那么可以直接在Nginx中配置https证书证书有好几种格式,不同的格式对应不同server的配置,这里主要使用的是pem/key格式的证书,即公钥私钥文件对(必须要配对,否则无法使用)二......
  • Python-Flask配置https证书
    零、问题错误:SSLVersion2and3ProtocolDetection一、说明1、通过使用flask框架配置https证书进行HTTPs证书配置后会被扫描到漏洞,漏洞描述如下:远程服务接受使用SSL2.0和/或SSL3.0加密的连接。这些版本的SSL受到多个加密缺陷的影响,包括:-带CBCCiphers的不安全的填充方案。......
  • org.apache.jasper.servlet.TldScanner$TldScannerCallback.scan(Lorg/apache/tomcat/
    原因<dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>3.1.3</version></dependency>解决<dependency>......
  • Linux命令发送http
    curl“百度一下,你就知道”如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地curl-i“百度一下,你就知道”显示全部信息curl-I“百度一下,你就知道”只显示头部信息curl-v“百度一下,你就知道”显示get请求全过程解析curl命令模拟get请求携带参数(linux):curl-vh......
  • tomcat版本自动升级脚本
    #!/bin/bashfilename=$1echo"===开始升级8.5.82-8.5.92==="echo"备份中。。。。。。"mv/home/tomcat/${filename}/home/tomcat/${filename}-baksleep3echo"升级中。。。。。"cp-rp/home/tomcat/apache-tomcat-8.5.92-src/home/tomcat/${filename}......