登录
首页 > 编程 > Nginx日常维护及常见问题处理

Nginx日常维护及常见问题处理

发布时间:2023-08-13 20:52:15 发布用户: admin

. 日常维护
1.1 检查配置文件问题
/app/nginx/sbin/nginx -t
1.
1.2 进程检查
ps -ef|grep nginx
1.
1.3 端口检查
netstat -anput|grep 端口
1.
1.4 查看错误日志
cat /app/nginx/logs/*.log |grep “ERROR”
1.
2. 常见问题处理
2.1 配置语法错误
故障现象:test failed
故障原因:配置语法错误
解决方法:
执行nginx -t命令检查语法,确认语法检查通过,如果语法检查报错,请根据报错提示修正,直到语法检查通过。启动nginx服务,检查监听端口存在。

2.2 目录权限不足
故障现象:failed (13: Permission denied)
故障原因:目录权限不足
解决方法:
检查nginx目录宿主和权限,如果是要求以nginx用户启动服务,要确保目录的用户和组都是nginx。

su - nginx 
$ /nginx/nginx/sbin/nginx -c /nginx/nginx/conf/nginx.conf
nginx: [alert] could not open error log file: open() "/nginx/nginx/logs/error.log" failed (13: Permission denied)
2019/12/29 10:54:51 [warn] 7938#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /nginx/nginx/conf/nginx.conf:3
2019/12/29 10:54:51 [emerg] 7938#0: open() "/nginx/nginx/logs/access.log" failed (13: Permission denied)
1.
2.
3.
4.
5.
2.3 端口权限不足
故障现象:bind() to 0.0.0.0:80 failed (13: Permission denied)
故障原因:端口权限不足
如果监听端口是1024以下的特权端口,如80和443,还需要配置sudo,确保nginx普通用户能够启动特权端口。

$ /nginx/nginx/sbin/nginx -t
nginx: the configuration file /nginx/nginx/conf/nginx.conf syntax is ok
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
nginx: configuration file /nginx/nginx/conf/nginx.conf test failed
1.
2.
3.
4.
解决方法:

以root身份添加nginx用户sudo权限,【在倒数第二行 ## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment) 行上面增加以下内容】
visudo 
Allow nginx user start nginx service
Cmnd_Alias NGXCMD=/nginx/nginx/sbin/nginx
nginx ALL=NGXCMD
1.
2.
3.
4.
5.
修改后以nginx用户sudo方式执行,正常

$ sudo /nginx/nginx/sbin/nginx -t
[sudo] password for nginx: 
nginx: the configuration file /nginx/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /nginx/nginx/conf/nginx.conf test is successful
1.
2.
3.
4.
2.4 服务启动失败
故障现象:Address already in use
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
故障原因:网络端口被占用
解决方法:使用netstat -antp|grep nginx |grep LISTEN 检查端口是否被占用,如有则把对应的停止或把进程kill掉,然后再启动nginx服务

2.5 无法访问网页
故障现象:浏览器访问网页无法打开
故障原因:防火墙未开放nginx端口
解决方法:
通常情况下,操作系统防火墙应该是关闭的,如果无开启了iptables服务,请关闭,执行命令:

service iptables stop
1.
如果确实配置了防火墙测试,请检查nginx端口或服务是否在防火墙允许列表里查或添加相关允许nginx端口外部访问策略
防火墙示例:【假设当前nginx监听端口是80】
查看当前防火墙策略

# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:22 
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:80 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:8080
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
当前配置的防火墙策略显示端口80被禁止,所以访问nginx的80端口的流量都被丢弃。
删除被禁用80端口策略

iptables -D OUTPUT 2
1.
添加允许访问nginx端口80策略

iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
1.
保存防火墙策略

service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
1.
2.
再次查看防火墙策略,显示端口80访问开放;

iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:8080
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
使用浏览器测试nginx web网站访问正常。

2.6 404 bad request
一般原因:请求的Header过大
解决方法:修改nginx.conf相关设置

client_header_buffer_size 16k;
large_client_header_buffers 4 64k;
1.
2.
2.7 413 Request Entity Too Large
一般原因:一般出现在上传文件
解决方法:修改 nginx.conf相关设置,
client_max_body_size 10m;
修改php.ini如下(必须和nginx.conf配置一致)

post_max_size=10M
upload_max_filesize=2M
1.
2.
修改后重新加载nginx.conf或重启nginx服务。

2.8 499 Client Closed Request
一般原因:客户端在为等到服务器相应返回前就关闭了客户端连接。一般出现在客户端设置超时后,主动关闭socket.
解决方法:根据实际Nginx后端服务器的处理时间修改客户端超时时间。
修改后重新加载nginx.conf或重启nginx服务。

2.9 500 Internal Server Error
原因较多,主要有3类:

(1)语法错误(如php语法错误),
解决方法:查看nginx_err_log 和php_err_log,修正语法。
(2)访问量过大,系统资源限制,不能打开过多文件
解决方法:
1.修改nginx配置文件,
worker_rlimit_nofile 65535;
修改后重新加载nginx.conf或重启nginx服务。
2.修改系统/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
修改系统limits值后需要关闭当前所有nginx服务,退出当前nginx用户,重新登录后系统limit值才能生效,有时候可能需要重启操作系统。
(3)磁盘空间不足。(access log开启可能导致磁盘满溢关闭)
解决方法:查看磁盘空间,扩容磁盘或清理旧的日志文件。
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
2.10 503 Serveice Unavailable
一般原因:后端服务无法处理,业务中断。
解决方法:从后端日志获取错误原因,解决后端服务器问题。

2.11 504 Gateway Timeout
一般原因1:后端服务器在超时时间内,未响应Nginx代理请求
解决方法:根据后端服务器实际处理情况,调正后端请求超时时间。
proxy_read_timeout 90;
proxy_send_timeout 90;

一般原因2:可能网站页面缓存大,而fastcgi默认进程响应缓存区8k
解决方法:配置nginx.conf相关设置
fastcgi_buffers 8 128k
send_timeout 60;

2.12 端口绑定失败
问题现象 nginx error日志中出现下面报错:

2019/08/03 10:31:32 [emerg] 2952#2956: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
1.
问题说明 nginx使用了80端口小于1024,使用80端口需要nginx运行在root或administrator用户下面
解决方法 使用其他大于1024的端口运行nginx或者使用root/administrator用户运行nginx

2.13 too many open files
问题现象 nginx error日志中出现下面报错:
服务器提示“too many open files”
问题说明 nginx进程打开的文件数超出了限制
解决方法 :

1.nginx连接数增加
  # vim   /usr/local/nginx/conf/nginx.conf
  -----
  worker_process 1;        //与cpu核心数量一致
  events {
           worker_connections   200000;    //每个worker的最大并发连接数
           use epoll;             
                }
    //epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率
# /usr/local/nginx/sbin/nginx -s reload 
2.linux内存参数优化
#  ulimit -a    
 # ulimit -Hn  10000    //设置硬限制(临时规则)
 # ulimit  -Sn  10000    //设置软限制(临时规则)
 # vim  /etc/security/limits.conf    //在最后一行后追加   
 *     soft   nofile   100000
 *     hard   nofile    100000
 //用户 /组            硬限制/软限制      需要限制的项目   限制的值
3.配置修改后测试
ab  -n 10000    -c   5000   http://192.168.1.15
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
2.14 访问400/414
问题现象 URI过长或request header过大导致400或414报错
问题说明 当http 的URI太长或者request header过大时会报414 Request URI too large或400 bad request错误
解决方法 修改两个参数

参数一:

#client_header_buffer_size:客户端请求头缓冲区大小,
client_header_buffer_size 128k;#如果请求头总长度大于小于128k,则使用此缓冲区

参数二:

large_client_header_buffers:请求头总长度大于128k时使用large_client_header_buffers设置的缓存区

large_client_header_buffers 4 128k;

large_client_header_buffers 指令参数4为个数,128k为大小,默认是8k。申请4个128k。
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
2.15 访问502
问题现象 Nginx 502 Bad Gateway 错误
问题说明 浏览器访问nginx出现502报错码
日志中出现下面的报错

13:33:47 [error] 15421#0: *16 upstream sent too big header while reading response header from upstream
1.
解决方法 nginx.conf中修改下面配置:

登录后复制 
1.    fastcgi缓冲区设置过小
http{}中添加下面配置
fastcgi_buffers 8 16k;
     fastcgi_buffer_size 32k;
2.    代理缓存区设置过小
location{}中添加下面配置
  _buffer_size 64k;
  _buffers   32 32k;
  _busy_buffers_size 128k;
proxy_set_header Host $host;
  proxy_set_header X-Real-IP       $remote_addr;
  proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

PHP更多>>

海关总署:我国进出口 连续2个月同比增长 长清区成功举办首届职工家政技能大赛 前妻要回土地于法有据 法院公允分割定分止争 G312线傅苦公路5标项目全幅顺利贯通 实现“56到84+”延伸,这个镇的文化中心为更多人群提供公共文化服务! 前11个月进出口持平 11月份同比增长1.2% 中国与新加坡签署中新自由贸易协定进一步升级议定书 凤阳奋力绘就宜居宜业和美乡村新画卷 浙江持续擦亮“一路先行”党建品牌 山东兖州:“一线支部工作法”将党旗插在田间地头 固安县加快推进 空天信息产业发展 王晓涛被开除党籍 濮阳王瑞林获评中国青年志愿者优秀个人 报中共中央批准,两“虎”同时受处分! 国务院:支持上海自贸试验区可信、安全和负责任地使用人工智能技术 把“东方美”传向国际市场!聊城这家小镇企业东盟市占率超70% 交通运输部关于发布《综合货运枢纽设计规范》等18项交通运输行业标准的公告 喜讯 | 贵州三力荣获“2021-2023年贵州省促进新型工业化发展先进企业”称号 内蒙古这起“百万黄金被盗案”,更多细节披露! 交通运输部印发《城市轨道交通通信系统运营技术规范(试行)》 黑龙江省政协原副主席曲敏,被“双开” 中老铁路磨憨口岸出入境人员突破10万人次 甘肃兰州榆中县:设立“零工驿站”提供就业服务 扶余:抢抓战略机遇,推动县域经济高质量发展 【“双争”进行时】霸州:百姓宣讲家乡事 强国复兴攀高峰 “山西一女性公职人员实名举报两任局长”,最新通报 海关总署:11月我国外贸进出口同比增长1.2% (人权行动看中国)河南驻马店:特色种植产业成农民增收好渠道 总投资74亿元!中国铁建中标海南临高金牌港开发区港口及配套工程项目 鼓励大学生基层就业还需多方向着力
Copyright 2018-2023 黑鸟云 版权所有  京ICP备2022032575号-3