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; } }
相关文章
相关标签/搜索