部署 Web 服务

从 IP:端口 到域名访问: 部署 Web 服务的整指南

在开发和部署 Web 服务时,我们常常从在本地或服务器上运行一个监听特定端口的应用开始。但是,为了让用户更方便地访问,我们需要将这个 IP:端口 组合转换为一个易记的域名。本文将详细介绍这个过程,包括域名设置、SSL 证书配置和 Nginx 反向代理的设置。

步骤 1: 准备工作

  1. 一个运行中的 Web 服务 (本例中假设运行在 http://localhost:5001)

  2. 一个域名 (本例中使用 api.rui-nnovation.cool)

  3. 一个具有公网 IP 的服务器

  4. 对服务器的 root 或 sudo 访问权限

步骟 DNS 设置

  1. 登录您的域名注册商或 DNS 提供商的控制面板。

  2. 为您的域名添加一个 A 记录,指向您服务器的公地址。

    • 主机名: api

    • 类型: A

    • 值: 您服务器的公网 IP

步骤 3: 安装和配置 Nginx

  1. 安装 Nginx:

    sudo apt update
    sudo apt install nginx
  2. 启动 Nginx 并设置为开机自启:

    sudo systemctl start nginx
    sudo systemctl enable nginx

步骤 4: 配置 SSL 证书

我们将使用 Let's Encrypt 提供免费的 SSL 证书。

  1. 安装 Certbot:

    sudo apt install certbot python3-certbot-nginx
  2. 获取并安装证书:

    sudo certbot --nginx -d api.rui-nnovation.cool

    按照提示完成证书的申请和安装。

  3. 如果证书过期了,使用

可以使用 acme.sh 进行证书更新:

acme.sh --renew -d [domain]

这条命令将手动更新指定域名的 SSL 证书。

步骤 5: 配置 Nginx 反向代理

  1. 编辑 Nginx 配置文件:

    sudo nano /etc/nginx/sites-available/default
  2. 用以下配置替换文件内容:

    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        
        server_name _;
        
        location / {
            try_files $uri $uri/ =404;
        }
    }
    
    server {
        listen 443 ssl;
        listen [::]:443 ssl ipv6only=on;
        
        server_name api.rui-nnovation.cool;
        
        ssl_certificate /etc/letsencrypt/live/api.rui-nnovation.cool/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/api.rui-nnovation.cool/privkey.pem;
        
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
        
        location / {
            proxy_pass http://127.0.0.1:5001;
            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;
        }
    }
    
    server {
        if ($host = api.rui-nnovation.cool) {
            return 301 https://$host$request_uri;
        }
        
        listen 80;
        listen [::]:80;
        
        server_name api.rui-nnovation.cool;
        
        return 404;
    }
    

    这个配置做了以下几件事:

    • 将所有 HTTP 流量重定向到 HTTPS

    • 设置 SSL 证书

    • 将 HTTPS 请求代理到本地运行的服务 (127.0.0.1:5001)

  3. 保存文件并退出编辑器。

  4. 测试 Nginx 配置:

    sudo nginx -t
  5. 如试成功,重新加载 Nginx:

    sudo systemctl reload nginx

步骤 6: 防火墙设置

确保您的防火墙允许 HTTP (80) 和 HTTPS (443) 流量:

sudo ufw allow 'Nginx Full'

步骤 7: 验证

现在,您应该能够通过 https://api.rui-nnovation.cool 访问您的 Web 服务了。

Last updated