最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx proxy_ssl_server_name 解決后端多域名證書匹配失敗的方法

 更新時(shí)間:2026年04月19日 15:03:34   作者:冷漠man  
本文介紹了Nginx反向代理HTTPS后端時(shí)的關(guān)鍵指令proxy_ssl_server_name,當(dāng)后端托管多域名證書時(shí),Nginx需啟用SNI擴(kuò)展以正確匹配證書,本文詳細(xì)分析了問題場(chǎng)景、基礎(chǔ)解決方案,并提供了進(jìn)階配置方案,感興趣的可以了解一下

proxy_ssl_server_name 是 Nginx 反向代理 HTTPS 后端時(shí)的關(guān)鍵指令,用于啟用 SNI(Server Name Indication) 擴(kuò)展,解決后端多域名虛擬主機(jī)場(chǎng)景下的證書匹配失敗問題。

問題場(chǎng)景

當(dāng) Nginx 作為反向代理向后端 HTTPS 服務(wù)器發(fā)起連接時(shí):

location / {
    proxy_pass https://10.0.0.5;  # 后端是 IP 地址
}

后端服務(wù)器托管了多個(gè)域名證書(虛擬主機(jī)),依賴 SNI 判斷返回哪張證書:

  • 收到 SNI = api.internal.com → 返回 A 證書
  • 收到 SNI = svc.internal.com → 返回 B 證書
  • 無 SNI → 返回默認(rèn)證書(可能是自簽名或通配符證書)

如果 Nginx 不發(fā)送 SNI,后端可能返回錯(cuò)誤的證書,導(dǎo)致 Nginx 驗(yàn)證失敗:

SSL: error:0A000086:SSL routines::certificate verify failed

基礎(chǔ)解決方案

location / {
    proxy_pass https://backend.example.com;
    # 核心:?jiǎn)⒂?SNI,發(fā)送 Host 頭作為服務(wù)器名
    proxy_ssl_server_name on;
    # 驗(yàn)證后端證書(生產(chǎn)環(huán)境必須開啟)
    proxy_ssl_verify on;
    proxy_ssl_trusted_certificate /etc/nginx/certs/ca.crt;
    # 發(fā)送的 SNI 名稱(默認(rèn)使用 proxy_pass 中的主機(jī)名)
    proxy_ssl_name backend.example.com;
}

進(jìn)階配置方案

1. 變量動(dòng)態(tài) SNI(多租戶/動(dòng)態(tài)上游)

http {
    # 根據(jù)請(qǐng)求特征動(dòng)態(tài)選擇后端 SNI
    map $host $backend_sni {
        default              "api.internal.com";
        "client-a.example.com" "a-api.internal.com";
        "client-b.example.com" "b-api.internal.com";
    }
    server {
        location / {
            proxy_pass https://$backend_sni;
            # 啟用 SNI 并使用變量指定名稱
            proxy_ssl_server_name on;
            proxy_ssl_name $backend_sni;
            proxy_ssl_verify on;
            proxy_ssl_trusted_certificate /etc/nginx/certs/ca-chain.crt;
        }
    }
}

2. IP 地址上游 + 顯式 SNI 名稱

upstream backend_nodes {
    server 10.0.1.10:443;
    server 10.0.1.11:443;
}
server {
    location / {
        proxy_pass https://backend_nodes;
        # 必須使用 proxy_ssl_name 指定證書中的 CN/SAN
        proxy_ssl_server_name on;
        proxy_ssl_name api.internal.example.com;
        proxy_ssl_verify on;
        proxy_ssl_trusted_certificate /etc/nginx/certs/internal-ca.crt;
        # 透?jìng)髟?Host(與 SNI 分離)
        proxy_set_header Host $host;
    }
}

3. 分層證書驗(yàn)證策略

server {
    location /api/ {
        proxy_pass https://api.internal:443;
        proxy_ssl_server_name on;
        proxy_ssl_name api.internal;
        # 嚴(yán)格驗(yàn)證 + 深度
        proxy_ssl_verify on;
        proxy_ssl_verify_depth 2;
        proxy_ssl_trusted_certificate /etc/nginx/certs/ca-bundle.crt;
        # 會(huì)話復(fù)用優(yōu)化
        proxy_ssl_session_reuse on;
    }
    location /legacy/ {
        proxy_pass https://old.internal:443;
        proxy_ssl_server_name on;
        proxy_ssl_name old.internal;
        # 舊系統(tǒng)可能證書過期,臨時(shí)放寬(不推薦長(zhǎng)期)
        # proxy_ssl_verify off;
    }
}

4. 與 resolver 配合的動(dòng)態(tài)后端

server {
    resolver 10.0.0.2 valid=10s;
    location / {
        set $target "service.consul";
        proxy_pass https://$target:443;
        # 動(dòng)態(tài)解析時(shí)必須顯式設(shè)置 SNI
        proxy_ssl_server_name on;
        proxy_ssl_name service.consul;
        proxy_ssl_verify on;
        proxy_ssl_trusted_certificate /etc/nginx/certs/consul-ca.crt;
    }
}

關(guān)鍵指令關(guān)聯(lián)

指令作用與 proxy_ssl_server_name 關(guān)系
proxy_ssl_server_name啟用 TLS SNI 擴(kuò)展主開關(guān),默認(rèn) off
proxy_ssl_name指定發(fā)送的 SNI 主機(jī)名默認(rèn)使用 proxy_pass URL 中的主機(jī)名
proxy_ssl_verify驗(yàn)證后端證書鏈依賴正確的 SNI 獲取對(duì)應(yīng)證書
proxy_ssl_trusted_certificateCA 證書路徑用于驗(yàn)證后端返回的證書
proxy_ssl_verify_depth驗(yàn)證鏈深度防止中間人攻擊

常見錯(cuò)誤排查

錯(cuò)誤 1:upstream SSL certificate does not match

# ? 錯(cuò)誤:IP 代理無 SNI,后端返回默認(rèn)證書
proxy_pass https://10.0.0.5;
# ? 修正:?jiǎn)⒂?SNI 并指定期望的證書域名
proxy_ssl_server_name on;
proxy_ssl_name api.example.com;
proxy_pass https://10.0.0.5;

錯(cuò)誤 2:SSL routines::shutdown while in init

后端要求 SNI 但未發(fā)送,或 TLS 版本不匹配:

proxy_ssl_server_name on;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
proxy_ssl_ciphers HIGH:!aNULL:!MD5;

錯(cuò)誤 3:通配符證書匹配失敗

# 后端證書為 *.example.com
proxy_ssl_server_name on;
proxy_ssl_name api.example.com;  # 正確:具體子域名
# proxy_ssl_name *.example.com;  # 錯(cuò)誤:SNI 不支持通配符寫法

調(diào)試配置

server {
    location / {
        proxy_pass https://backend;
        proxy_ssl_server_name on;
        proxy_ssl_name backend.example.com;
        # 臨時(shí)開啟詳細(xì)日志(需編譯時(shí)啟用 debug)
        error_log /var/log/nginx/debug.log debug;
        # 添加響應(yīng)頭確認(rèn)后端信息(調(diào)試用)
        add_header X-Debug-Upstream $upstream_addr;
        add_header X-Debug-Ssl-Name $proxy_ssl_name;
    }
}

完整生產(chǎn)模板

upstream api_backend {
    server 10.0.2.10:443 weight=5;
    server 10.0.2.11:443 weight=5;
    keepalive 100;
}
server {
    listen 443 ssl http2;
    server_name gateway.example.com;
    # 客戶端到 Nginx 的證書
    ssl_certificate     /etc/nginx/certs/gateway.crt;
    ssl_certificate_key /etc/nginx/certs/gateway.key;
    location /api/ {
        proxy_pass https://api_backend;
        # === SNI 核心配置 ===
        proxy_ssl_server_name on;
        proxy_ssl_name api.internal.example.com;
        # 證書驗(yàn)證
        proxy_ssl_verify on;
        proxy_ssl_verify_depth 2;
        proxy_ssl_trusted_certificate /etc/nginx/certs/internal-ca-bundle.crt;
        # 連接優(yōu)化
        proxy_ssl_session_reuse on;
        proxy_ssl_protocols TLSv1.2 TLSv1.3;
        # 標(biāo)準(zhǔn)代理頭
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Request-ID $request_id;
    }
}

核心要點(diǎn):當(dāng) proxy_pass 使用 IP 地址或上游組(upstream)時(shí),必須顯式設(shè)置 proxy_ssl_server_name on + proxy_ssl_name,確保后端能選擇正確的虛擬主機(jī)證書完成 TLS 握手。

到此這篇關(guān)于Nginx proxy_ssl_server_name 解決后端多域名證書匹配失敗的方法的文章就介紹到這了,更多相關(guān)Nginx proxy_ssl_server_name 多域名匹配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • nginx的重定向(rewrite)問題及解讀

    nginx的重定向(rewrite)問題及解讀

    文章主要介紹了Nginx中的location匹配、優(yōu)先級(jí)及其與rewrite的區(qū)別,詳細(xì)解釋了location和rewrite的使用場(chǎng)景、語法、優(yōu)先級(jí)、標(biāo)志位和執(zhí)行順序等內(nèi)容,并通過示例展示了基于域名和IP地址進(jìn)行跳轉(zhuǎn)的方法
    2026-05-05
  • Nginx負(fù)載均衡算法之輪詢(默認(rèn))詳解

    Nginx負(fù)載均衡算法之輪詢(默認(rèn))詳解

    輪詢負(fù)載均衡算法是Nginx的默認(rèn)策略,通過將請(qǐng)求依次分配給后端服務(wù)器,實(shí)現(xiàn)負(fù)載均衡,該算法簡(jiǎn)單易用,但無法考慮服務(wù)器性能差異,不支持動(dòng)態(tài)負(fù)載調(diào)整,通過配置權(quán)重、健康檢查和動(dòng)態(tài)負(fù)載均衡策略,可以優(yōu)化輪詢算法,以應(yīng)對(duì)更復(fù)雜的需求
    2026-03-03
  • Nginx設(shè)置靜態(tài)頁面壓縮和緩存過期時(shí)間的方法

    Nginx設(shè)置靜態(tài)頁面壓縮和緩存過期時(shí)間的方法

    這篇文章主要介紹了Nginx設(shè)置靜態(tài)頁面壓縮和緩存過期時(shí)間的方法,也是服務(wù)器架設(shè)后的必備設(shè)置,需要的朋友可以參考下
    2015-07-07
  • Nginx 分發(fā)策略的實(shí)現(xiàn)

    Nginx 分發(fā)策略的實(shí)現(xiàn)

    分發(fā)策略是將客戶端請(qǐng)求根據(jù)一定的規(guī)則或算法,可以分配到不同的后端服務(wù)器上,本文就來介紹一下Nginx分發(fā)策略的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • Nginx配置反向代理服務(wù)器實(shí)現(xiàn)在https網(wǎng)站中請(qǐng)求http資源

    Nginx配置反向代理服務(wù)器實(shí)現(xiàn)在https網(wǎng)站中請(qǐng)求http資源

    ?Nginx反向代理?是一種將客戶端請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù)器的技術(shù),主要用于負(fù)載均衡、提高安全性和提升性能,本文給大家介紹了Nginx配置反向代理服務(wù)器實(shí)現(xiàn)在https網(wǎng)站中請(qǐng)求http資源,需要的朋友可以參考下
    2025-03-03
  • 滑塊驗(yàn)證完整實(shí)現(xiàn)部署流程(前端?+?后端?+?Nginx?集成)

    滑塊驗(yàn)證完整實(shí)現(xiàn)部署流程(前端?+?后端?+?Nginx?集成)

    滑塊驗(yàn)證作為一種反機(jī)器人的工具,也會(huì)不斷發(fā)展和演進(jìn),以適應(yīng)不斷變化的威脅,這篇文章主要介紹了滑塊驗(yàn)證完整實(shí)現(xiàn)部署流程(前端?+?后端?+?Nginx集成)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-12-12
  • 超實(shí)用的Nginx常見配置合集分享

    超實(shí)用的Nginx常見配置合集分享

    這篇文章主要為大家詳細(xì)介紹了超實(shí)用的Nginx常見配置合集,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定的參考價(jià)值,感興趣的可以了解一下
    2022-07-07
  • Nginx配置終極版指南(全網(wǎng)最詳細(xì))

    Nginx配置終極版指南(全網(wǎng)最詳細(xì))

    對(duì)于前端項(xiàng)目來說,nginx是必須了解和熟悉的,本文對(duì)nginx整體的概念進(jìn)行了重新梳理,同時(shí)幫讀者理清nginx配置思路,文中通過代碼示例和圖文講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-11-11
  • Windows/Linux/macOS上Nginx實(shí)現(xiàn)開機(jī)自啟全指南

    Windows/Linux/macOS上Nginx實(shí)現(xiàn)開機(jī)自啟全指南

    無論是開發(fā)環(huán)境還是生產(chǎn)服務(wù)器,Nginx作為高性能的Web服務(wù)器和反向代理,常常需要7×24小時(shí)運(yùn)行,如果每次電腦或服務(wù)器重啟后都要手動(dòng)啟動(dòng)它,既繁瑣又容易遺忘,本文將詳細(xì)講解在Windows、Linux、macOS三大主流操作系統(tǒng)上,如何將Nginx配置為系統(tǒng)服務(wù),實(shí)現(xiàn)開機(jī)自動(dòng)啟動(dòng)
    2026-05-05
  • 關(guān)于nginx日志增加cookie信息

    關(guān)于nginx日志增加cookie信息

    這篇文章主要介紹了nginx日志增加cookie信息的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11

最新評(píng)論

广水市| 建平县| 新昌县| 乐至县| 松江区| 滦平县| 颍上县| 宜都市| 定西市| 扬州市| 望谟县| 邵东县| 四子王旗| 浦东新区| 通江县| 白沙| 澎湖县| 水城县| 达孜县| 原阳县| 商丘市| 灵璧县| 黄陵县| 东阿县| 招远市| 闸北区| 毕节市| 新丰县| 吉安市| 阿克陶县| 沙河市| 那坡县| 广东省| 崇阳县| 平远县| 红河县| 天峻县| 承德市| 新龙县| 吴川市| 翁牛特旗|