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请求的主要内容,如果未能解决你的问题,请参考以下文章

Nginx反向代理:将所有http请求重定向到https

Nginx 能正向代理 https get 请求吗

Nginx 最全操作——nginx反向代理(5)

nginx怎么把https请求代理到http后台

使用 nginx 将 Elastic Beanstalk HTTP 请求重定向到 HTTPS

https的网站怎么请求http的接口