Docker 環境下配置多域名 SSL


服務器介紹:

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

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

 

構想:

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

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

嘗試使用多種不同的方式對不同的子域名進行 HTTPS 配置,1>阿里雲本身的免費證書,2> Let's Encrypt 免費證書 

 
截止 2017-02-07

新域名還沒備案。

待域名備案通過后再填坑。

 


 

 

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; } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM