nginx将http请求代理为https请求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx将http请求代理为https请求相关的知识,希望对你有一定的参考价值。
参考技术A 恰巧遇到上传文件时,后端服务器生成servlet http请求,提供给web端,使其能直接从浏览器通过http请求将流发送到后端服务器,不需进过web服务端,而web端的请求都为https,涉及https转http请求问题【问题描述还有一点】问题简而言之就是需要将后端的http请求变成https请求,这里有两种路子去处理:
1) 本身后端反馈给前端的是http的servlet,是否可以将servlet生成https的请求;
2) 能否通过其他代理手段,将后端http请求转换一下。
因时间紧,优先考虑代理方案。常用的代理服务手段nginx等,优先选择nginx,轻量与简单。
目标如下:
【客户端 --(https)-->nginx--(http)-->servlet容器】
选择nginx-1.20.0版本
代理https需要配置SSL,以如下命令生成SSL配置,加入到nginx配置中
1)生成密钥,使用openssl生成密钥private.key,长度为1024
openssl genrsa -out private.key 1024
2)使用密钥生成证书server.pem
openssl req -new -x509 -key private.key -out server.pem -days 365
证书信息可以随便填或者留空,只有Common Name要根据你的域名填写,即填写nginx所在服务器的IP或域名。
启动nginx即可
nginx+tomcat遇到的https重定向到http问题
nginx做反向代理时,需要把请求头信息一起发送给tomcat,不然tomcat中的域名绑定就无法发挥作用了。
今天又遇到https请求被拦截器重定向到登陆页居然变成http的问题,导致小程序无法访问(汗。。。)
之前讲过nginx做反向代理时要把请求头一起发给tomcat(https://www.cnblogs.com/yanglei-xyz/p/10771846.html)
#nginx的反向代理配置
location /
proxy_pass http://192.168.0.3:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
所以nginx已经把请求头发送给tomcat了,问题应该是在tomcat身上,百度后:
#在server.xml的Host节点下增加 <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/>
这个配置里面,重点是protocolHeader字段,意思就是说,当protocolHeader字段的值为protocolHeaderHttpsValue的https的时候,认为是安全连接,否则就是http的非安全连接。
参考原文:
https://www.cnblogs.com/shihuc/p/9047636.html
以上是关于nginx将http请求代理为https请求的主要内容,如果未能解决你的问题,请参考以下文章