接到項目需求須要將一些https請求利用nginx代理到http接口上,所以要在本地上搭環境進行測試,如今將該過程記錄一下。nginx
1. 使用openssl生成密鑰privkey.pem:session
openssl genrsa -out privkey.pem 1024/2038
app
2. 使用密鑰生成證書server.pem:tcp
openssl req -new -x509 -key privkey.pem -out server.pem -days 365
測試
證書信息能夠隨便填或者留空,只有Common Name要根據你的域名填寫。如xxx.com,或使用*.xxx.com匹配二級域名。spa
因爲我本地的Spring boot項目是跑在8080端口的,所以在ngnix配置上我還作了一層80到8080端口到轉換。代理
完整ngnix配置以下。code
#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 mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name a.com;
location / {
proxy_pass http://localhost:8080;
}
}
# HTTPS server
#
server {
listen 443 ssl;
server_name a.com;
#證書位置
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 http://a.com;
}
}
include servers/*;
}
其中a.com是我在本地hosts文件上作的一個本地映射(127.0.0.1 a.com)server
重啓ngnix驗證配置是否成功blog
sudo nginx -t && sudo nginx -s reload
以前是在網上看到該命令,但實際中在我本地該命令並未生效。若是該命令不生效就先把nginx關閉後再重啓。
nginx -s stop
nginx
配置完成以後在訪問同一個https請求時老是會在奇數次(第一次,第三次……)報404,偶數次才成功。後面通過排查發現,在已經配置了80轉換到8080端口時還作了對8080端口的一些配置,以下圖。將該配置刪除後便可。