⽤nginx实现https请求转http请求(转)
接到项⽬需求需要将⼀些https请求利⽤nginx代理到http接⼝上,因此要在本地上搭环境进⾏测试,现在将该过程记录⼀下。⽣成证书
1. 使⽤openssl⽣成密钥privkey.pem:
openssl genrsa -out privkey.pem 1024/2038
2. 使⽤密钥⽣成证书server.pem:
openssl req -new -x509 -key privkey.pem -out server.pem -days 365
证书信息可以随便填或者留空,只有Common Name要根据你的域名填写。如xxx,或使⽤*.xxx匹配⼆级域名。配置ngnix
由于我本地的Spring boot项⽬是跑在8080端⼝的,因此在ngnix配置上我还做了⼀层80到8080端⼝到转换。
完整ngnix配置如下。
#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
worker_connections  1024;
}
http {
include      pes;
default_type  application/octet-stream;
sendfile        on;
#tcp_nopush    on;
#keepalive_timeout  0;
keepalive_timeout  65;
#gzip  on;
server {
listen      80;
server_name  a;
location / {
proxy_pass localhost:8080;
}
}
# HTTPS server
#
server {
listen      443 ssl;
server_name  a;
#证书位置
ssl_certificate      /data/server.pem; # 路径为证书⽣成的路径
ssl_certificate_key  /data/privkey.pem; # 路径为证书⽣成的路径
#    ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;
#协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
# 转发到http
location / {
proxy_pass a;
}
}
include servers/*;
}
其中a是我在本地hosts⽂件上做的⼀个本地映射(127.0.0.1 a)
验证配置
重启ngnix验证配置是否成功
sudo nginx -t && sudo nginx -s reload
之前是在⽹上看到该命令,但实际中在我本地该命令并未⽣效。如果该命令不⽣效就先把nginx关闭后再重启。
nginx -s stop
nginx
nginx ssl证书配置⼀点⼩坑
配置完成之后在访问同⼀个https请求时总是会在奇数次(第⼀次,第三次……)报404,偶数次才成功。后⾯经过排查发现,在已经配置了80转换到8080端⼝时还做了对8080端⼝的⼀些配置,如下图。将该配置删除后即可。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。