Docker 环境下配置多域名 SSL

/ docker / 没有评论 / 2332浏览

服务器介绍:

构想:

一. 通过端口区分(已实现)

  1. 具体项目 http://git.oschina.net/auwaiyung/docker_lnmp_example , 使用方法在项目的 README.md
  2. ps: checkout 后,需要稍微修改一下 docker-composer.yml 的端口部分,docker容器不可同时映射到宿主的同一个端口,会冲突。
  3. 具体访问url: http://www.auww.me:81/phpinfo.php, http://www.auww.me:82/phpinfo.php
  4. pps: 修改过配置后,一定要重新build,然后使用 down 和 up 来重启,restart 重启不生效。

二. 考虑实际

  1. 首先,先不可能让用户提前知道你除了开放80端口外,还有没有别的端口开放访问。再者,即便是知道,应该也没有多少人愿意在链接上带上端口号,因为这看起来就很非主流很山寨。
  2. 具体想法:通过宿主机的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;
    }
}
  1. 初级想法实现,根据域名分到不同的docker容器也可实现,但是其中发现有点问题
  1. 第一个实现如下:感觉,第一个的实现比第二个还是有点优点的:
# /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 都会失效,失效,失效。

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