利用反向代理实现单服务器绑定多个子域名
当服务器上运行了多个服务,例如 wordpress、drone ci、gitlab 等等,该如何将这些服务绑定到子域名上?
在此之前,我们需要了解域名解析中常见的记录类型。
域名解析
常见的记录类型如下
| 记录类型 | 释义 | | ------ | ------ | ------ | | A(A记录) | 将域名指向一个 IPV4 地址 | | CNAME(CNAME记录) | 将域名指向另外一个域名 | | Forward (显性URL转发) | 将域名重定向到另外一个地址 | | Stealth Forward( 隐性URL转发) | 将域名重定向到另外一个地址(但是会隐藏目标地址) |
-
A 记录就是将域名解析到一个 IP。
-
CNAME 记录可以将域名解析到另一个域名对应的 ip,不会修改当前 url。常见的应用就是当多个域名需要指向同个 ip 时,例如希望 blog 子域名和 www 子域名同时指向自己的博客。
-
Forward 就是域名跳转。若设置为
baidu.com
,那么当输入当前域名时就会跳转到baidu.com
,url 也会变成baidu.com
。域名跳转中可以设置 301,302。301 为永久性跳转,即当前域名不再使用。302 为临时性跳转,一般在网站维护的时候出现。 -
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 / {
}
}
- 域名解析
- 反向代理