初始化仓库及v1.0.0提交
This commit is contained in:
208
docs/API.md
Normal file
208
docs/API.md
Normal file
@@ -0,0 +1,208 @@
|
||||
# API 文档
|
||||
|
||||
## 基础信息
|
||||
|
||||
- 基础 URL:`/api`
|
||||
- 响应格式:JSON
|
||||
- 认证方式:JWT Bearer Token(Authorization 头)
|
||||
|
||||
### 统一响应格式
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {},
|
||||
"message": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
## 认证 API
|
||||
|
||||
### POST /auth/login
|
||||
用户登录,获取 JWT 令牌。
|
||||
|
||||
**请求体:**
|
||||
```json
|
||||
{
|
||||
"username": "admin",
|
||||
"password": "123456"
|
||||
}
|
||||
```
|
||||
|
||||
**成功响应:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
|
||||
"user": {
|
||||
"id": 1,
|
||||
"username": "admin",
|
||||
"role": "admin"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### GET /auth/me
|
||||
获取当前用户信息。(需认证)
|
||||
|
||||
**响应:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"id": 1,
|
||||
"username": "admin",
|
||||
"role": "admin"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 会话 API
|
||||
|
||||
### GET /sessions
|
||||
获取当前用户的会话列表。(需认证)
|
||||
|
||||
**响应:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": [
|
||||
{
|
||||
"id": 1,
|
||||
"user_id": 1,
|
||||
"name": "新会话",
|
||||
"provider": "newapi",
|
||||
"model": "gpt-3.5-turbo",
|
||||
"system_prompt": "",
|
||||
"personality_id": null,
|
||||
"thinking_mode": 0,
|
||||
"created_at": "2024-01-01 00:00:00",
|
||||
"updated_at": "2024-01-01 00:00:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### POST /sessions
|
||||
创建新会话。(需认证)
|
||||
|
||||
**请求体:**
|
||||
```json
|
||||
{
|
||||
"name": "新对话",
|
||||
"provider": "newapi",
|
||||
"model": "gpt-3.5-turbo",
|
||||
"system_prompt": "",
|
||||
"thinking_mode": false
|
||||
}
|
||||
```
|
||||
|
||||
### PUT /sessions/{id}
|
||||
更新会话。(需认证)
|
||||
|
||||
### DELETE /sessions/{id}
|
||||
删除会话。(需认证)
|
||||
|
||||
## 消息 API
|
||||
|
||||
### GET /sessions/{id}/messages
|
||||
获取指定会话的消息列表。(需认证)
|
||||
|
||||
### POST /sessions/{id}/messages
|
||||
保存消息到指定会话。(需认证)
|
||||
|
||||
**请求体:**
|
||||
```json
|
||||
{
|
||||
"role": "user",
|
||||
"content": "Hello!",
|
||||
"file_info": null,
|
||||
"thinking_content": null
|
||||
}
|
||||
```
|
||||
|
||||
## AI 对话 API
|
||||
|
||||
### POST /chat/completions
|
||||
AI 对话请求(SSE 流式响应)。(需认证)
|
||||
|
||||
**请求体:**
|
||||
```json
|
||||
{
|
||||
"provider": "newapi",
|
||||
"model": "gpt-3.5-turbo",
|
||||
"messages": [
|
||||
{"role": "user", "content": "Hello!"}
|
||||
],
|
||||
"stream": true,
|
||||
"systemPrompt": "",
|
||||
"thinkingMode": false
|
||||
}
|
||||
```
|
||||
|
||||
**SSE 响应格式:**
|
||||
```
|
||||
data: {"content":"Hello"}
|
||||
|
||||
data: {"content":"!"}
|
||||
|
||||
data: {"thinking":"Let me think..."}
|
||||
|
||||
data: [DONE]
|
||||
```
|
||||
|
||||
## 文件上传 API
|
||||
|
||||
### POST /upload
|
||||
上传文件。(需认证,multipart/form-data)
|
||||
|
||||
**支持格式:** jpg, jpeg, png, gif, webp, js, ts, py, java, cpp, c, html, css, json, xml, txt, md, go, rs, php, rb, sql, yaml, yml, sh, bat
|
||||
**大小限制:** 10MB
|
||||
|
||||
**响应:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"url": "/uploads/xxx.jpg",
|
||||
"name": "原始文件名.jpg",
|
||||
"size": 1024,
|
||||
"type": "jpg"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 配置 API
|
||||
|
||||
### GET /config
|
||||
获取系统配置。(需认证)
|
||||
|
||||
### PUT /config
|
||||
更新系统配置。(需认证 + 管理员)
|
||||
|
||||
## 人格 API
|
||||
|
||||
### GET /personalities
|
||||
获取人格列表。(需认证)
|
||||
|
||||
### POST /personalities
|
||||
创建人格。(需认证 + 管理员)
|
||||
|
||||
### PUT /personalities/{id}
|
||||
更新人格。(需认证 + 管理员)
|
||||
|
||||
### DELETE /personalities/{id}
|
||||
删除人格。(需认证 + 管理员)
|
||||
|
||||
## 安装 API
|
||||
|
||||
### GET /install/status
|
||||
检查安装状态。(无需认证)
|
||||
|
||||
### POST /install/test-db
|
||||
测试数据库连接。(无需认证)
|
||||
|
||||
### POST /install/setup
|
||||
执行安装。(无需认证)
|
||||
138
docs/ARCHITECTURE.md
Normal file
138
docs/ARCHITECTURE.md
Normal file
@@ -0,0 +1,138 @@
|
||||
# 架构说明
|
||||
|
||||
## 技术架构
|
||||
|
||||
本项目采用 PHP 8.0 原生 MVC 架构,不使用任何 PHP 框架。
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────┐
|
||||
│ Nginx │
|
||||
│ (Web 服务器 + 反向代理) │
|
||||
└──────────┬───────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────────────────────────────────┐
|
||||
│ public/ │
|
||||
│ (Web 根目录, 入口文件) │
|
||||
│ api.php, login.php, chat.php, config.php │
|
||||
└──────────┬───────────────────────────────────┘
|
||||
│
|
||||
┌─────┴─────┐
|
||||
│ │
|
||||
▼ ▼
|
||||
┌─────────┐ ┌──────────────────────────────┐
|
||||
│ PHP 页面 │ │ API (api.php) │
|
||||
│ (视图) │ │ 路由分发 + 中间件处理 │
|
||||
└────┬────┘ └──────┬───────────────────────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
┌──────────────────────────────────────────────┐
|
||||
│ Controllers │
|
||||
│ AuthController, ChatController, │
|
||||
│ SessionController, MessageController, │
|
||||
│ ConfigController, InstallController, │
|
||||
│ UploadController │
|
||||
└──────────┬───────────────────────────────────┘
|
||||
│
|
||||
┌─────┼─────────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌───────┐ ┌───────┐ ┌──────────────────────┐
|
||||
│Models │ │Services│ │ Middleware │
|
||||
│(数据) │ │(业务) │ │ Auth/Admin │
|
||||
└───┬───┘ └───┬───┘ └──────────────────────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
┌────────┐ ┌─────────────────┐
|
||||
│ MySQL │ │ AI Providers │
|
||||
│(PDO) │ │ OpenAI/Claude/ │
|
||||
│ │ │ NewAPI │
|
||||
└────────┘ └─────────────────┘
|
||||
```
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
ai-chat/
|
||||
├── public/ # Web 根目录
|
||||
│ ├── api.php # API 统一入口(路由分发)
|
||||
│ ├── login.php # 登录页面
|
||||
│ ├── chat.php # 聊天主页面
|
||||
│ ├── config.php # 配置管理页面
|
||||
│ └── install.php # 安装向导页面
|
||||
├── app/ # 应用代码(命名空间 App\)
|
||||
│ ├── Config/ # 配置类
|
||||
│ │ ├── Database.php # 数据库连接(单例 PDO)
|
||||
│ │ └── AppConfig.php # 应用配置读写
|
||||
│ ├── Controllers/ # 控制器
|
||||
│ │ ├── AuthController.php
|
||||
│ │ ├── ChatController.php
|
||||
│ │ ├── SessionController.php
|
||||
│ │ ├── MessageController.php
|
||||
│ │ ├── ConfigController.php
|
||||
│ │ ├── InstallController.php
|
||||
│ │ └── UploadController.php
|
||||
│ ├── Middleware/ # 中间件
|
||||
│ │ ├── AuthMiddleware.php # JWT 认证
|
||||
│ │ └── AdminMiddleware.php # 管理员权限
|
||||
│ ├── Models/ # 数据模型
|
||||
│ │ ├── User.php
|
||||
│ │ ├── Session.php
|
||||
│ │ ├── Message.php
|
||||
│ │ ├── Config.php
|
||||
│ │ └── Personality.php
|
||||
│ ├── Services/ # 服务层
|
||||
│ │ ├── AIService.php # AI 服务路由
|
||||
│ │ ├── Installer.php # 安装迁移服务
|
||||
│ │ └── Providers/ # AI 供应商
|
||||
│ │ ├── OpenAIProvider.php
|
||||
│ │ ├── ClaudeProvider.php
|
||||
│ │ └── NewAPIProvider.php
|
||||
│ └── Views/ # 视图模板
|
||||
│ ├── login.php
|
||||
│ ├── chat.php
|
||||
│ ├── config.php
|
||||
│ └── layout/
|
||||
│ ├── header.php
|
||||
│ └── footer.php
|
||||
├── assets/ # 前端静态资源
|
||||
│ ├── css/ # 样式
|
||||
│ │ ├── style.css # 全局样式
|
||||
│ │ ├── chat.css # 聊天界面样式
|
||||
│ │ └── markdown.css # Markdown 渲染样式
|
||||
│ ├── js/ # JavaScript
|
||||
│ │ ├── api.js # API 调用封装
|
||||
│ │ ├── chat.js # 聊天核心功能
|
||||
│ │ ├── session.js # 会话管理
|
||||
│ │ ├── upload.js # 文件上传
|
||||
│ │ ├── markdown.js # Markdown 渲染
|
||||
│ │ └── storage.js # 本地存储
|
||||
│ └── img/ # 图片
|
||||
├── config/ # JSON 配置文件
|
||||
├── uploads/ # 用户上传文件
|
||||
├── docs/ # 文档
|
||||
└── composer.json # Composer 配置
|
||||
```
|
||||
|
||||
## 请求流程
|
||||
|
||||
### API 请求流程
|
||||
1. 客户端发送 HTTP 请求到 `/api/*`
|
||||
2. Nginx 将请求转发到 `public/api.php`
|
||||
3. api.php 解析路由,执行对应的中间件和控制器
|
||||
4. 控制器调用模型/服务层处理业务逻辑
|
||||
5. 返回 JSON 响应
|
||||
|
||||
### SSE 流式响应流程
|
||||
1. 客户端发送 POST 请求到 `/api/chat/completions`
|
||||
2. ChatController 设置 SSE 响应头
|
||||
3. AIService 通过 cURL 连接 AI 供应商 API
|
||||
4. 使用 CURLOPT_WRITEFUNCTION 回调逐块接收 AI 响应
|
||||
5. 每块数据通过 SSE 格式发送给客户端
|
||||
6. AI 响应完成后发送 `[DONE]` 信号
|
||||
|
||||
### 页面请求流程
|
||||
1. 客户端访问 PHP 页面(如 `/chat.php`)
|
||||
2. Nginx 通过 PHP-FPM 执行 PHP 文件
|
||||
3. PHP 文件引入布局模板和视图
|
||||
4. 客户端通过 AJAX 加载数据
|
||||
71
docs/DEPLOY.md
Normal file
71
docs/DEPLOY.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# 部署指南
|
||||
|
||||
## 宝塔面板部署
|
||||
|
||||
### 1. 环境准备
|
||||
|
||||
在宝塔面板"软件商店"中安装:
|
||||
- Nginx 1.22+
|
||||
- PHP 8.0(在 PHP 设置中确保以下扩展已启用:pdo_mysql、curl、mbstring、json、openssl)
|
||||
- MySQL 5.7 或 8.0
|
||||
|
||||
### 2. 创建网站
|
||||
|
||||
1. 网站 → 添加站点
|
||||
2. 填写域名
|
||||
3. PHP 版本选择 **PHP 8.0**
|
||||
4. 数据库选择"不创建"
|
||||
|
||||
### 3. 部署代码
|
||||
|
||||
```bash
|
||||
cd /www/wwwroot/your-domain.com
|
||||
git clone <repository-url> .
|
||||
composer install
|
||||
```
|
||||
|
||||
### 4. 设置权限
|
||||
|
||||
```bash
|
||||
chmod -R 755 .
|
||||
chown -R www:www .
|
||||
```
|
||||
|
||||
### 5. 配置 Nginx
|
||||
|
||||
1. 站点设置 → 网站目录 → 运行目录改为 `/public`
|
||||
2. 站点设置 → 配置文件 → 添加 `docs/baota-nginx-snippet.conf` 中的配置
|
||||
|
||||
### 6. 运行安装向导
|
||||
|
||||
访问 `http://your-domain.com/install.php`
|
||||
|
||||
### 7. SSL 配置(可选)
|
||||
|
||||
站点设置 → SSL → Let's Encrypt → 申请证书
|
||||
|
||||
## 手动部署
|
||||
|
||||
### Nginx 配置
|
||||
|
||||
参考 `docs/nginx.conf` 文件,将 `root` 指向 `public/` 目录。
|
||||
|
||||
### PHP-FPM 配置
|
||||
|
||||
确保 PHP-FPM 监听 socket 配置正确(通常为 `/tmp/php-cgi-80.sock` 或 `127.0.0.1:9000`)。
|
||||
|
||||
### 目录权限
|
||||
|
||||
```bash
|
||||
chown -R www-data:www-data /path/to/ai-chat
|
||||
chmod 755 /path/to/ai-chat/uploads
|
||||
chmod 755 /path/to/ai-chat/config
|
||||
```
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. 配置 SSL 证书(HTTPS)
|
||||
2. 修改数据库默认端口
|
||||
3. 定期更新 PHP 和 Nginx 版本
|
||||
4. 限制 uploads 目录的执行权限
|
||||
5. 禁止访问 app/、config/、vendor/ 等非公开目录(已在 Nginx 配置中设置)
|
||||
35
docs/PERSONALITY.md
Normal file
35
docs/PERSONALITY.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# 人格系统说明
|
||||
|
||||
## 概述
|
||||
|
||||
人格系统允许用户选择不同的 AI 角色,每个角色有特定的系统提示词,从而影响 AI 的回答风格和专业领域。
|
||||
|
||||
## 预设人格
|
||||
|
||||
系统安装后自动创建以下 5 个预设人格:
|
||||
|
||||
| 名称 | 图标 | 说明 |
|
||||
|------|------|------|
|
||||
| 智能助手 | 🤖 | 全能智能助手,善于回答各种问题 |
|
||||
| 代码专家 | 💻 | 专业编程专家,精通多种语言和框架 |
|
||||
| 翻译官 | 🌐 | 多语言翻译专家 |
|
||||
| 写作助手 | ✍️ | 专业写作助手,擅长各类文体 |
|
||||
| 数学家 | 🔢 | 数学专家,善于解答数学问题 |
|
||||
|
||||
预设人格不可编辑和删除。
|
||||
|
||||
## 自定义人格
|
||||
|
||||
管理员可以在配置页面(`/config.php`)创建自定义人格:
|
||||
|
||||
- **名称**:人格的显示名称
|
||||
- **图标**:Emoji 图标
|
||||
- **提示词**:系统提示词(定义 AI 的角色和行为)
|
||||
- **描述**:简短描述
|
||||
|
||||
## 技术实现
|
||||
|
||||
- 人格数据存储在 `personalities` 数据表中
|
||||
- 预设人格 `is_preset = 1`,自定义人格 `is_preset = 0`
|
||||
- 选择人格后,其 `prompt` 字段作为 `system_prompt` 传递给 AI API
|
||||
- 人格 API 路径:`/api/personalities`
|
||||
86
docs/baota-nginx-snippet.conf
Normal file
86
docs/baota-nginx-snippet.conf
Normal file
@@ -0,0 +1,86 @@
|
||||
# ============================================================
|
||||
# AI Chat 宝塔面板 Nginx 配置片段(PHP-FPM 版本)
|
||||
# ============================================================
|
||||
#
|
||||
# 【使用说明】
|
||||
# 1. 本文件为宝塔面板专用的 Nginx 配置片段,不是完整的站点配置文件。
|
||||
# 2. 使用步骤:
|
||||
# a. 在宝塔面板中创建网站,PHP 版本选择 PHP 8.0
|
||||
# b. 将网站根目录指向 /path/to/ai-chat/public
|
||||
# c. 登录宝塔面板 → 网站 → 找到你的站点 → 点击"设置"
|
||||
# d. 在左侧菜单选择"配置文件"
|
||||
# e. 将下方"配置内容开始"到"配置内容结束"之间的内容,
|
||||
# 复制并粘贴到 server { } 块内(注意不要重复嵌套 server 块)
|
||||
# f. 保存即可生效
|
||||
# 3. 前置准备:
|
||||
# - 在宝塔面板中安装 PHP 8.0 并启用
|
||||
# - 安装 MySQL 5.7+ 或 8.0
|
||||
# - 安装 Composer
|
||||
# - 运行 composer install 安装 PHP 依赖
|
||||
#
|
||||
# ============================================================
|
||||
|
||||
# ↓↓↓ 配置内容开始 ↓↓↓
|
||||
|
||||
# === AI Chat 网站配置(PHP-FPM) ===
|
||||
|
||||
# 1. 默认路由
|
||||
location / {
|
||||
try_files $uri $uri/ /login.php;
|
||||
}
|
||||
|
||||
# 2. API 路由 - 转发到 api.php
|
||||
location /api/ {
|
||||
try_files $uri /api.php$is_args$args;
|
||||
fastcgi_pass unix:/tmp/php-cgi-80.sock;
|
||||
fastcgi_index index.php;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root/api.php;
|
||||
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||
fastcgi_param REQUEST_URI $request_uri;
|
||||
}
|
||||
|
||||
# 3. SSE 流式响应特殊配置(AI对话需要)
|
||||
# 针对 Chat API 的 SSE(Server-Sent Events)流式响应,
|
||||
# 需要禁用所有缓冲以确保实时输出
|
||||
location /api/chat/completions {
|
||||
fastcgi_pass unix:/tmp/php-cgi-80.sock;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root/api.php;
|
||||
fastcgi_param REQUEST_URI $request_uri;
|
||||
# SSE 关键配置
|
||||
fastcgi_buffering off;
|
||||
proxy_buffering off;
|
||||
add_header X-Accel-Buffering no;
|
||||
# 超时设置(5分钟)
|
||||
fastcgi_read_timeout 300s;
|
||||
}
|
||||
|
||||
# 4. 静态资源缓存
|
||||
location /assets/ {
|
||||
expires 30d;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
|
||||
# 5. 上传文件访问
|
||||
location /uploads/ {
|
||||
expires 7d;
|
||||
add_header Cache-Control "public";
|
||||
}
|
||||
|
||||
# 6. 禁止访问非公开目录(安全)
|
||||
location ~ /(app|config|vendor|tests|scripts|)/ {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
|
||||
# 7. 禁止访问隐藏文件
|
||||
location ~ /\. {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
|
||||
# 8. 上传文件大小限制
|
||||
client_max_body_size 10m;
|
||||
|
||||
# ↑↑↑ 配置内容结束 ↑↑↑
|
||||
110
docs/nginx.conf
Normal file
110
docs/nginx.conf
Normal file
@@ -0,0 +1,110 @@
|
||||
# AI Chat 应用 Nginx 配置(PHP-FPM 版本)
|
||||
# 将此文件复制到 /etc/nginx/sites-available/ 并创建软链接到 sites-enabled/
|
||||
#
|
||||
# 注意:本文件为完整的 Nginx 站点配置,适用于直接部署到 Nginx + PHP-FPM 的场景。
|
||||
# 如果你使用宝塔面板管理服务器,请参考 baota-nginx-snippet.conf 文件中的配置片段。
|
||||
#
|
||||
# 前置条件:
|
||||
# - PHP 8.0+ 已安装并启用 PHP-FPM
|
||||
# - MySQL 5.7+ 已安装
|
||||
# - Composer 已安装
|
||||
# - 项目已部署到 /path/to/ai-chat/ 目录
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name your-domain.com;
|
||||
|
||||
# 网站根目录指向 public/
|
||||
root /path/to/ai-chat/public;
|
||||
index index.php login.php install.php;
|
||||
|
||||
# 安全 Headers
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
||||
|
||||
# Gzip 压缩
|
||||
gzip on;
|
||||
gzip_vary on;
|
||||
gzip_proxied any;
|
||||
gzip_comp_level 6;
|
||||
gzip_min_length 256;
|
||||
gzip_types
|
||||
text/plain
|
||||
text/css
|
||||
text/javascript
|
||||
application/javascript
|
||||
application/json
|
||||
application/xml
|
||||
image/svg+xml;
|
||||
|
||||
# 默认路由 - PHP 文件
|
||||
location / {
|
||||
try_files $uri $uri/ /login.php;
|
||||
}
|
||||
|
||||
# API 路由 - 所有 /api/ 请求转发到 api.php
|
||||
location /api/ {
|
||||
try_files $uri /api.php$is_args$args;
|
||||
fastcgi_pass unix:/tmp/php-cgi-80.sock;
|
||||
fastcgi_index index.php;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root/api.php;
|
||||
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||
fastcgi_param REQUEST_URI $request_uri;
|
||||
}
|
||||
|
||||
# SSE 流式响应专用配置(AI对话 API)
|
||||
location /api/chat/completions {
|
||||
fastcgi_pass unix:/tmp/php-cgi-80.sock;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root/api.php;
|
||||
fastcgi_param REQUEST_URI $request_uri;
|
||||
# SSE 关键配置:禁用所有缓冲
|
||||
fastcgi_buffering off;
|
||||
fastcgi_cache off;
|
||||
proxy_buffering off;
|
||||
# 禁用 Nginx 缓冲
|
||||
add_header X-Accel-Buffering no;
|
||||
# SSE 超时设置(5分钟)
|
||||
fastcgi_read_timeout 300s;
|
||||
}
|
||||
|
||||
# 静态资源直接服务
|
||||
location /assets/ {
|
||||
alias /path/to/ai-chat/assets/;
|
||||
expires 30d;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
|
||||
# 上传文件直接服务
|
||||
location /uploads/ {
|
||||
alias /path/to/ai-chat/uploads/;
|
||||
expires 7d;
|
||||
add_header Cache-Control "public";
|
||||
}
|
||||
|
||||
# PHP 文件处理
|
||||
location ~ \.php$ {
|
||||
fastcgi_pass unix:/tmp/php-cgi-80.sock;
|
||||
fastcgi_index index.php;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
}
|
||||
|
||||
# 禁止访问非公开目录
|
||||
location ~ /(app|config|vendor|tests|scripts|\.cospec)/ {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
|
||||
# 禁止访问隐藏文件
|
||||
location ~ /\. {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
|
||||
# 上传文件大小限制
|
||||
client_max_body_size 10m;
|
||||
}
|
||||
Reference in New Issue
Block a user