Nginx配置ssl證書方式(https證書)
https協(xié)議是由SSL+http協(xié)議構建的安全協(xié)議,支持加密傳輸和身份認證,
安全性比http要更好,因為數(shù)據的加密傳輸,更能保證數(shù)據的安全性和完整性。
安裝nginx
1.啟動容器
拉取鏡像
docker pull nanlist/nginx1.23.1:v1.0
新建目錄并授權,/home/ssl-nginx/conf, /home/ssl-nginx/logs
- 執(zhí)行啟動命令:
docker run -d --privileged=true --name ssl-nginx -p 80:80 -p 443:443 -v /home/ssl-nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/ssl-nginx/logs:/var/log/nginx -d nanlist/nginx1.23.1:v1.0
2.查看日志
docker logs --tail=1000 ssl-nginx
3.Nginx 的 SSL 模塊安裝
- 進入容器:
docker exec -it ssl-nginx bash
- 查看ssl模塊默認是否已編譯:
nginx -V (注意大寫V)
編譯參數(shù)configure arguments: 中是否有 –with-http_ssl_module 這個模塊

配置
1.下載Nginx 服務證書
確定下文件有沒有準備好,一份SSL證書、一份對應的私鑰KEY文件(這里是用的 pem 與 key 文件)上傳到服務器上,編輯conf的時候注意你的這倆文件名字,跟跟服務器上的一致。
- ssl.pem;
- ssl.key;
把這兩個文件cp到容器內部的目錄里面(先進入容器 建好目錄/home/ssl-nginx 或者 啟動容器的時候 -v 掛載一個文件目錄也可以)
docker cp /home/ssl-nginx/conf/ssl.pem ssl-nginx:/etc/nginx docker cp /home/ssl-nginx/conf/ssl.key ssl-nginx:/etc/nginx docker exec -i ssl-nginx nginx -t docker exec -i ssl-nginx nginx -s reload
2.配置nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
client_max_body_size 100m;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
#監(jiān)聽的端口,nginx 1.15.0及以上版本,使用listen 443 ssl代替,1.15.0以下的使用listen 443
listen 443 ssl;
server_name localhost;
charset utf-8;
# ssl證書地址
#指定pem文件所在路徑,如果寫相對路徑,必須把該文件和nginx.conf文件放到一個目錄下。
ssl_certificate ssl.pem;
#指定私鑰文件key所在路徑,如果寫相對路徑,必須把該文件和nginx.conf文件放到一個目錄下。
ssl_certificate_key ssl.key;
# ssl驗證相關配置
ssl_session_timeout 5m; #緩存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全鏈接可選的加密協(xié)議
ssl_prefer_server_ciphers on; #使用服務器端的首選算法
location / {
root /home/ruoyi-ui/dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://10.56.1.75:8080/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#配置80端口重定向443端口
server {
listen 80;
server_name localhost;
#用地址重寫規(guī)則
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
}
配置完成后:
- nginx -t;測試配置文件是否正確,再使用命令:
docker exec -i ssl-nginx nginx -t
- nginx -s reload; 加載nginx的配置文件并重啟
docker exec -i ssl-nginx nginx -s reload
- 查看日志
docker logs --tail=1000 ssl-nginx
3.在瀏覽器中輸入:https://域名地址,驗證SSL是否配置成功
ps: 一個SSL證書只能對應一個端口嗎 ?
443端口只是SSL證書的默認端口,SSL證書也是支持其他非443自定義端口的。
多個端口的nginx 在同一個ip地址里面是可以使用同一個ssl 證書的。
啟動docker容器的時候 換一下 端口號,剩下的步驟都是一樣的(無需修改conf里面的端口號)。
ps:服務器報警:啟用了不安全的TLS1.0協(xié)議
最近在使用過程中,進行安全漏掃的時候報了這個警告。
TLS 1.0是于1996年發(fā)布的老版協(xié)議,使用的是弱加密算法和系統(tǒng)。比如SHA-1和MD5,這些算法和系統(tǒng)十分脆弱,存在重大安全漏洞,容易受到降級攻擊的嚴重影響。
修復方法:
將conf文件中的ssl_protocols 改為 TLSv1.2 TLSv1.3
ssl_protocols TLSv1.2 TLSv1.3;
若配置文件里面沒有ssl_protocols 則在開啟了 ssl 的配置文件里面 添加上面那行代碼

然后重啟nginx。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

