Docker 環境下配置多域名 SSL

服務器介紹:php

服務器配置:aliyun最低配:CPU: 1核 內存: 1024 MB 1Mbps(峯值)html

服務器環境:centos 7.0,暫時只安裝了 docker 和 nginx 1.10nginx

 

構想:git

經過宿主的 nignx 根據域名進行分發,分發至不一樣的 docker 實例。docker

具體參考 docker搭建nginx配置多域名以及多端口號centos

嘗試使用多種不一樣的方式對不一樣的子域名進行 HTTPS 配置,1>阿里雲自己的免費證書,2> Let's Encrypt 免費證書 服務器

 
截止 2017-02-07composer

新域名還沒備案。dom

待域名備案經過後再填坑。wordpress

 


 

 

2017-03-08 再更

審覈經過,域名爲 auww.me

域名的解析類型爲泛解析,即 *.auww.me 均指向個人阿里雲服務器

1> 經過端口區分(已實現)

    具體項目 http://git.oschina.net/auwaiyung/docker_lnmp_example , 使用方法在項目的 README.md

    ps: checkout 後,須要稍微修改一下 docker-composer.yml 的端口部分,docker容器不可同時映射到宿主的同一個端口,會衝突。

    具體訪問url:  http://www.auww.me:81/phpinfo.php  http://www.auww.me:82/phpinfo.php

   pps: 修改過配置後,必定要從新build,而後使用 down 和 up 來重啓,restart 重啓不生效。

 

2> 考慮實際,首先,先不可能讓用戶提早知道你除了開放80端口外,還有沒有別的端口開放訪問。再者,即使是知道,應該也沒有多少人願意在連接上帶上端口號,由於這看起來就很非主流很山寨。

   具體想法:經過宿主機的nginx進行分發

server {
    server_name wordpress.auww.me
    listen 80;

    location / {
        proxy_redirect off;
        # 真實 ip
        proxy_set_header X-Real-IP $remote_addr;
        # 真實 ip
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 真實的 host
        proxy_set_header Host $host;
        # 轉發
        proxy_pass http://www.auww.me:81;
    }
}

 

2017-3-10 再更

初級想法實現,根據域名分到不一樣的docker容器也可實現,可是其中發現有點問題

1>因爲使用 wordpress 做爲 demo 項目,但是wordpress大量使用了 $_SERVER 變量。這致使 proxy_pass 先後的變量不一致

    解決方法:能夠經過   proxy_set_header REQUEST-URI $request_uri;   或  fastcgi_param REQUEST_URI $http_request_uri; # set in the nginx config on the host  進行實際的設置,適配項目的須要

 

2> 因爲但願域名 http://wordpress.auww.me 直接就是 wordpress 項目,但是其實是有訪問 phpmyadmin 管理 MySQL 的須要,又不想經過 http://www.auww.me:[port]/phpMyAdmin 的形式進行訪問。主要是經過location{} 來實現這個功能。這裏,也有兩個方向,1. 對宿主機nginx進行配置,2.對容器的nginx進行配置

 

第一個實現以下:

感受,第一個的實現比第二個仍是有點優勢的:

1,修改 location 方便,以防我哪天心血來潮,想改點什麼東西,能夠當即生效。若是寫在容器的config,須要從新 build,而後down,而後up,才能夠生效。

2,因爲寫在容器裏面,每一項的更改須要須要從新 build,而後down,而後up,才能夠生效。對於我在嘗試搭建的時候,實在是十分不友好。故,先使用第一個,第二個再挖坑。等將來有機會補上。

故將nginx 的 conf 設置成以下

# /etc/nginx/conf.d/wordpress.conf
server { server_name wordpress.auww.me listen
80; #proxy_redirect off; #proxy_set_header X-Real-IP $remote_addr; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #proxy_set_header Host $host; location / { proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_set_header REQUEST-URI $request_uri; proxy_pass http://www.auww.me:81/wordpress/; } location ^~ /phpMyAdmin/ { proxy_pass http://www.auww.me:81/phpMyAdmin/; } }

使匹配 /phpmyadmin/ 的跳轉到 http://www.auww.me:[port]/phpMyAdmin/ 裏面去

而後其他的就直接指向 http://www.auww.me:81/wordpress/

pps: proxy_set_header 這個命令,只要在 location 裏面設置一條,server 裏面的 proxy_set_header 都會失效,失效,失效。

 

另附上容器的nginx配置  

fastcgi_param  REQUEST_URI $http_request_uri;  這個就是根據wordpress 的須要設置的參數,參數來源於宿主nginx的設置。若是不設置的話,進入 wordpress (domain.com/wp-admin)的管理後臺,會被 wordpress 處理成 domain.com/wordpress/wp-admin
# /home/au/docker/wordpress/project/nginx/sites-enabled/default.config
server { listen
80 default; index index.html index.htm; server_name wordpress.auww.me; root /usr/share/nginx/html; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.html; } location ~ \.php { include fastcgi_params; fastcgi_pass php:9000; fastcgi_index index.php; #fastcgi_param URIA $uri; #fastcgi_param REQUEST_URIA $request_uri; fastcgi_param REQUEST_URI $http_request_uri; # set in the nginx config on the host fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; } }
相關文章
相關標籤/搜索