在 Docker 利用 nginx 部署多個 SSL 網站

許聖泉 Michael Hsu
4 min readFeb 27, 2019

--

使用 Docker 在同一個主機完成多個 SSL 憑證網站的部署。

網站一:wordpress-wordpress.example.com

網站二:靜態網站-test.example.com

事前準備:安裝三個需要使用到的 Docker( wordpressmysqlnginx)和申請好所需使用 SSL 憑證。

在 Docker 利用 nginx 在同一個主機下部署多網站

免費的 SSL 憑證申請

特別注意的是,安裝 nginx 時,除了需將本地設定檔資料夾映射至 Docker 容器,也要將 SSL 映射到容器的 /etc/nginx/ssl

docker run -p 80:80 --name nginx \ 
-v /www:/usr/share/nginx/html \
-v /nginx/conf.d:/etc/nginx/conf.d \
-v /nginx/ssl:/etc/nginx/ssl \
--restart=always \
--privileged=true \
-d nginx

在 SSL 資料夾下會有四隻檔案:wordpress.example.com.crt、wordpress.example.com.key、test.example.com.crt、test.example.com.key

wordpress 設定檔,注意須將 127.0.0.1 改成虛擬機的 ip 位置

server {  
listen 443 ssl;
server_name wordpress.example.com;
root /usr/share/nginx/html/wordpress/;
location / {
index index.html index.htm index.php;
autoindex off;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://127.0.0.1:8080;
}
ssl_certificate /etc/nginx/ssl/wordpress.example.com.crt;
ssl_certificate_key /etc/nginx/ssl/wordpress.example.com.key;
ssl_trusted_certificate /etc/nginx/ssl/wordpress.example.com.ca-bundle;
}
server {
listen 80;
server_name wordpress.example.com;
return 301 https://$server_name$request_uri;
}

靜態網站設定檔

server {  
listen 443 ssl;
server_name test.example.com;
root /usr/share/nginx/html/test/;
location / {
index index.html index.htm index.php;
autoindex off;
}
ssl_certificate /etc/nginx/ssl/test.example.com.crt;
ssl_certificate_key /etc/nginx/ssl/test.example.com.key;
ssl_trusted_certificate /etc/nginx/ssl/test.example.com.ca-bundle;
}
server {
listen 80;
server_name test.example.com;
return 301 https://$server_name$request_uri;
}

最後重新啟動 nginx

docker restart nginx

Github

--

--