Skip to content

以下是根据你提供的内容整理的常用配置文档,可直接作为日常参考。

markdown
# Web 部署常用配置速查

## 一、Nginx 配置

### 1. 接口反向代理(带 CORS)

将以 `/api/` 开头的请求转发到后端服务 `http://127.0.0.1:8080/`,并处理跨域。

```nginx
location /api/ {
    # 向后端传递客户端信息
    proxy_set_header Host              $http_host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;

    # 跨域设置
    add_header 'Access-Control-Allow-Origin'      '*' always;
    add_header 'Access-Control-Allow-Credentials' 'true' always;
    add_header 'Access-Control-Allow-Methods'     'GET, POST, PATCH, DELETE, PUT, OPTIONS' always;
    add_header 'Access-Control-Allow-Headers'     '*' always;

    # 预检请求直接返回 204
    if ($request_method = 'OPTIONS') {
        return 204;
    }

    proxy_pass http://127.0.0.1:8080/;   # 末尾的 / 会去掉 /api 前缀
}

注意:生产环境应将 Access-Control-Allow-Origin 改为具体域名,且不能与 Credentials:true 同时使用通配符 *


2. 静态文件服务(alias 方式)

/static/ 开头的请求映射到指定目录下的同名文件,并设置长期缓存。

nginx
location /static/ {
    alias /www/sites/47.109.150.208/index/static/;   # 必须保留末尾 /
    expires 30d;
    add_header Cache-Control "public";

    # gzip 压缩(可选)
    gzip on;
    gzip_types text/plain application/javascript text/css application/json;
    gzip_min_length 256;
}

3. SPA 单页应用回退

对于非接口和非静态资源的请求,全部回退到 index.html,由前端路由接管。

nginx
location / {
    try_files $uri $uri/ /index.html;
}

提醒:该 location / 必须写在最后,且确保 index.html 存在于 root 指定的目录中。


4. 完整 Server 块示例

nginx
server {
    listen 80;
    server_name your-domain.com;
    root /www/sites/your-project/dist;

    # 接口代理
    location /api/ {
        proxy_set_header Host              $http_host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        add_header 'Access-Control-Allow-Origin'      '*' always;
        add_header 'Access-Control-Allow-Credentials' 'true' always;
        add_header 'Access-Control-Allow-Methods'     'GET, POST, PATCH, DELETE, PUT, OPTIONS' always;
        add_header 'Access-Control-Allow-Headers'     '*' always;
        if ($request_method = 'OPTIONS') {
            return 204;
        }
        proxy_pass http://127.0.0.1:8080/;
    }

    # 静态资源
    location /static/ {
        alias /www/sites/your-project/dist/static/;
        expires 30d;
        add_header Cache-Control "public";
    }

    # SPA 回退
    location / {
        try_files $uri $uri/ /index.html;
    }
}

二、MySQL 8 用户与权限

创建用户并授权

sql
-- 创建用户(限制连接来源 IP 网段)
CREATE USER 'appadmin'@'172.19.0.%' IDENTIFIED BY 'YourStrongPassword123!';

-- 授予指定数据库的全部权限
GRANT ALL PRIVILEGES ON healthy_congee.* TO 'appadmin'@'172.19.0.%';

-- 刷新权限(通常不需要,但无妨)
FLUSH PRIVILEGES;

常见补充操作

  • 指定旧版认证插件(兼容老客户端):

    sql
    CREATE USER 'appadmin'@'172.19.0.%' IDENTIFIED WITH mysql_native_password BY 'password';
  • 最小权限示例(仅增删改查):

    sql
    GRANT SELECT, INSERT, UPDATE, DELETE ON healthy_congee.* TO 'appadmin'@'172.19.0.%';
  • 修改密码

    sql
    ALTER USER 'appadmin'@'172.19.0.%' IDENTIFIED BY 'NewPassword456!';
  • 删除用户

    sql
    DROP USER 'appadmin'@'172.19.0.%';

三、建议与备忘

  1. HTTPS:生产环境务必配置 SSL,可使用 certbot + Let's Encrypt 免费证书。
  2. 接口安全:API 仅允许必要方法(如 GET、POST),在 Nginx 中可用 limit_except 或后端控制。
  3. 日志:为每个 location 单独配置访问日志,方便排查问题。
  4. MySQL 连接:应用使用有限权限用户,避免 root 直连;密码配置在环境变量中。

此文档提炼了你提供的核心配置,去除了冗余分析,补充了常见操作和注意事项,方便日常复制使用。
/src/technology/dateblog/2026/05/20260507-%E9%83%A8%E7%BD%B2%E5%A4%87%E5%BF%98.html