之前买了一个虚拟主机, 想着没事做个博客玩一下。 刚好最近在学习docker。 就想着使用docker来部署我的站点。 想着后面可能会将多个域名只想这台主机(也许最后只有一个域名), 就想折腾一下。 当前主流的WEB服务是 Apache和Nginx。 听说Ngnix,功能比较多,工作中接触比较少,就选Ngnix。 嗯,我对比了解的技术还是有很强的好奇心的(no zuo no die)。

Nginx 多域名代理

首先上我的配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
worker_processes  1;
events {
  worker_connections  1024;
}

http {
  include       mime.types;
  default_type  application/octet-stream;
  sendfile        on;
  keepalive_timeout  65;

  server {
    listen 80;
    server_name test.jeffreysun.net;
    location / {
      proxy_pass http://172.25.0.133;
    }
  }

  server {
    listen 80;
    server_name blog.jeffreysun.net;
    location / {
      proxy_pass http://172.25.0.134;
    }
  }
}

解释一下:

在这里我准备启动三个容器,一个代理容器和两个web容器。地址分别是是 172.25.0.132/172.25.0.133/172.25.0.134。 把代理的端口暴露出来,其他的容器不暴露端口, 所有的请求通过代理转发到内部子网。 代理可以通过配置,将不同域名的请求转发到不同的容器,完成我的需求。

Nginx Https 配置

最近 网页不做Https浏览器都会报出警告,有时间就去申请一下免费的ssl证书。

申请免费的SSL证书,网上有很多的地方可以申请,例如 腾讯云/阿里云等。

现在看一下我的配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
worker_processes  1;
events {
  worker_connections  1024;
}

http {
  include       mime.types;
  default_type  application/octet-stream;
  sendfile        on;
  keepalive_timeout  65;

  server {
    listen 80;
    server_name test.jeffreysun.net blog.jeffreysun.net;
    return 301 https://$host$request_uri;
  }

  server {
    listen 443 ssl;
    server_name test.jeffreysun.net;
    ssl on;
    ssl_certificate      /etc/letsencrypt/live/test.jeffreysun.net_bundle.crt;
    ssl_certificate_key  /etc/letsencrypt/live/test.jeffreysun.net.key;

    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://172.25.0.133;
    }
  }

  server {
    listen 443 ssl;
    server_name blog.jeffreysun.net;
    ssl on;
    ssl_certificate      /etc/letsencrypt/live/blog.jeffreysun.net_bundle.crt;
    ssl_certificate_key  /etc/letsencrypt/live/blog.jeffreysun.net.key;

    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://172.25.0.134;
    }
  }
}