Nginx 下载安装 以及 版本 smooth upgrade (平滑升级)
- 官网下载:http://www.nginx.org/ ( 推荐下载稳定版!)
- Nginx解压安装:tar -zxf nginx-1.18.0.tar.gz
- Nginx编译:./configure –prefix=/user/local/nginx ( 指定编译安装路径) …
- 编译成功后安装 Nginx:make & make install # 注意执行安装命令时环境处于 …nginx-1.18.0/目录下
- cd … 查看安装目录 (/user/local/nginx)
- conf 目录 :存放配置文件
- html 目录: 网页文件
- logs 目录:存放日志
- sbin 目录: shell启动、停止等脚本
常用编译选项说明
nginx大部分常用模块,编译时./configure –help以–without开头的都默认安装。
nginx 常用命令
1)启动 nginx
cd /usr/local/nginx/sbin/
./nginx
2)查看进程
ps -ef | grep nginx
常见问题:解决nginx:[emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)错误:
- 错误原因:不能绑定80端口,80端口已经被占用,关闭可能占用80端口的 Apache (httpd) 等服务。
3)停止nginx,重新加载配置文件
kill –INT进程号 # 终止 nginx 进程
ps aux | grep nginx # 查看 nginx 相关进程
./nginx -s reload # 重新加载配置文件
4)检查修改的 nginx.conf配置文件语法,并重新加载
./nginx -t # 检查配置文件语法
./nginx -s reload # 重新加载配置文件
5)停止
./nginx -s stop # 停止运行 nginx
4)Nginx信号控制
TERM, INT | 快速停止(杀死进程) |
---|---|
QUIT | 优雅的关闭进程,即等请求结束后再关闭 |
HUP | 改变配置文件,平滑的重读配置文件 |
USR1 | 重读日志,在日志按月/日分割时有用 |
USR2 | 平滑的升级 |
WINCH | 优雅关闭旧的进程(配合USR2进行升级) |
扩展:也可以将 nginx 作为系统服务管理,下载 nginx 到/etc/init.d/,修改里面的路径然后赋予可执行权限。
# service nginx {start|stop|status|restart|reload|configtest}
smooth upgrade 平滑升级
- 下载、解压 新的 nginx版本
2.备份源程序 ,拷贝新程序
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old # 将 旧版本的 nginx 文件 重命名为nginx.old
cp ~/nginx /usr/local/nginx/sbin/ # 将 新下载,解压的nginx 版本 文件放置到 ./sbin/下
- 向正在运行的nginx发送USR2信号启动新的nginx,这个时候新老nginx都会接收请求,看那一个进程能抢到锁,抢到锁的worker进程可以accpet新请求
ps ax | grep nginx # 获取当前nginx 进程的pid (注意:新旧版本进程 都存在)
kill -USR2 当前旧主进程 pid
- 观察新的nginx运行无误后,向旧nginx发信号 停止旧nginx的运行
kill -WINCH 当前旧主进程 pid
日志管理
Nginx日志描述
通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息;通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。
Nginx日志格式
打开 nginx.conf 配置文件:vim /usr/local/nginx/conf/nginx.conf
日志部分内容:
#access_log logs/access.log main;
日志生成的到Nginx根目录logs/access.log文件,默认使用“main”日志格式,也可以自定义格式。
参数 | 说明 |
---|---|
$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 | 可以记录用户是从哪个链接访问过来的 |
查看日志命令:tail -f /usr/local/nginx/logs/access.log
Nginx自定义日志
1)打开nginx.conf配置文件去掉#注释
2)自定义某一个server配置的日志,使用“main”日志格式。
- 日志生成的到Nginx根目录logs/access.log文件,默认使用“main”日志格式,也可以自定义格式。
- 重新读取加载Nginx配置文件:nginx-s reload
3)查看日志文件:tail -10f /usr/local/nginx/logs/westos.access.log
Nginx 日志分隔
nginx 的日志文件没有rotate功能。编写每天生成一个日志,我们可以写一个nginx日志切割脚本来自动切割日志文件。
- 第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx 还是会向你重命名的文件写日志,Linux 是靠文件描述符而不是文件名定位文件。
- 第二步向nginx主进程发送USR1信号。nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。重新打开日志文件后,nginx 主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件。工作进程立刻打开新的日志文件并关闭重名名的日志文件。然后你就可以处理旧的日志文件了。[或者重启 nginx 服务]。
nginx日志按每天自动切割脚本如下:
新建shell脚本:
- vim/usr/local/nginx/nginx_log.sh
- chmod +x nginx_log.sh
#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day).log # 到 nginx 日志文件存放目录..logs/下, 执行命令 重命名 访问日志 access.log
/usr/local/nginx/sbin/nginx -s reload # 重启 nginx 服务
创建crontab设置定时任务
- cd /usr/local/nginx/logs/opt/
- crontab -e # 用crontab -e进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令( 时间+动作,其时间有分、时、日、月、周五种,操作符)
00 00 * * * /opt/scripts/nginxlog.sh &> /dev/null
- chmod -R 700 /usr/local/nginx/logs # 为了安全,日志目录不需要给你nginx用户访问权限