Nginx问题及解决方案
提示错误信息
nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory) 2016/09/13 19:08:56 [emerg] 6996#0: open() "/usr/local/nginx/logs/access.log" failed (2: No such file or directory)
原因分析:nginx/目录下没有logs文件夹
解决方法:
mkdir logs chmod 700 logs
正常情况的信息输出:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
启动成功后打不开链接
1.ping
2telnet 端口(CentOS7:验证端口 firewall-cmd --query-port=80/tcp)
下面我们开启80端口:
firewall-cmd --add-port=80/tcp --permanent
#重启防火墙
systemctl restart firewalld
--permanent #永久生效,没有此参数重启后失效
配置nginx开机自启动
vim /etc/rc.d/rc.local
pid问题
问题描述
nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid" # pid丢 失
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory) # 文件或者文件夹丢失
解决方法
如果文件夹缺失,则创建该文件夹
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 执行重新启动命令,则会生成nginx.pid文件
nginx日志切割
第一种
nginx的日志分为访问日志(access.log)和错误日志(error.log),日志过大会影响nginx的性能,也不利于日志的分析,所以需要将日志分割处理。
日志常见的配置参数:
$remote_addr | 客户端的ip地址(代理服务器,显示代理服务ip) |
$remote_user | 用于记录远程客户端的用户名称(一般为“-”) |
$time_local | 用于记录访问时间和时区 |
$request | 用于记录请求的url以及请求方法 |
$status | 响应状态码,例如:200成功、404页面找不到等。 |
$body_bytes_sent | 给客户端发送的文件主体内容字节数 |
$http_user_agent | 用户所使用的代理(一般为浏览器) |
$http_x_forwarded_for | 可以记录客户端IP,通过代理服务器来记录客户端的ip地址 |
$http_referer |
可以记录用户是从哪个链接访问过来的 |
1. 进入/usr/local/nginx/sbin目录下,并创建shell文件
cd /usr/local/nginx/sbin
touch cut_nginx_log.sh
chmod +x cut_nginx_log.sh
2. 编辑shell文件,编写日志切割命令
#!/bin/bash
# This script run at 00:00
# The Nginx logs path
logs_path="/usr/local/nginx/logs/historyLog"
logPath="/usr/local/nginx/logs/"
record_time=$(date -d "yesterday" +"%Y-%m-%d")
#创建备份目录
mkdir -p ${logs_path}/
#将日志移动到上面的目录中
mv ${logPath}/access.log ${logs_path}/access、access.${record_time}.log
mv ${logPath}/error.log ${logs_path}/error、error.${record_time}.log
#nginx重读配置文件
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
第二种
1. 安装定时任务
yum install crontabs
2. 添加到crontab定时任务中
crontab -e 0 0 * * * bash /usr/local/nginx/sbin/cut_nginx_log.sh #将于每天凌晨0点0分将 nginx日志重命名为昨天的日期格式,并重新生成今天的新日志
3. 重启crontab服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
常用定时任务命令
CentOS6上的cron命令:
service crond start // 启动服务
service crond stop // 关闭服务
service crond restart // 重启服务
service crond reload // 重新载入配置
service crond status // 查看状态
crontab -e // 编辑任务
crontab -l // 查看任务列表
CentOS7上的cron命令:
systemctl start crond.service/crond start // 启动服务
systemctl stop crond.service/crond stop // 关闭服务
systemctl restart crond.service/crond restart // 重启服务
systemctl reload crond.service/crond reload // 重新载入配置
systemctl status crond.service/crond status // 查看状态
crontab命令介绍
分
|
时 | 日 | 月 | 星期几 | 年(可选) | |
取值范围
|
0-59
|
0-23
|
1-31
|
1-12
|
1-7
|
2021/2022/..... |
常用表达式示例:
*/1 * * * * // 每分钟执行
59 23 * * * // 每日凌晨(每天晚上23:59)执行
0 1 * * * // 每天1点执行
0 0 * * 1 // 每周一执行
运维页面
使用错误码判断是否跳转到运维页面
状态码
|
含义
|
500 |
服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问
题都会在服务器的程序码出错时出现。
|
501 |
服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持
其对任何资源的请求。
|
502 |
作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
|
503 |
由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将
在一段时间以后恢复。如果能够预计延迟时间,那么响应中可以包含一个 Retry-After 头用
以标明这个延迟时间。如果没有给出这个 Retry-After 信息,那么客户端应当以处理500响
应的方式处理它。 注意:503状态码的存在并不意味着服务器在过载的时候必须使用
它。某些服务器只不过是希望拒绝客户端的连接。
|
504 |
作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的
服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。 注意:
某些代理服务器在DNS查询超时时会返回400或者500错误
|
505 |
服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本。这暗示着服务器不能或不愿使
用与客户端相同的版本。响应中应当包含一个描述了为何版本不被支持以及服务器支持哪
些协议的实体。
|
506 |
由《透明内容协商协议》(RFC 2295)扩展,代表服务器存在内部配置错误:被请求的协
商变元资源被配置为在透明内容协商中使用自己,因此在一个协商处理中不是一个合适的
重点。
|
207 |
服务器无法存储完成请求所必须的内容。这个状况被认为是临时的。WebDAV (RFC 4918)
|
209 |
服务器达到带宽限制。这不是一个官方的状态码,但是仍被广泛使用。
|
510 |
获取资源所需要的策略并没有没满足。(RFC 2774)
|