Nginx 常见问题总结与解决

Nginx 常见问题总结与解决


1. 配置错误

  • 现象:Nginx无法启动/重载。
  • 原因:语法错误、路径错误。
  • 解决
    • 检查语法:nginx -t

    • 查看错误日志:tail -f /var/log/nginx/error.log

    • 路径问题 :区分rootalias

      nginx 复制代码
      location /static/ {
          alias /data/www/static/; # 请求/static/img.png → /data/www/static/img.png
      }
      location /assets/ {
          root /data/www/; # 请求/assets/img.png → /data/www/assets/img.png
      }

2. 性能优化

  • 现象:高并发下连接超限或响应慢。
  • 解决
    • 调整nginx.conf参数:

      nginx 复制代码
      worker_processes auto; # 与CPU核心数一致
      events {
          worker_connections 10240; # 单进程最大连接数
      }
      http {
          keepalive_timeout 65;
          keepalive_requests 1000;
      }
    • 修改系统文件描述符限制:

      bash 复制代码
      ulimit -n 65535  # 临时生效
      # 永久生效:编辑/etc/security/limits.conf,添加:
      # * soft nofile 65535
      # * hard nofile 65535

3. 权限问题

  • 现象:403 Forbidden。
  • 解决
    • 检查文件权限:

      bash 复制代码
      chmod -R 755 /data/www;
      chown -R www-data:www-data /data/www;
    • 禁用SELinux(临时):

      bash 复制代码
      setenforce 0  # 或修改/etc/selinux/config永久关闭

4. SSL证书问题

  • 现象:浏览器提示证书错误。
  • 解决
    • 确保证书链完整(合并中间证书):

      bash 复制代码
      cat domain.crt intermediate.crt > fullchain.crt
    • 配置SSL协议与加密套件:

      nginx 复制代码
      ssl_protocols TLSv1.2 TLSv1.3;
      ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;

5. 反向代理问题

  • 现象:后端无法获取真实IP或超时。
  • 解决
    • 传递必要请求头:

      nginx 复制代码
      location / {
          proxy_pass http://backend;
          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_connect_timeout 60s;
          proxy_read_timeout 60s;
      }

6. 负载均衡配置

  • 现象:后端服务宕机未剔除。
  • 解决
    • 配置健康检查:

      nginx 复制代码
      upstream backend {
          server 10.0.0.1:80 max_fails=3 fail_timeout=30s;
          server 10.0.0.2:80;
          least_conn; # 可选策略:轮询(默认)、weight、ip_hash等
      }

7. 静态文件服务

  • 现象:静态资源404或SPA路由失效。
  • 解决
    • 使用try_files处理前端路由:

      nginx 复制代码
      location / {
          root /data/www;
          try_files $uri $uri/ /index.html;
      }

8. 重写规则

  • 现象:重定向循环或URL未生效。
  • 解决
    • HTTP强制跳转HTTPS:

      nginx 复制代码
      server {
          listen 80;
          server_name example.com;
          return 301 https://$host$request_uri;
      }

9. 跨域问题(CORS)

  • 现象:前端请求跨域被拦截。
  • 解决
    • 添加响应头:

      nginx 复制代码
      location /api/ {
          add_header 'Access-Control-Allow-Origin' '*';
          add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
      }

10. WebSocket支持

  • 现象:WebSocket连接失败。
  • 解决
    • 配置代理头:

      nginx 复制代码
      location /ws/ {
          proxy_pass http://backend;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
      }

11. 安全加固

  • 现象:服务器信息泄露。
  • 解决
    • 隐藏Nginx版本:

      nginx 复制代码
      server_tokens off;
    • 添加安全头:

      nginx 复制代码
      add_header X-Frame-Options DENY;
      add_header X-Content-Type-Options nosniff;

12. 日志管理

  • 现象:日志文件过大。
  • 解决
    • 使用logrotate配置轮转:

      bash 复制代码
      # /etc/logrotate.d/nginx
      /var/log/nginx/*.log {
          daily
          rotate 30
          compress
          missingok
          notifempty
          sharedscripts
          postrotate
              /usr/sbin/nginx -s reload
          endscript
      }

总结

遇到问题时,优先检查错误日志(error.log),结合nginx -t验证配置。复杂场景可通过分阶段调试(如逐步添加规则)定位问题根源。

相关推荐
java1234_小锋2 小时前
什么是WebSocket?NGINX如何支持WebSocket协议?
websocket·网络协议·nginx
Hello.Reader4 小时前
基于 Nginx 的 WebSocket 反向代理实践
运维·websocket·nginx
古月的三个锦囊11 小时前
Nginx openresty web服务 与 Go 原生web服务性能对比
nginx·go·openresty
异常君12 小时前
Nginx 架构深度剖析:多进程单线程模型与异步事件驱动
后端·nginx·架构
java1234_小锋13 小时前
什么是Lua模块?你会如何使用NGINX的Lua模块来定制请求处理流程?
开发语言·nginx·lua
我科绝伦(Huanhuan Zhou)14 小时前
Nginx性能优化:从配置到缓存,全面提升Web服务器性能
nginx·缓存·性能优化
郝开14 小时前
Nginx 配置参数全解版:Nginx 反向代理与负载均衡;Nginx 配置规范与 Header 透传实践指南;Nginx 配置参数详解
运维·nginx·负载均衡
fxshy1 天前
ai聊天流式响应,阻塞式和流式响应 nginx遇到的坑
运维·javascript·nginx
Sonetto19992 天前
Nginx 反向代理,啥是“反向代理“啊,为啥叫“反向“代理?而不叫“正向”代理?它能干哈?
运维·前端·nginx