{"msg":"操作成功","code":200,"data":{"createBy":"admin","createTime":"2025-07-01 10:58:30","updateBy":"admin","updateTime":"2025-08-15 10:21:45","remark":null,"id":117,"articleTitle":"Nginx（八）常见错误响应码","articleUrl":"nginx_error_code","articleThumbnail":"https://www.asumimoe.com/imgfiles/20250618/4b57c2e46f8949e5a30d4e2e9e8a8fd5.png","articleFlag":"0","draftStatus":"1","reprintStatement":"0","articleSummary":"Nginx 在处理请求时可能会返回各种 HTTP 状态码，其中一些状态码可能表明存在问题。以下是一些常见的 Nginx 错误码及其解决方法。","articleContent":"Nginx 在处理请求时可能会返回各种 HTTP 状态码，其中一些状态码可能表明存在问题。以下是一些常见的 Nginx 错误码及其解决方法：\n\n### 1. **403 Forbidden（禁止访问）**\n\n- **原因**：通常是由于权限设置不当导致的，例如文件或目录权限不允许 Nginx 访问。\n\n- **解决方法**：\n\n  - 检查文件和目录的权限，确保 Nginx 用户有权读取这些资源。\n\n    ```bash\n    sudo chown -R nginx:nginx /path/to/your/site # 根据你的配置调整用户组\n    sudo chmod -R 755 /path/to/your/site\n    ```\n\n  - 确认 Nginx 配置中 `root` 或 `alias` 路径正确无误。\n\n### 2. **404 Not Found（未找到）**\n\n- **原因**：请求的资源在服务器上不存在。\n\n- **解决方法**：\n\n  - 确保请求的 URL 正确，并且对应的文件存在于指定路径下。\n\n  - 如果是重写规则问题，检查 `try_files` 或 `rewrite` 指令是否正确配置。\n\n    ```nginx\n    location / {\n        try_files $uri $uri/ =404;\n    }\n    ```\n\n  - 如果是location路径代理的方式，要检查路径后的斜杠是否正确（确认是否应该添加斜杠）。部分项目中的静态资源可能由于路径代理方式导致无法访问。\n\n    ```nginx\n    location /reader/ {\n        proxy_pass http://192.168.10.10/reader/;\n    }\n    ```\n\n### 3. **500 Internal Server Error（内部服务器错误）**\n\n- **原因**：这通常表示服务器遇到意外情况，阻止其完成请求。常见原因包括脚本错误、权限问题或配置错误。\n- **解决方法**：\n  - 查看 Nginx 和应用日志（如 `/var/log/nginx/error.log`），寻找具体错误信息。\n  - 检查 PHP 或其他后端服务的配置和运行状态。\n  - 确保所有必要的模块都已加载并且没有语法错误。\n\n### 4. **502 Bad Gateway（错误网关）**\n\n- **原因**：当 Nginx 作为反向代理时，无法从上游服务器（如 PHP-FPM, Node.js 应用等）获得有效响应。Nginx 已经与上游服务器建立了连接，并发送了请求。上游服务器处理了请求并开始发送响应，但这个响应在传输过程中损坏、格式错误、或者上游服务器在处理过程中意外崩溃/关闭了连接。\n\n- **解决方法**：\n\n  - 检查上游服务器是否正常运行。\n\n  - 增加超时时间或调整缓冲区大小。\n\n    ```nginx\n    proxy_connect_timeout 60s;\n    proxy_read_timeout 60s;\n    proxy_buffer_size 128k;\n    proxy_buffers 4 256k;\n    proxy_busy_buffers_size 256k;\n    ```\n\n### 5. **503 Service Unavailable（服务不可用）**\n\n- **原因**：临时过载或者维护期间返回此状态码。\n\n- **解决方法**：\n\n  - 如果是因为过载，考虑增加服务器资源或优化性能。\n\n  - 如果是在计划维护期间，可以使用自定义页面通知用户。\n\n    ```nginx\n    error_page 503 /maintenance.html;\n    location = /maintenance.html {\n        root /usr/share/nginx/html;\n        internal;\n    }\n    ```\n\n### 6. **504 Gateway Timeout（网关超时）**\n\n- **原因**：Nginx 作为反向代理时，未能及时从上游服务器获取响应。Nginx 成功连接到上游服务器并发送了请求，但在 Nginx 配置的 `proxy_read_timeout`（或其他相关超时设置）时间内，**上游服务器没有返回完整的响应头**（更不用说响应体了）。\n\n- **解决方法**：\n\n  - 增加 `proxy_read_timeout` 的值以允许更长的等待时间（默认为60秒）。\n\n    ```nginx\n    proxy_read_timeout 300; #单位：秒\n    ```\n\n  - 检查上游服务器的性能瓶颈并进行优化。\n\n### 7. **499 Client Closed Request（客户端关闭请求）**\n\n- **原因**：客户端在 Nginx 完成响应之前主动断开了连接。\n- **解决方法**：\n  - 这个状态码通常不需要特别处理，除非它频繁出现，此时应调查前端负载均衡器或客户端行为。\n\n### 8. **413 Request Entity Too Large（请求实体过大）**\n\n- **原因**：客户端发送的数据超过了服务器允许的最大限制。\n\n- **解决方法**：\n\n  - 增加 `client_max_body_size` 的值来允许更大的上传文件大小。\n\n    ```nginx\n    client_max_body_size 50M; # 默认为1M。值为0时表示不做限制，单位支持：1k, 1K, 1m, 1M（不区分大小写）\n    ```\n\n  - 此配置放在`http`、`server`、`location`这三个模块下均可，对应不同的业务要求，属于继承关系。优先级由低到高排列，`location`块下最高，`http`块下最低。\n\n### 9. **429 Too Many Requests（请求过多）**\n\n- **原因**：通常与限流有关，当用户在短时间内发出过多请求时触发。\n\n- **解决方法**：\n\n  - 如果这是预期的行为，确保你的限流配置符合业务需求。\n\n    ```nginx\n    limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;\n    server {\n        location / {\n            limit_req zone=one burst=10 nodelay;\n        }\n    }\n    ```\n\n  - 如果是误报，调整或禁用相关限流规则。\n\n### 10. **507 Insufficient Storage（存储空间不足）**\n\n- **原因**：通常发生在 WebDAV 等支持文件上传的服务中，表示服务器没有足够的磁盘空间保存上传的文件。\n- **解决方法**：\n  - 清理磁盘空间或增加存储容量。\n\n### 11. **508 Loop Detected（检测到循环）**\n\n- **原因**：通常由重写规则导致的无限循环引起。\n\n- **解决方法**：\n\n  - 检查并修正任何可能导致循环重写的规则。\n\n    ```nginx\n    rewrite ^/oldpath/(.*)$ /newpath/$1 break; # 注意使用 'break' 来避免潜在的循环\n    ```\n\n### 12. **405 Method Not Allowed（不允许的方法）**\n\n- **原因**：请求使用了不允许的 HTTP 方法（例如尝试对一个只接受 GET 请求的资源使用 POST）。\n\n- **解决方法**：\n\n  - 确认你的应用确实支持所使用的 HTTP 方法，并在 Nginx 配置中明确允许这些方法。\n\n    ```nginx\n    location /api/ {\n        if ($request_method !~ ^(GET|POST)$ ) {\n            return 405;\n        }\n        # 其他配置...\n    }\n    ```\n\n### 13. **501 Not Implemented（未实现）**\n\n- **原因**：服务器不支持请求行中指定的 HTTP 方法。\n- **解决方法**：\n  - 同上，检查是否正确配置了支持的 HTTP 方法。\n\n### 14. **408 Request Timeout（请求超时）**\n\n- **原因**：客户端没有在规定时间内发送完整的请求。\n\n- **解决方法**：\n\n  - 调整 `client_body_timeout` 和 `client_header_timeout` 参数以延长等待时间。\n\n    ```nginx\n    client_body_timeout 120s;\n    client_header_timeout 120s;\n    ```\n\n### 15. **414 URI Too Long（URI 过长）**\n\n- **原因**：请求的 URI 太长。\n\n- **解决方法**：\n\n  - 缩短 URI 或调整 `large_client_header_buffers` 参数。\n\n    ```nginx\n    large_client_header_buffers 4 16k;\n    ```\n\n### 16. **431 Request Header Fields Too Large（请求头字段太大）**\n\n- **原因**：请求头字段过大。\n\n- **解决方法**：\n\n  - 减少请求头字段的大小或增加 `large_client_header_buffers` 参数值。\n\n    ```nginx\n    large_client_header_buffers 4 16k;\n    ```\n\n","categoryId":12,"viewCount":208,"categoryName":"Nginx","author":"球接子","authorAvatar":null,"tagIds":[13,14],"tagNames":["Nginx","中间件"]}}