服務器介紹: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; } }