在这篇博客中,我将介绍如何为你的域名添加子域名,并使用 Nginx 反向代理将子域名请求转发到 Flask 应用。我们将以子域名 app1.example.com 为例,并通过 Nginx 将请求转发到 Flask 应用的 5000 端口。

1. 前提条件
  • 你已经拥有一个域名,并且域名已经正确解析到你的服务器。
  • 服务器上已经安装了 Nginx,并且 Flask 应用运行在本地的 5000 端口上。

步骤 1:为子域名添加 DNS 解析

首先,我们需要为子域名 app1.example.com 添加一条 A记录,指向服务器的公网 IP。

1.1 登录 DNS 提供商控制台
  1. 登录你的 DNS 提供商的控制台(例如 Cloudflare、阿里云等)。
  2. 在控制台中,找到 域名解析DNS设置 页面。
1.2 添加子域名的 A 记录
  1. 域名解析 页面中,找到你要配置的主域名(例如 example.com),并点击进入该域名的解析设置页面。
  2. 点击页面上的 添加记录 按钮。
  3. 填写以下信息:
    • 主机记录:填写 app1
    • 记录类型:选择 A记录
    • 解析线路:选择 默认
    • 记录值:填写服务器的公网 IP 地址(例如 192.168.1.100)。
    • TTL:建议设置为 10 分钟或 1 小时。
  4. 点击 保存

这样,你已经为 app1.example.com 添加了一条解析记录。

步骤 2:在 Nginx 中为子域名配置反向代理

接下来,我们将在 Nginx 中配置反向代理,将 app1.example.com 的请求转发到 Flask 应用的 5000 端口。

2.1 Nginx 配置文件的结构

假设你已经使用宝塔面板或其他方式安装了 Nginx。接下来,我们将为子域名 app1.example.com 创建新的站点配置文件,并将其与 Flask 应用集成。

2.2 修改 Nginx 配置文件
  1. 打开你的服务器,进入 Nginx 配置目录(宝塔面板的默认路径是 /www/server/panel/vhost/nginx/)。

  2. 为子域名 app1.example.com 创建一个新的配置文件,命名为 app1.example.com.conf

  3. 在文件中添加以下配置内容:
     

    # 重定向 HTTP 到 HTTPS
    server {
        listen 80;
        server_name app1.example.com;
        return 301 https://$host$request_uri;
    }
    
    # 处理 HTTPS 请求
    server {
        listen 443 ssl http2;
        server_name app1.example.com;
    
        # SSL 证书配置
        ssl_certificate    /www/server/panel/vhost/cert/app1.example.com/fullchain.pem;
        ssl_certificate_key    /www/server/panel/vhost/cert/app1.example.com/privkey.pem;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers EECDH+AESGCM:EECDH+CHACHA20:!aNULL:!MD5:!DSS;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        add_header Strict-Transport-Security "max-age=31536000" always;
    
        # 反向代理到 Flask 应用的 5000 端口
        location / {
            proxy_pass http://127.0.0.1:5000;  # Flask 应用运行在 5000 端口
            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;
        }
    
        # 日志配置(可选)
        access_log  /www/wwwlogs/app1.example.com.access.log;
        error_log  /www/wwwlogs/app1.example.com.error.log;
    }
    


     

2.3 配置说明:
  • HTTP 重定向到 HTTPS:通过 server 块中的 return 301 实现,将所有 HTTP 请求重定向到 HTTPS。
  • SSL 证书:确保你已经通过宝塔面板或其他方式申请了 app1.example.com 的 SSL 证书,并将 ssl_certificatessl_certificate_key 指向正确的证书文件路径。
  • 反向代理proxy_pass 将子域名的请求转发到本地运行的 Flask 应用(监听 5000 端口)。
  • 日志记录:配置访问和错误日志,方便调试。
2.4 重新加载 Nginx 配置

修改完成后,保存文件并重新加载 Nginx 配置,以使新站点生效:
 

sudo nginx -s reload

 

步骤 3:验证配置

3.1 测试域名解析

在完成子域名解析配置后,执行以下命令来测试解析是否生效:
 

ping app1.example.com

如果解析成功,应该会看到该子域名解析到你的服务器公网 IP 地址。

3.2 测试访问

在浏览器中访问 https://app1.example.com,检查是否可以正确访问你的 Flask 应用。

步骤 4:排查问题

  • 如果你遇到 502 Bad Gateway 错误,检查 Nginx 错误日志 /www/wwwlogs/app1.example.com.error.log

  • 确保 Flask 应用在服务器的 5000 端口上运行,使用以下命令检查端口状态:
     

    netstat -tuln | grep 5000
    

    如果 DNS 解析未生效,检查域名解析设置是否正确,确保 A记录 指向正确的服务器 IP。

09-20 18:21