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

當(dāng)然如果沒有也可以生成本地認(rèn)證。主要是記錄一下 SSL 證書的生成以及證書配置,SSL的理論和細(xì)節(jié)不細(xì)說(shuō)了。這組命令是自簽名證書的 “標(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 #生成證書簽名請(qǐng)求(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 格式,直接用即可,無(wú)需額外轉(zhuǎn)換。如果需要 .pem 后綴,僅需重命名文件。執(zhí)行以下命令,若能正常輸出證書信息,說(shuō)明是合法 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:原始請(qǐng)求是HTTPS(關(guān)鍵?。?
# 超時(shí)配置(適配IIS的動(dòng)態(tài)頁(yè)面/文件上傳)
proxy_connect_timeout 60s;
proxy_read_timeout 120s;
}
}
# 3. 可選:HTTP 80端口重定向到HTTPS(強(qiáng)制公網(wǎng)用戶用HTTPS訪問(wèn))
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)(通過(guò)軟鏈接指向 available 目錄)
主配置文件(nginx.conf)末尾會(huì)通過(guò) include 指令加載所有站點(diǎn)配置,無(wú)需手動(dòng)修改主配置:
# nginx.conf 末尾的默認(rèn)配置(CentOS 示例) include /etc/nginx/conf.d/*.conf; # 加載 conf.d 目錄下所有 .conf 文件 # Ubuntu 示例(通過(guò)軟鏈接控制啟用/禁用) include /etc/nginx/sites-enabled/*;
結(jié)果驗(yàn)證
在瀏覽器上放訪問(wèn),可以看到這個(gè)連接是安全的則證書配置成功。點(diǎn)開可以看到證書信息。


如果是本地認(rèn)證仍舊會(huì)顯示不安全,但仍舊可以看到證書的詳細(xì)信息。
到此這篇關(guān)于Nginx之https證書配置實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Nginx https證書配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Nginx網(wǎng)關(guān)超時(shí)出現(xiàn)504 GATEWAY TIMEOUT的問(wèn)題
這篇文章主要給大家介紹了如何解決Nginx網(wǎng)關(guān)超時(shí)出現(xiàn)504 GATEWAY TIMEOUT的問(wèn)題,文章通過(guò)代碼示例和圖文結(jié)合介紹的非常詳細(xì),有遇到相同問(wèn)題的朋友可以參考閱讀本文2023-11-11
nginx 配置虛擬主機(jī),實(shí)現(xiàn)在一個(gè)服務(wù)器可以訪問(wèn)多個(gè)網(wǎng)站的方法
下面小編就為大家分享一篇nginx 配置虛擬主機(jī),實(shí)現(xiàn)在一個(gè)服務(wù)器可以訪問(wèn)多個(gè)網(wǎng)站的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
nginx 配置特定IP訪問(wèn)的實(shí)現(xiàn)
本文主要介紹了nginx 配置特定IP訪問(wèn)的實(shí)現(xiàn),通過(guò)合理設(shè)置Nginx的配置文件,管理員可以根據(jù)實(shí)際需求,靈活地控制對(duì)網(wǎng)站資源的訪問(wèn),提高網(wǎng)站的安全性,感興趣的可以了解一下2024-01-01
Nginx配置缺少導(dǎo)致CSS不起作用的問(wèn)題及解決方法
在Web開發(fā)中,確保樣式表正確加載是前端顯示正常工作的關(guān)鍵,然而,有時(shí)候即使CSS文件的路徑和代碼本身沒有問(wèn)題,CSS樣式也可能無(wú)法正確應(yīng)用,本文將分享一個(gè)常見的問(wèn)題——Nginx配置缺少導(dǎo)致的CSS不起作用,以及如何解決這個(gè)問(wèn)題,感興趣的朋友一起看看吧2024-07-07
nginx+goreplay實(shí)現(xiàn)業(yè)務(wù)流量壓測(cè)的示例代碼
通過(guò)Nginx和GoReplay的組合,可以實(shí)現(xiàn)生產(chǎn)環(huán)境流量的實(shí)時(shí)拷貝和回放,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07
Nginx根據(jù)url中的path動(dòng)態(tài)轉(zhuǎn)發(fā)到upstream的實(shí)現(xiàn)
這篇文章主要介紹了Nginx根據(jù)url中的path動(dòng)態(tài)轉(zhuǎn)發(fā)到upstream的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01

