在云服务器部署服务后,直接通过IP+端口访问不仅记忆不便,还可能因HTTP/HTTPS混合请求引发安全拦截(如前端HTTPS页面请求后端HTTP接口的“混合内容”问题)。拥有域名后,通过合理配置域名解析与服务器环境,可实现安全、友好的服务访问。本文结合云服务器(OpenCloudOS系统)与Nginx环境,详细讲解从域名绑定到服务访问的全流程,同时解决EventSource长连接等特殊场景的适配问题。博主已经完成绑定,欢迎大家访问我的AI聊天学习项目aichat.2025521.xyz。

一、前置准备:确保基础条件就绪

在开始配置前,需确认以下核心条件已满足,避免后续操作受阻:

  1. 域名与备案:已拥有合法域名(如example.com),国内云服务器需完成域名备案(登录云服务商控制台申请,约1-2周),否则无法正常解析访问。

  2. 云服务器信息:获取服务器公网IP(如[你的服务器公网IP]),确认已安装Nginx(可通过nginx -v验证)。

  3. 端口开放:在云服务器安全组中开放80(HTTP)和443(HTTPS)端口,授权对象设为0.0.0.0/0(允许公网访问),这是域名通过HTTP/HTTPS访问的基础。

二、核心步骤一:域名解析——让域名指向服务器IP

域名解析的本质是将“易记忆的域名”与“服务器IP”绑定,使访问域名时自动跳转至目标服务器。所有域名服务商的解析操作逻辑一致,以下以阿里云为例说明:

1. 操作流程

  1. 登录域名服务商控制台(如阿里云域名控制台),找到目标域名(如example.com),点击“解析”进入解析管理页面。

  2. 点击“添加记录”,按服务需求配置解析规则。核心需添加2类记录(可按需扩展),实现不同子域名对应不同服务。

2. 关键解析记录配置

记录类型

主机记录(子域名)

记录值(服务器IP)

TTL(生效时间)

用途说明

A

api

[你的服务器公网IP]

10分钟

对应后端API服务,访问api.example.com即指向服务器

A

www

[你的服务器公网IP]

10分钟

对应前端服务,访问www.example.com可打开前端页面

A

@

[你的服务器公网IP]

10分钟

对应根域名,直接访问example.com即可指向服务器

3. 解析生效验证

配置完成后,等待1-10分钟(TTL生效时间),在本地终端执行ping api.example.com,若返回服务器IP([你的服务器公网IP]),说明解析成功。

三、核心步骤二:服务器配置——HTTPS与Nginx反向代理

解析完成后,需在服务器配置HTTPS(解决混合内容问题)和Nginx反向代理(让域名指向具体服务)。HTTPS通过SSL证书实现,推荐使用Let's Encrypt免费证书,Nginx配置则需适配前端、后端API及EventSource长连接场景。

1. 申请免费SSL证书(Certbot工具)

Certbot可自动申请Let's Encrypt证书并配置到Nginx,无需手动上传,操作如下:

  1. 安装Certbot及Nginx插件:在服务器终端执行命令:

    # 适用于OpenCloudOS/CentOS系统 yum install certbot python3-certbot-nginx -y

  2. 申请并配置证书:替换命令中的域名(api.example.com、www.example.com)为你的实际域名,执行后按提示操作:

     # 同时为多个子域名申请证书 certbot --nginx -d api.example.com -d www.example.com

    操作提示:输入邮箱(用于证书到期提醒)→ 同意服务条款(输入A)→ 拒绝共享邮箱(输入N)→ 选择强制HTTP跳转到HTTPS(输入2),完成后Certbot会自动修改Nginx配置。

证书默认存储路径:/etc/letsencrypt/live/你的域名/,无需手动修改。

2. 优化Nginx配置——适配多服务场景

Certbot自动配置后,需补充反向代理规则,实现“子域名-服务”的精准映射。编辑Nginx配置文件(路径:/etc/nginx/conf.d/api.example.com.conf),以下为完整配置示例(支持后端API、前端服务及EventSource长连接):

# 1. 强制HTTP跳转到HTTPS(安全合规,Certbot自动生成)
server {
    if ($host = api.example.com) {
        return 301 https://$host$request_uri;
    }
    listen       80;
    server_name  api.example.com www.example.com;
    return 404;
}

# 2. 后端API服务配置(api.example.com)
server {
    listen       443 ssl;
    server_name  api.example.com;

    # SSL证书配置(Certbot自动生成)
    ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # 反向代理后端API(适配8081端口,支持EventSource长连接)
    location /api/ {
        proxy_pass http://127.0.0.1:8081;  # 后端服务地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;  # 告知后端请求为HTTPS

        # EventSource长连接必备配置(防止连接中断)
        proxy_buffering off;  # 禁用缓冲(流式数据需实时传输)
        proxy_cache off;      # 禁用缓存
        proxy_set_header Connection "keep-alive";
        proxy_set_header Transfer-Encoding "chunked";
    }
}

# 3. 前端服务配置(www.example.com,可选,替代GitHub Pages)
server {
    listen       443 ssl;
    server_name  www.example.com;

    # 复用SSL证书
    ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # 指向前端项目目录(如Vue的dist目录)
    root   /usr/share/nginx/html/project1;
    index  index.html;

    # 解决Vue History模式刷新404问题
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 静态文件缓存优化
    location ~* \.(js|css|png|jpg|gif)$ {
        expires 7d;
    }
}

3. 配置生效验证

修改配置后,执行以下命令测试并重启Nginx,确保配置无错误:

# 测试配置语法 nginx -t # 重启Nginx生效 nginx -s reload

四、核心步骤三:访问验证——确认服务正常可用

配置完成后,需从HTTPS有效性、API服务、前端服务三个维度验证,确保域名访问正常:

1. HTTPS有效性验证

打开浏览器访问https://api.example.com,地址栏显示“小锁”图标,无安全警告,说明HTTPS配置成功。

2. 后端API服务验证

访问具体API接口(如https://api.example.com/api/chat?id=777999696&message=你好),若返回正常响应或EventSource连接成功,说明反向代理生效。此时前端(如GitHub Pages)只需将请求地址从“http://[你的服务器公网IP]:端口”改为“https://api.example.com/...”,即可彻底解决混合内容问题。

3. 前端服务验证(若配置)

访问https://www.example.com,能正常显示前端页面,路由跳转及刷新无404,说明前端配置生效。

五、常见问题排查——解决配置中的“坑”

配置过程中可能遇到连接超时、证书错误等问题,以下为高频问题及解决方案:

1. 域名访问超时/无法连接

原因:云安全组未开放443端口,或Nginx未监听443端口。 解决:① 检查安全组443端口入方向规则;② 执行ss -tulpn | grep 443,确认Nginx进程在监听443端口,若未监听则重启Nginx。

2. 浏览器提示“证书无效”

原因:域名未备案(国内服务器),或证书与访问域名不匹配。 解决:① 完成域名备案;② 确认访问域名与申请证书的域名一致(如证书为api.example.com,不可用example.com访问)。

3. EventSource连接失败

原因:Nginx缺少长连接配置,或后端未返回正确响应头。 解决:① 确认Nginx配置包含proxy_buffering off;等4个长连接参数;② 后端接口添加响应头:

 // 后端代码示例(Node.js) res.setHeader('Content-Type', 'text/event-stream'); res.setHeader('Cache-Control', 'no-cache'); res.setHeader('Connection', 'keep-alive');

4. 解析配置后未生效

原因:DNS缓存未更新。 解决:本地执行ipconfig /flushdns(Windows)或sudo dscacheutil -flushcache(Mac)刷新DNS,或等待30分钟让缓存自动失效。

六、后续优化——提升服务稳定性与扩展性

1. 证书自动续期

Let's Encrypt证书有效期为90天,Certbot默认已配置自动续期,可通过以下命令验证:

# 查看自动续期任务 systemctl list-timers certbot.timer # 手动测试续期(无报错则正常) certbot renew --dry-run

2. 多子域名扩展

若需部署测试环境、管理后台等多个服务,可新增子域名解析(如test-api.example.com),并在Nginx中添加对应的server块,复用现有配置逻辑。

3. 性能优化

在Nginx配置中添加静态文件缓存、Gzip压缩等规则,提升前端访问速度;对后端API配置请求限流,防止恶意访问。

七、总结

用域名访问云服务器服务的核心是“域名解析绑定IP + HTTPS加密 + Nginx反向代理”。通过本文步骤,可实现:

  • 访问友好:用api.example.com替代IP+端口,记忆与传播更便捷;

  • 安全合规:HTTPS加密传输,解决混合内容拦截问题;

  • 灵活扩展:通过子域名隔离前端、后端、测试等多类服务。

无论是个人项目还是企业服务,合理配置域名访问都是提升服务质量的关键一步。后续只需根据新增服务需求,重复“解析子域名 + 配置Nginx”的逻辑,即可快速扩展访问能力。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐