Nginx之https證書配置實(shí)現(xiàn)
背景介紹
首先我的架構(gòu)是(公網(wǎng) → NAT 轉(zhuǎn)發(fā) → Nginx 代理 → IIS 服務(wù)器),實(shí)現(xiàn)公網(wǎng) HTTPS 訪問,SSL 證書必須部署在 Nginx 服務(wù)器上,且是唯一需要部署證書的節(jié)點(diǎn)。
為什么不能部署在 IIS 或 NAT 設(shè)備上?
公網(wǎng)用戶的 HTTPS 請求,首先通過 NAT 轉(zhuǎn)發(fā)到你的 Nginx 服務(wù)器(NAT 僅做端口映射,不處理 SSL 加密)。Nginx 作為反向代理,需要先解密 HTTPS 請求(這就需要 SSL 證書),再以HTTP 協(xié)議將請求轉(zhuǎn)發(fā)到內(nèi)網(wǎng)的 IIS 服務(wù)器(IIS 無需處理加密,只負(fù)責(zé)業(yè)務(wù)邏輯)。→ 整個(gè)鏈路的加密 / 解密只在 “公網(wǎng) ↔ Nginx” 之間進(jìn)行,“Nginx ↔ IIS” 是內(nèi)網(wǎng) HTTP 通信,無需加密(若內(nèi)網(wǎng)需安全,可單獨(dú)配置,但公網(wǎng) HTTPS 核心依賴 Nginx 的證書)。
- Nginx 的角色:SSL 終端(解密 HTTPS)+ 反向代理(轉(zhuǎn)發(fā) HTTP 到 IIS);
- IIS 的角色:純 HTTP 業(yè)務(wù)服務(wù)器(接收 Nginx 的轉(zhuǎn)發(fā)請求,返回 HTTP 響應(yīng));
- NAT 的角色:僅做 “公網(wǎng)端口→內(nèi)網(wǎng) Nginx 端口” 的映射(無需配置 SSL 相關(guān))。
具體實(shí)現(xiàn)
證書獲取
首先去你購買ssl的服務(wù)商網(wǎng)站下載證書,將它保存到你的nginx服務(wù)器上。格式一般為pem和key的兩個(gè)文件。域名解析可能需要添加相關(guān)ssl信息,這個(gè)可以根據(jù)不同服務(wù)商的文檔操作。

當(dāng)然如果沒有也可以生成本地認(rèn)證。主要是記錄一下 SSL 證書的生成以及證書配置,SSL的理論和細(xì)節(jié)不細(xì)說了。這組命令是自簽名證書的 “標(biāo)準(zhǔn)流程”,核心產(chǎn)出「server.key + server.crt」。
openssl genrsa -out server.key 2048 #生成 2048 位 RSA 私鑰 openssl req -new -key server.key -out server.csr #生成證書簽名請求(CSR) cp server.key server.key.org #備份原始私鑰 openssl rsa -in server.key.org -out server.key #解密私鑰(移除密碼保護(hù),可選) openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt #生成自簽名證書(最終可用證書)
Nginx 配置 HTTPS 時(shí),支持 PEM 格式的證書文件,server.key 和server.crt本質(zhì)上已經(jīng)是 PEM 格式,只是文件后綴不同(.crt/.key 是常見別名,.pem 是通用后綴)。已經(jīng)是 PEM 格式,直接用即可,無需額外轉(zhuǎn)換。如果需要 .pem 后綴,僅需重命名文件。執(zhí)行以下命令,若能正常輸出證書信息,說明是合法 PEM 格式:
# 驗(yàn)證證書(server.crt) openssl x509 -in server.crt -text -noout # 驗(yàn)證私鑰(server.key) openssl rsa -in server.key -text -noout
特殊情況:證書是 DER 格式需要轉(zhuǎn)換為 PEM 格式,命令如下
# DER 格式證書(.der)轉(zhuǎn) PEM 格式(.pem) openssl x509 -inform der -in server.der -out server.pem # DER 格式私鑰轉(zhuǎn) PEM 格式 openssl rsa -inform der -in server.key.der -out server.key.pem
將 SSL 證書(.crt/.pem)和私鑰(.key)上傳到 Nginx 的證書目錄,建議路徑:/etc/nginx/ssl/。
nginx配置
編輯 Nginx 的站點(diǎn)配置文件vi /etc/nginx/nginx.cong
# 1. HTTPS服務(wù)配置(監(jiān)聽443端口,部署SSL證書)
server {
listen 443 ssl;
listen [::]:443 ssl; # 支持IPv6(可選)
server_name www.yourdomain.com; # 你的公網(wǎng)域名(必須與證書域名一致)
# 核心:SSL證書配置(替換為你的證書路徑)
ssl_certificate /etc/nginx/ssl/yourdomain.crt; # 證書文件路徑
ssl_certificate_key /etc/nginx/ssl/yourdomain.key; # 私鑰文件路徑
# SSL安全優(yōu)化(必配,避免弱加密被攻擊)
ssl_protocols TLSv1.2 TLSv1.3; # 禁用不安全的TLSv1.0/TLSv1.1
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# 2. 反向代理到內(nèi)網(wǎng)IIS服務(wù)器(HTTP轉(zhuǎn)發(fā))
location / {
proxy_pass http://192.168.1.200:80; # 替換為你的IIS內(nèi)網(wǎng)IP+端口
proxy_set_header Host $host; # 傳遞域名到IIS(IIS需綁定該域名)
proxy_set_header X-Real-IP $remote_addr; # 傳遞客戶端真實(shí)IP到IIS
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # 告訴IIS:原始請求是HTTPS(關(guān)鍵!)
# 超時(shí)配置(適配IIS的動(dòng)態(tài)頁面/文件上傳)
proxy_connect_timeout 60s;
proxy_read_timeout 120s;
}
}
# 3. 可選:HTTP 80端口重定向到HTTPS(強(qiáng)制公網(wǎng)用戶用HTTPS訪問)
server {
listen 80;
listen [::]:80;
server_name www.yourdomain.com;
return 301 https://$host$request_uri; # 永久重定向到HTTPS
}
擴(kuò)展
Nginx 的配置分為 主配置文件 和 站點(diǎn)配置文件。
主配置文件路徑/etc/nginx/nginx.conf
站點(diǎn)配置文件存放目錄
# CentOS/RHEL 系列 /etc/nginx/conf.d/ # 站點(diǎn)配置文件目錄(默認(rèn)啟用,后綴 .conf) # Ubuntu/Debian 系列 /etc/nginx/sites-available/ # 存放所有站點(diǎn)配置(未啟用) /etc/nginx/sites-enabled/ # 啟用的站點(diǎn)(通過軟鏈接指向 available 目錄)
主配置文件(nginx.conf)末尾會(huì)通過 include 指令加載所有站點(diǎn)配置,無需手動(dòng)修改主配置:
# nginx.conf 末尾的默認(rèn)配置(CentOS 示例) include /etc/nginx/conf.d/*.conf; # 加載 conf.d 目錄下所有 .conf 文件 # Ubuntu 示例(通過軟鏈接控制啟用/禁用) include /etc/nginx/sites-enabled/*;
結(jié)果驗(yàn)證
在瀏覽器上放訪問,可以看到這個(gè)連接是安全的則證書配置成功。點(diǎn)開可以看到證書信息。


如果是本地認(rèn)證仍舊會(huì)顯示不安全,但仍舊可以看到證書的詳細(xì)信息。
到此這篇關(guān)于Nginx之https證書配置實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Nginx https證書配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Nginx反向代理與負(fù)載均衡搭建多人測試環(huán)境詳解
這篇文章主要介紹了利用Nginx反向代理與負(fù)載均衡搭建多人測試環(huán)境的相關(guān)資料,文中介紹的非常詳細(xì),相信對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-04-04
Nginx 502 bad gateway和Nginx 504 Gateway Time-out錯(cuò)誤解決方法 錯(cuò)誤解決辦
Nginx 502 Bad Gateway的含義是請求的PHP-CGI已經(jīng)執(zhí)行,但是由于某種原因(一般是讀取資源的問題)沒有執(zhí)行完畢而導(dǎo)致PHP-CGI進(jìn)程終止2012-09-09
Nginx 請求壓縮的實(shí)現(xiàn)(動(dòng)態(tài)壓縮,靜態(tài)壓縮)
本文主要介紹了Nginx 請求壓縮的實(shí)現(xiàn)(動(dòng)態(tài)壓縮,靜態(tài)壓縮),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
詳解proxy_pass根據(jù)path路徑轉(zhuǎn)發(fā)時(shí)的"/"問題記錄
這篇文章主要介紹了詳解proxy_pass根據(jù)path路徑轉(zhuǎn)發(fā)時(shí)的"/"問題記錄,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09
nginx-proxy-manager初次登錄報(bào)錯(cuò)502?bad?gateway解決
這篇文章主要給大家介紹了關(guān)于nginx-proxy-manager初次登錄報(bào)錯(cuò)502?bad?gateway的解決辦法,502?Bad?Gateway服務(wù)器作為網(wǎng)關(guān)或者代理時(shí),為了完成請求訪問下一個(gè)服務(wù)器,但該服務(wù)器返回了非法的應(yīng)答,需要的朋友可以參考下2024-04-04
linux查找當(dāng)前系統(tǒng)nginx路徑的兩種方法
工作中有很多服務(wù)器, 它們上面裝的 nginx 的路徑也太不相當(dāng), 當(dāng)我們拿到一個(gè)不熟悉的服務(wù)器時(shí), 我們怎么知道, 當(dāng)前運(yùn)行的nginx的目錄是哪一個(gè)呢,本文小編給大家介紹了兩種linux查找當(dāng)前系統(tǒng)nginx的路徑的方法,需要的朋友可以參考下2023-11-11

