在 Docker 利用 nginx 部署多個 SSL 網站
4 min readFeb 27, 2019
使用 Docker 在同一個主機完成多個 SSL 憑證網站的部署。
網站一:wordpress-wordpress.example.com
網站二:靜態網站-test.example.com
事前準備:安裝三個需要使用到的 Docker( wordpress 、 mysql 、 nginx)和申請好所需使用 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