docker 和 nginx 配合的一個坑


今天碰到一個 docker 私有倉庫的一個坑,本來私有倉庫的搭建沒有使用 https,然后需要在使用的 docker 的 daemon.json 配置文件的 insecure-registries 配置中添加地址,但似乎這個配置只是一個白名單,是在聲明可以從這個地址獲取倉庫,但並不是優先會從這個地址獲取,仍然會優先讀取 https 地址的內容,如果 https 有響應內容,無論正確與否,都會優先使用 https 地址。

但在 nginx 配置中,如果沒有配置任何一個 443 的 https 服務的話,默認服務器是不響應 443 接口的,但是如果一旦配置了一個 443 服務,那么所有的 443 接口都會默認使用這個配置(源於 nginx 的服務搜索策略),所以一旦在私有倉庫的 nginx 上配置了其它 443 服務,就需要屏蔽一下倉庫域名下 443 接口返回的內容。

解決方案:配置 nginx 的 default_server,默認不進行返回,另外注意默認的 443 雖然不需要返回內容,但仍然需要配置 ssl 證書,否則 nginx 會報錯,證書隨意。通過 return 444 來中止響應。

server {
     listen 443 default_server;
     server_name _ ;
     ssl on;
     ssl_certificate             隨便設置一個ssl證書;                
     ssl_certificate_key     隨便設置一個ssl證書的key;
     return 444;
}

轉自:https://blog.51cto.com/kusorz/2136247

其它參考:

nginx 的 default_server 定義及匹配規則:https://segmentfault.com/a/1190000015681272
慎用 Nginx 的 default_server:https://www.sunzhongwei.com/about-nginx-default-server
關於Nginx的server_name:https://blog.51cto.com/onlyzq/535279
Nginx 的 default_server 指令:https://www.oschina.net/question/12_3565


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM