用docker和nginx反向代理创建多个网站,以及CDN设置


因为不想在服务器上装Mysql和PHP,所以打算使用docker来部署博客和其他网站,方法是docker作为后端在各种端口提供服务,前端则使用nginx把不同域名的80端口反向代理到各个docker的端口上,从而实现在一台服务器上部署多个网站。

docker的安装和容器的部署就不多说了,需要一提的是,在设置容器的端口转发时,在host端可以设置为127.0.0.1:777的形式,这样这个端口将只有本机可以访问,以便用nginx做反向代理,而外网则无法访问这个端口,这样就可以防止一个域名带上另一个容器的端口,导致访问到了另外一个站,从而做到了网站之间的完全隔离。

重点说一下Nginx反向代理的设置,建议在/etc/nginx/sites-enabled/目录下创建各个网站的conf文件,这些conf文件会被include到nginx的配置文件中。conf文件反向代理设置代码:

upstream iwan.ga {
    server 127.0.0.1:777;
    }
server {
        listen       80;
        server_name  iwan.ga;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://iwan.ga;
            index  index.html index.htm;
        }
    }

这样在访问iwan.ga域名时,nginx会反向代理到本机的777端口,这个端口就是docker上容器暴露给本机的端口。再设置另外一个域名或者子域名的80端口反向代理到另外一个容器的端口,就实现了用不同域名访问不同的docker。

在部署好博客后,用CloudFlare(https://www.cloudflare.com)提供的免费CDN服务为博客添加了CDN,以便隐藏源站的IP。CloudFlare CDN的使用方法很简单,简要步骤如下:

  1. 注册CloudFlare
  2. 在CloudFlare上添加要使用CDN的域名
  3. 我的域名是在freenom注册的,所以要在freenom的后台把域名的Nameserver设置为CloudFlare提供的Nameserver
  4. 然后就可以在CloudFlare上解析要使用CDN的二级域名了,CloudFlare的DNS解析支持@但是不支持*泛域名

域名配置好CDN后,ping域名就会发现已经不是解析到自己的源站了。同时,CloudFlare的免费CDN服务还自带了共享的SSL证书,所以网站在配置好CDN后,就可以直接使用https访问。不过免费的CDN因为没有国内的节点,所以国内访问的速度并不一定会快,233,至少隐藏源站IP的目的是达到了。

声明:爱玩咖 – 生命在于折腾|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 用docker和nginx反向代理创建多个网站,以及CDN设置


Carpe Diem and Do what I like