二级域名挂载至服务器程序
前提条件 (Prerequisites)
在开始之前,请确保以下几点已经完成:
DNS 解析:你新的二级域名(例如
newapp.yourdomain.com)已经创建了 A 记录,并指向了你云服务器的公网 IP 地址。你可以通过ping newapp.yourdomain.com命令来验证解析是否生效。 即:Cloudflare → 域名 → DNS → 添加记录 → A 记录后端应用运行正常:确保需要映射的那个端口(例如
8081)上的应用程序已经启动,并且可以在服务器内部访问。可以通过curl http://127.0.0.1:8081来测试,看是否能返回预期的内容。防火墙端口:确保服务器防火墙(如
ufw,firewalld)已经开放了 80(HTTP)和 443(HTTPS)端口。后端应用的端口(如8081)不需要对公网开放,这是 Nginx 反向代理的优势之一。
操作步骤
我们将遵循“一个域名一个配置文件”的最佳实践,这样便于管理和维护。
步骤 1: 定位现有 Nginx 配置
现有的配置文件存放通常有两种主流的组织方式:
sites-enabled目录:这是 Debian/Ubuntu 系发行版推荐的方式。配置文件放在/etc/nginx/sites-available/目录下,然后通过软链接(symbolic link)链接到/etc/nginx/sites-enabled/目录来启用它。conf.d目录:这是 CentOS/RHEL 系发行版常用的方式。所有的配置文件都直接放在/etc/nginx/conf.d/目录下,Nginx 启动时会自动加载该目录下的所有.conf文件。
步骤 2: 创建新的配置文件
我们为新的二级域名创建一个独立的配置文件。
假设新的二级域名是 newapp.yourdomain.com,需要代理的端口是 8081。
# 如果你使用 sites-available 结构
sudo nano /etc/nginx/sites-available/newapp.yourdomain.com.conf
# 如果你使用 conf.d 结构
sudo nano /etc/nginx/conf.d/newapp.yourdomain.com.conf步骤 3: 编写 Nginx 配置
静态文件服务器
server {
# 监听80端口,用于HTTP访问
listen 80;
listen [::]:80; # 同时监听 IPv6 地址
# 关键:这里填写您新的二级域名
server_name newapp.yourdomain.com;
root /xxx/xxx; # 站点的根目录
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
# (可选,推荐) 日志文件路径
access_log /var/log/nginx/newapp.yourdomain.com.access.log;
error_log /var/log/nginx/newapp.yourdomain.com.error.log;
}反向代理服务器
server {
# 监听80端口,用于HTTP访问
listen 80;
listen [::]:80; # 同时监听 IPv6 地址
# 关键:这里填写您新的二级域名
server_name newapp.yourdomain.com;
location / {
# 关键:这里的端口号必须是 所需应用正在监听的端口
proxy_pass http://127.0.0.1:8081;
# 支持WebSocket协议
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
# 当请求包含 Upgrade 头时(WebSocket握手请求的特征),绕过缓存直接将请求发送到后端
proxy_cache_bypass $http_upgrade;
# 将原始请求的Host头传递给后端应用,很多Web框架会依赖它
proxy_set_header Host $host;
# 传递客户端的真实IP地址
proxy_set_header X-Real-IP $remote_addr;
# 传递代理链中所有的IP地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 告诉后端应用请求是通过HTTPS还是HTTP发起的
proxy_set_header X-Forwarded-Proto $scheme;
}
# (可选,推荐) 日志文件路径
access_log /var/log/nginx/newapp.yourdomain.com.access.log;
error_log /var/log/nginx/newapp.yourdomain.com.error.log;
}请务必将 newapp.yourdomain.com 和 8081 替换为你自己的域名和端口。
步骤 4: 启用新配置 (仅sites-available需要)
如果使用的是 sites-available 结构,你需要创建一个从 sites-available 到 sites-enabled 的软链接来启用这个配置。
sudo ln -s /etc/nginx/sites-available/newapp.yourdomain.com.conf /etc/nginx/sites-enabled/如果配置文件已存在,它会提示你。可以使用 sudo rm /etc/nginx/sites-enabled/newapp.yourdomain.com.conf 删除旧的链接再重新创建。
如果你使用的是 conf.d 目录,请跳过这一步。
步骤 5: 测试并重载 Nginx
在应用任何新的配置之前,强烈建议先测试配置文件是否存在语法错误。这是一个非常重要的好习惯。
sudo nginx -t如果一切正常,你会看到类似这样的输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful如果出现错误,它会提示你错误发生在哪一行,请仔细检查并修正。
确认无误后,平滑地重载 Nginx 以应用新的配置。使用**reload而不是restart**可以保证服务不中断。
sudo systemctl reload nginx现在,你应该可以通过浏览器访问 http://newapp.yourdomain.com 来看到你运行在 8081 端口上的应用了。
步骤 6: Certbot 生成和部署 SSL 证书
Certbot 的安装方式因你的 Linux 发行版而异。已安装则跳过。
对于 Debian/Ubuntu 系统:
# 1. 更新软件包列表
sudo apt update
# 2. 安装 Certbot 及其 Nginx 插件
sudo apt install certbot python3-certbot-nginx -y运行 Certbot 获取并自动配置证书
这是最关键的一步。执行以下命令,Certbot 将会启动并处理一切。
# --nginx: 表示使用Nginx插件
# -d: 指定要为其申请证书的域名
sudo certbot --nginx -d newapp.yourdomain.com运行这个命令后,Certbot 会与你进行交互式对话,通常会问你几个问题:
输入你的电子邮件地址 (Enter email address): 这个邮箱用于接收证书即将过期的提醒和你账户的重要通知。强烈建议填写真实的邮箱。
同意服务条款 (Terms of Service): 阅读后输入
A或Y同意。是否愿意分享你的邮箱 (share your email address with the Electronic Frontier Foundation): 这是一个可选项,你可以选择
Y或N。选择是否将 HTTP 重定向到 HTTPS (Please choose whether or not to redirect HTTP traffic to HTTPS):
1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access.强烈建议选择
2。这会帮你自动配置 301 永久重定向,将所有http://的访问请求都强制跳转到https://,这是安全最佳实践。
