利用nginx实现多端口的https访问

Posted by hebicheng on March 21, 2019

利用nginx反向代理,通过配置多域名,实现在一台机器上利用不同的域名访问不同的服务,并且实现https。

先上代码

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
events {
        worker_connections 1024;
}

http {
    upstream server1 {
        server 127.0.0.1:8000 weight=1;
    }

    upstream server2 {
        server 127.0.0.1:8080 weight=1;
    }

    server {
        listen 443;
        server_name heb1c.cn;
        location = / {
            proxy_pass   http://server1;
        }
   
        ssl on;
        ssl_certificate /xxx/full_chain.pem;
        ssl_certificate_key /xxx/private.key;     
    }

    server{
        listen 443;
        server_name www.sicnuacm.cn;
        location /{
            proxy_pass   http://server2;
        }
        ssl on;
        ssl_certificate /xxx/full_chain.pem;
        ssl_certificate_key /xxx/private.key;
   }

   server{
        listen 80;
        server_name heb1c.cn www.heb1c.cn;
        rewrite ^/(.*)$ https://heb1c.cn:443/$1 permanent;
    }

    server{
        listen 80;
        server_name sicnuacm.cn www.sicnuacm.cn;
        rewrite ^/(.*)$ https://sicnuacm.cn:443/$1 permanent;
    }

}

我们从代码开始解释:
首先我们用 upstream 将我们放在不同端口上(8080和8000)的两个服务表示成 server1server2
接着我们定义了两个server都监听443端口,在第一个server,我们设置它的域名为server_nameheb1c.cnproxy_passhttp://server1,意思是当访问的域名为heb1c.cn且端口为443时,nginx会自动代理到我们配置的server1,访问相应的服务。第二个server的配置同理.
只需要这样简单的配置,我们就能实现在一台机器上利用不同的域名访问不同的服务。
另外,注意到后面80端口的监听,这是为了将http请求转发到https,以实现服务的全面https化。

原创作品,转载请注明来源 https://hebicheng.github.io