求助。 。有dalao寫過教學的話把文章連結貼出來也行。 。百度了一圈已經昏迷。 。
習慣沉默2017-06-20 10:07:52
折騰了一個下午,找到了docker的解決方案
github:https://github.com/JrCs/docke...
把重要的重點部分摘出來
nginx 代理還可以使用 jwilder/docker-gen
映像和官方 nginx 映像作為兩個獨立的容器運行。
您可能想要這樣做是為了防止將 docker 套接字綁定到公開暴露的容器服務(避免將 docker 套接字掛載在 nginx 暴露的容器中)。從安全角度來看更好。
要將 nginx 代理程式作為單獨的容器運行,您需要:
1)將模板檔案nginx.tmpl掛載到docker-gen容器中。您可以使用以下命令來取得最新的官方 nginx.tmpl:
雷雷2) 設定 NGINX_DOCKER_GEN_CONTAINER
環境變數為 docker-gen 容器的名稱或 id。
範例:
首先使用捲啟動 nginx(官方鏡像):
第二次啟動帶有共享捲和模板檔案的 docker-gen 容器:
然後啟動這個容器(NGINX_DOCKER_GEN_CONTAINER變數必須包含docker-gen容器名稱或id):
然後按照前面的描述啟動要代理的任何容器。
如果因為某些原因你無法使用 docker --volumes-from 選項,你可以使用 NGINX_PROXY_CONTAINER
變數指定 nginx 容器的名稱或 id。
使用 Let's Encrypt 服務自動為虛擬主機建立有效的憑證。
設定以下環境變數以啟用對被代理的容器的 Let's Encrypt 支援。這個環境變數需要在每個要代理的應用程式容器中宣告。
LETSENCRYPT_HOST
LETSENCRYPT_EMAIL
LETSENCRYPT_HOST 變數很可能需要與
VIRTUAL_HOST 變數相同,且必須是可公開存取的領域。使用逗號分隔符號指定多個主機。
LETSENCRYPT_KEYSIZE
變數決定請求密鑰的大小(以位元為單位,預設為4096)。
多域(SAN)憑證
環境變數的第一個域。 如果要建立沒有 5 個證書/週/域限制的測試證書,請定義值為 每小時(3600 秒)檢查一次證書,並更新將在接下來的 30 天(90 天/3)內到期的每個證書。 可選的letsencrypt-nginx-proxy-companion容器環境變數用於自訂配置。 例如 「com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true」標籤 - 在 nginx-proxy 容器上設定此標籤,告訴 docker-letsencrypt-nginx-proxy-companion 容器將其用作代理。 如果您想了解如何使用此容器的其他範例,請查看: Karl Fathi 的例子 Karl 的更多範例 喬治·伊耶斯的例子 Dmitry 的簡單 docker-compose 範例 注意,這裡有一個坑,也怪我自己沒看清楚,如果鏡像已經暴露端口就設置VIRTUAL_HOST、LETSENCRYPT_HOST、LETSENCRYPT_EMAIL就行,如果沒有就得在設置好三個環境變量之後自己加入--expose 容器內應用服務連接埠參數啟動。如果容器是discourse這樣的,就得在app.yml內設定好環境變數之後把連接埠對映的80:80改為未佔用連接埠:80,然後再儲存重建啟動。 測試證書
true
的 LETSENCRYPT_TEST
環境變數(在使用 LETSENCRYPT_HOST 請求證書的容器中)。如果您想要對所有容器全域執行此操作,請按如下所述設定 ACME_CA_URI。 自動更新憑證
範例:
雷雷
可選容器環境變數
ACME_CA_URI
- CA ACME API 端點的目錄 URI(預設值:https://acme-v01.api.letsencrypt.org/directory
)。如果您將其值設為https://acme-staging.api.letsencrypt.org/directory
,LetsEncrypt 將使用沒有 5 個憑證/週/網域限制的測試伺服器。您也可以為每個容器建立測試證書(請參閱讓我們加密測試證書)
DEBUG
- 將其設為 true
以啟用入口點腳本的偵錯和 LetsEncrypt 憑證的生成,這可以幫助您找出任何設定問題。 ACME_TOS_HASH
- 讓您將替代的 TOS 雜湊傳遞給 simpl_le,以支援其他 CA 的 ACME 實作。 範例:
大家讲道理2017-06-20 10:07:52
由於容器只能直接綁定宿主機的端口,例如我有10個web容器,那麼這些容器都需要80或者443,這樣-p參數不可行,所以要么是通過一個容器作為網關反向代理容器,用nginx,nginx容器進行-p,其他得php-fpm,node這樣得web容器,透過nginx做反向代理來進行訪問,憑證也直接交給nginx伺服器,進行443轉送就可以實現了。
其實這些都是基礎只是跟docker沒關係
這篇文章是一個lnmp環境,
/a/11...
如果是多個php-fpm或node或python後端服務的話,那麼nginx應該是下面這樣得
server{
listen 80;
server_name web1;
location /{
proxy_pass ....
}
}
server{
listen 80;
server_name web2;
location /{
proxy_pass ....
}
}
server{
listen 80;
server_name web3;
location /{
proxy_pass ....
}
}