Nginx基础篇-Nginx 源码编译安装与平滑升级
Nginx基础篇-Nginx 源码编译安装与平滑升级
Nginx官网下载地址
http://nginx.org/
1.安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
2.创建运行用户、组
useradd -M -s /sbin/nologin nginx
3.编译安装
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \ #指定nginx的安装路径
--user=nginx \ #指定用户名
--group=nginx \ #指定组名
--with-http_stub_status_module #启用 http_stub_status_module 模块以支持状态统计make && make installln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令
4.检查、启动、重启、停止nginx服务
nginx -t #检查配置文件是否配置正确
nginx #启动
cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID号
kill -3 <PID号>
kill -s QUIT <PID号> #停止
killall -3 nginx
killall -s QUIT nginxkill -1 <PID号> #重载
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx #日志分隔,重新打开日志文件
kill -USR1 <PID号> #平滑升级
kill -USR2 <PID号>
5.添加Nginx系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.targetchmod 754 /lib/systemd/system/nginx.service #赋权,除了root以外的用户都不能修改
systemctl start nginx.service
systemctl enable nginx.service
6.全局配置
vim /usr/local/nginx/conf/nginx.conf #user nobody; #运行用户,若编译时未指定则默认为 nobody
worker_processes 1; #工作进程数量,可配置成服务器内核数 * 2
#error_log logs/error.log; #错误日志文件的位置
#pid logs/nginx.pid; #PID 文件的位置
7.HTTP配置
http {##文件扩展名与文件类型映射表include mime.types;##默认文件类型default_type application/octet-stream;##日志格式设定#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';##访问日志位置#access_log logs/access.log main;##支持文件发送(下载)sendfile on;##此选项允许或禁止使用socke的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用#tcp_nopush on;##连接保持超时时间,单位是秒#keepalive_timeout 0;keepalive_timeout 65;##gzip模块设置,设置是否开启gzip压缩输出#gzip on;##Web 服务的监听配置
server {##监听地址及端口listen 80; ##站点域名,可以有多个,用空格隔开server_name www.lic.com;##网页的默认字符集charset utf-8;##根目录配置location / {##网站根目录的位置/usr/local/nginx/htmlroot html;##默认首页文件名index index.html index.htm;}##内部错误的反馈页面error_page 500 502 503 504 /50x.html;##错误页面配置location = /50x.html {root html;}
}
}
8.平滑升级和回滚
nginx编译安装平滑升级的过程
1.将旧Nginx二进制文件换成新Nginx程序文件(注意先备份,新nginx二进制文件只执行make不执行make install)
2.向master进程发送USR2信号
3.master进程修改pid文件名加上后缀.oldbin,成为nginx.pid.oldbin
4.master进程用新Nginx文件启动新master进程成为旧master的子进程,系统中将有新旧两个Nginx
5.主进程共同提供Web服务,当前新的请求仍然由旧Nginx的worker进程进行处理,将新生成的master
进程的PID存放至新生成的pid文件nginx.pid
6.向旧的Nginx服务进程发送WINCH信号,使旧的Nginx worker进程平滑停止
7.向旧master进程发送QUIT信号,关闭老master,并删除Nginx.pid.oldbin文件
如果发现升级有问题,可以回滚∶向老master发送HUP,向新master发送QUIT
9.编译安装nginx新版本1.23.2
cd /opt
tar zxvf nginx-1.23.2.tar.gz -C /opt/cd /opt/nginx-1.23.2/
./configure \
--prefix=/usr/local/nginx \ #指定nginx的安装路径
--user=nginx \ #指定用户名
--group=nginx \ #指定组名
--with-http_stub_status_module #启用 http_stub_status_module 模块以支持状态统计
#只需要make 不需要make install make
10.备份旧的nginx二进制文件,copy新的nginx到usr/local/nginx/sbin/下
#重命名旧的nginx
mv /usr/local/nginx/sbin/nginx nginx.bak#拷贝新的nginx
cp objs/nginx /usr/local/nginx/sbin/
cd /usr/local/nginx/sbin/
ls -ltr
11.检查&发送USR2信号进行平滑升级
#检查
./nginx -t
ps -auxf |grep nginx# 发送 USR2 平滑升级信号
#USR2 平滑升级可执行程序,将存储有旧版本主进程PID的文件重命名为nginx.pid.oldbin,并启动新的nginx
#此时两个master的进程都在运行,只是旧的master不在监听,由新的master监听80
#此时Nginx开启一个新的master进程,这个master进程会生成新的worker进程,这就是升级后的Nginx进程,此时老的进程不会自动退出,但是当接收到新的请求不作处理而是交给新的进程处理。
kill -USR2 `ps -ef | grep "nginx: master process" | grep -v grep | awk '{print $2}'`# 查看最新进程状态
# 可以看到两个master,新的master是旧版master的子进程,并生成新版的worker进程#先关闭旧nginx的worker进程,而不关闭nginx主进程方便回滚
#向原Nginx主进程发送WINCH信号,它会逐步关闭旗下的工作进程(主进程不退出),这时所有请求都会由新
版Nginx处理
kill -WINCH `cat /usr/local/nginx/run/nginx.pid.oldbin`#经过一段时间测试,新版本服务没问题,最后退出老的master
kill -QUIT `cat /usr/local/nginx/run/nginx.pid.oldbin`备注:要是nginx.pid.oldbin文件没有生成,需要自行判断新旧nginx得PID进行上述命令即可
Nginx基础篇-Nginx 源码编译安装与平滑升级相关推荐
- Nginx 实践案例(源码编译安装方式):利用LNMP搭建wordpress站点
镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 LNMP是Linux + Nginx + MySQL + PHP 四个系统的首字母缩写,相对于 LAMP(Linux + Apache + My ...
- 高可用架构篇 MySQL源码编译安装(CentOS-6.6+MySQL-5.6)
部署环境 操作系统:CentOS-6.6-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6.26.tar.gz 操作用户:root 系统IP:192.168.1.205 主机 ...
- Nginx实战基础篇一 源码包编译安装部署web服务器
Nginx实战基础篇一 源码包编译安装部署web服务器 版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 您可以自由复制.发行.展览.表演.放映.广播或通 ...
- LNMP架构环境搭建之PHP、Nginx源码编译安装及其简单配置应用
LNMP架构中的Mysql见上一篇博文"LNMP架构环境搭建之mysql源码编译安装" 一.PHP简介 PHP(外文名:PHP: Hypertext Preprocessor,中文 ...
- (转)linux上nginx源码编译安装
亲测有效: 转: https://segmentfault.com/a/1190000007116797https://segmentfault.com/a/1190000007116797 ngi ...
- 源码编译安装Nginx及网站服务配置
文章目录 一.Nginx概述 1.1 Nginx概述 1.2 Nginx和Apache的区别 1.3Nginx和Apache的优缺点差异 1.4Nginx的进程 二.源码编译安装nginx服务 2.1 ...
- Linux LNMP源码架构部署 | Nginx服务 | Mysql服务 | php服务 | 论坛源码编译安装 | 超详细
| Nginx服务 | Mysql服务 | php服务 | 论坛源码编译安装 | ➤安装 Nginx 服务 ➤1.关闭防火墙和安全机制 ➤2.卸载自带的httpd服务 ➤3.安装依赖包 ➤4.创建运行 ...
- 菜鸟学Linux 第030篇笔记 yum使用,源码编译安装
菜鸟学Linux 第030篇笔记 yum使用,源码编译安装 yum yellow updatet modified c/s: client, server yum repository 文件服务定义 ...
- Nginx+Php-fpm+MySQL+Redis源码编译安装指南
说明:本教程由三部分组成如下: 1. 源码编译安装Nginx 2. 源码编译安装php以及mysql.redis扩展模块 3. 配置虚拟主机 文中所涉及安装包程序均提供下 ...
最新文章
- ERP_Oracle Erp 11i 和 R12的区别概述(概念)
- java生成dex_Java反编译Dex – jadx
- JZ2440学习总结2
- 论文浅尝 | BERT:Pre-training of Deep Bidirectional Transformers
- java使用Executor(执行器)管理线程
- 透彻理解回文~单链表的逆序~
- 还没毕业就被阿里30万年薪抢定,他凭什么?
- 软件系统中的颗粒度_意式浓缩咖啡丨甘醇香浓余韵长,研磨的度与质千万别忽视...
- SQL Server 2008:示例数据库安装
- centos系统下搭建网站环境 php+mysql+apache
- VisualGDB系列8:使用VS创建CMake Linux项目
- 那些年使用Android studio遇到的问题
- 计算机的基础硬件知识,计算机硬件基础知识学习_电脑硬件知识_手机硬件知识...
- 爬取网易云音乐的歌曲
- 集合的相关概念(开闭、有界无界、内点边界点等)
- 计算机学院运动会解说词,学院运动会入场解说词
- Linux-C 简单的C语言日志库
- 膨胀卷积(空洞卷积)
- 智能骨科图像方向,按照期刊进行的文献整理
- 计算机专业mx330够用吗,这款新的HP笔记本电脑配备了MX330图形卡,那么性能如何?...
热门文章
- __func__标识符
- c语言延时程序_科技文化节 | 剑指疫情,策“码”扬“编”程序设计大赛完美收官...
- pythonexe系统错误丢失_PyCharm-错误-找不到指定文件python.exe的解决方法
- vue项目js文件引入第三方库组件
- Games104 Lecture 8 游戏引擎的动画技术基础
- 2022年12月29日进行注册身份证功能
- DPA是什么,有什么用
- go语言path包和filepath包的学习与使用
- n6pro android,360 N6Pro开启开发者选项功能的图文教程,方法步骤: 1、我
- java 长整型long_关于java:长于Long.MAX_VALUE的长整型