Nginx + Docker 实现多级域名访问 Web 应用
起因是只有一个域名,regenblogs.fun,但是云服务器在跑的服务有好几个,所以打算使用多级域名的方式进行充分利用这单个域名。过程也比较简单,总结一下便于下次复用。
多级域名简要介绍
域名的核心是域名系统(英语:Domain Name System,缩写:DNS),域名系统中的任何名称都是域名。在域名系统的层次结构中,各种域名都隶属于域名系统根域的下级。域名的第一级是顶级域,它包括通用顶级域,例如.com、.net和.org;以及国家和地区顶级域,例如.us、.cn和.tk。顶级域名下一层是二级域名,一级一级地往下。现在,还有一些新兴的中文域名,例如.在线等。这些域名向人们提供注册服务,人们可以用它创建公开的互联网资源或运行网站。顶级域名的管理服务由对应的域名注册管理机构(域名注册局)负责,注册服务通常由域名注册商负责[2]。
使用宿主机 Nginx + Docker 实现多级域名访问 Web 应用
场景背景
我有一个 Nuxt 项目,使用 Docker 进行打包,镜像中使用 Nginx 进行静态文件托管。我们希望通过 yuxuan.regenblogs.fun
访问这个 Web 应用。
Dockerfile 和 Nginx 配置
Dockerfile:
1 | FROM nginx:alpine |
容器内 nginx.conf
:
1 | server { |
容器启动
不直接映射宿主机的 80 端口,而是使用 3000 端口,避免与宿主机 Nginx 冲突:
1 | docker build -t nuxt-yuxuan-app . |
这表示容器内 Nginx 启动在 80 端口,宿主机通过 3000 端口访问它。
安装宿主机 Nginx 并配置反向代理
- 安装 Nginx:
1 | sudo apt update |
- 新建配置文件
/etc/nginx/sites-available/yuxuan.regenblogs.fun
:
1 | server { |
- 启用配置并重启 Nginx:
1 | sudo ln -s /etc/nginx/sites-available/yuxuan.regenblogs.fun /etc/nginx/sites-enabled/ |
域名解析设置
在域名服务商控制台中,将 yuxuan.regenblogs.fun
的 A 记录指向服务器公网 IP。
我这里使用的是在阿里云注册的域名,可以直接添加DNS解析,就在控制台中。
成功验证
确保服务器防火墙或云安全组放行 80 端口后,浏览器访问:
1 | http://yuxuan.regenblogs.fun |
如果一切配置无误,即可正常访问部署的前端页面。
总结
通过将 Docker 部署与宿主机 Nginx 配合使用,我们实现了:
- 避免容器占用宿主机 80 端口
- 灵活配置多个二级域名
- 为日后配置 HTTPS、负载均衡打下基础
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment