Nginx日志中常见错误解析及解决方法
含义:客户端请求的资源在服务器上不存在,是Nginx最常见的错误之一。
常见原因:
/example.html误写为/exmaple.html);root指令未指向正确站点根目录、location块匹配规则不当);rewrite指令导致路径跳转异常)。root指令指定的路径)是否存在请求的文件,可通过ls -l /path/to/site命令验证;root指令(如server块下的root /var/www/html;)和location块(如try_files $uri $uri/ =404;)配置是否正确;www-data或nginx)对站点文件有读取权限(chown -R www-data:www-data /var/www/html; chmod -R 755 /var/www/html;);rewrite规则,暂时注释掉规则测试是否仍报错,或启用重写日志(rewrite_log on;)查看具体跳转过程。含义:服务器处理请求时遇到意外情况,无法完成请求,是最通用的服务器错误。
常见原因:
server_name拼写错误、listen端口格式错误);nginx -t命令,若有错误会提示具体行号,根据提示修正后重载配置(systemctl reload nginx);/var/log/php-fpm.log;若使用Node.js,检查应用自身的日志文件,定位具体错误;chown -R www-data:www-data /var/www/php-site; chmod -R 755 /var/www/php-site);df -h查看磁盘空间(若Use%为100%,需清理日志或临时文件)、ulimit -n查看打开文件描述符限制(若过小,可在/etc/security/limits.conf中增加www-data hard nofile 65535并重启Nginx);含义:502表示Nginx作为反向代理时,从后端服务器接收到无效响应(如后端服务未运行);503表示后端服务器暂时无法处理请求(如过载、维护)。
常见原因:
systemctl status php-fpm(PHP)、systemctl status tomcat(Java)等命令,若未运行则启动服务(systemctl start php-fpm);/var/log/php-fpm.log),定位崩溃或报错原因;ping backend-server-ip测试网络是否可达,telnet backend-server-ip 80测试端口是否开放;location块中增加fastcgi_read_timeout 300;(PHP)或proxy_read_timeout 300;(通用代理),延长等待后端响应的时间;upstream模块配置多台后端服务器)。含义:Nginx作为反向代理时,后端服务器在指定时间内未响应请求(超时)。
常见原因:
proxy_read_timeout、fastcgi_read_timeout设置过小);location块中增加proxy_read_timeout 300;(代理超时)、proxy_send_timeout 300;(发送超时),根据后端处理时间适当调整(如300秒);含义:服务器理解请求,但拒绝执行,通常与权限或配置有关。
常见原因:
deny指令限制了访问(如deny all;);chown -R www-data:www-data /var/www/html; chmod -R 755 /var/www/html);deny指令:若location块中有deny all;,需修改为allow all;或指定允许的IP地址;getenforce,若返回Enforcing,可临时设置为Permissive(setenforce 0)测试是否解决问题,若解决则修改SELinux策略(如chcon -R -t httpd_sys_content_t /var/www/html)。含义:客户端发送的请求体(如上传的文件)大小超过了服务器允许的限制。
常见原因:
client_max_body_size指令。nginx.conf的http块或server块中增加client_max_body_size 20M;(根据需求设置,如20MB),然后重载Nginx(systemctl reload nginx);php.ini中的post_max_size(post_max_size = 20M)和upload_max_filesize(upload_max_filesize = 20M),并重启PHP服务(systemctl restart php-fpm)。含义:Nginx进程无法访问所需的文件、目录或端口,导致各种错误(如403、500)。
常见原因:
www-data/nginx)对站点目录、日志文件无读取/写入权限;chown -R www-data:www-data /path/to/site将站点目录所有者改为Nginx用户,chmod -R 755 /path/to/site设置合适的权限(目录755、文件644);sudo lsof -i :80查看80端口的占用进程,若有则停止该进程(sudo kill -9 PID),再启动Nginx(systemctl start nginx)。含义:Nginx配置文件存在语法错误或逻辑错误,导致服务无法启动或运行异常。
常见原因:
server_name拼写错误(如example.com误写为exaple.com);listen端口格式错误(如listen 8080;正确,listen eighty;错误);root指令路径不存在(如root /var/www/nonexistent;);rewrite规则逻辑错误(如循环重写导致500错误)。nginx -t命令,若语法正确会显示syntax is ok,若有错误会提示具体行号(如nginx: [emerg] invalid number of arguments in "listen" directive in /etc/nginx/sites-enabled/default:3);listen eighty;改为listen 8080;),保存后重载配置(systemctl reload nginx);cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak),避免错误无法恢复。