利用反向代理实现单服务器绑定多个子域名

发布于 6 年前
1 分钟阅读

当服务器上运行了多个服务,例如 wordpress、drone ci、gitlab 等等,该如何将这些服务绑定到子域名上?

在此之前,我们需要了解域名解析中常见的记录类型。


域名解析

常见的记录类型如下

| 记录类型 | 释义 | | ------ | ------ | ------ | | A(A记录) | 将域名指向一个 IPV4 地址 | | CNAME(CNAME记录) | 将域名指向另外一个域名 | | Forward (显性URL转发) | 将域名重定向到另外一个地址 | | Stealth Forward( 隐性URL转发) | 将域名重定向到另外一个地址(但是会隐藏目标地址) |

  1. A 记录就是将域名解析到一个 IP。

  2. CNAME 记录可以将域名解析到另一个域名对应的 ip,不会修改当前 url。常见的应用就是当多个域名需要指向同个 ip 时,例如希望 blog 子域名和 www 子域名同时指向自己的博客。

  3. Forward 就是域名跳转。若设置为 baidu.com,那么当输入当前域名时就会跳转到 baidu.com,url 也会变成baidu.com。域名跳转中可以设置 301,302。301 为永久性跳转,即当前域名不再使用。302 为临时性跳转,一般在网站维护的时候出现。

  4. Stealth Forward 被称为隐性 URL 转发。利用 frame 标签实现。当输入当前域名时,会内嵌 frame 显示目标域名或 ip 的内容,不会修改当前 url 地址。


反向代理

我们希望把不同子域名解析到同 ip 的不同端口,所有的记录类型都不支持解析端口。使用 A 记录和 CNAME 记录,我们可以将多个子域名同时转发到同一个服务,或者添加多个 A 记录也行。再利用 nginx 反向代理可以实现不同域名对应不同端口的服务。

nginx 配置如下,将 gitlab.islet.site 反向代理到 8080 端口,将 islet.site 解析到 80 端口。

server {
    listen       80;
    server_name  gitlab.islet.site;
    root         /usr/share/nginx/html;

    location / {
      proxy_pass http://127.0.0.1:8080;
  }
}
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  islet.site;
    root         /usr/share/nginx/html;

    location / {
  }
}
  • 域名解析
  • 反向代理