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 源码编译安装与平滑升级相关推荐

  1. Nginx 实践案例(源码编译安装方式):利用LNMP搭建wordpress站点

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 ​LNMP是Linux + Nginx + MySQL + PHP 四个系统的首字母缩写,相对于 LAMP(Linux + Apache + My ...

  2. 高可用架构篇 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 主机 ...

  3. Nginx实战基础篇一 源码包编译安装部署web服务器

    Nginx实战基础篇一 源码包编译安装部署web服务器 版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 您可以自由复制.发行.展览.表演.放映.广播或通 ...

  4. LNMP架构环境搭建之PHP、Nginx源码编译安装及其简单配置应用

    LNMP架构中的Mysql见上一篇博文"LNMP架构环境搭建之mysql源码编译安装" 一.PHP简介 PHP(外文名:PHP: Hypertext Preprocessor,中文 ...

  5. (转)linux上nginx源码编译安装

    亲测有效: 转:  https://segmentfault.com/a/1190000007116797https://segmentfault.com/a/1190000007116797 ngi ...

  6. 源码编译安装Nginx及网站服务配置

    文章目录 一.Nginx概述 1.1 Nginx概述 1.2 Nginx和Apache的区别 1.3Nginx和Apache的优缺点差异 1.4Nginx的进程 二.源码编译安装nginx服务 2.1 ...

  7. Linux LNMP源码架构部署 | Nginx服务 | Mysql服务 | php服务 | 论坛源码编译安装 | 超详细

    | Nginx服务 | Mysql服务 | php服务 | 论坛源码编译安装 | ➤安装 Nginx 服务 ➤1.关闭防火墙和安全机制 ➤2.卸载自带的httpd服务 ➤3.安装依赖包 ➤4.创建运行 ...

  8. 菜鸟学Linux 第030篇笔记 yum使用,源码编译安装

    菜鸟学Linux 第030篇笔记 yum使用,源码编译安装 yum yellow updatet modified c/s: client, server yum repository 文件服务定义 ...

  9. Nginx+Php-fpm+MySQL+Redis源码编译安装指南

    说明:本教程由三部分组成如下: 1.      源码编译安装Nginx 2.      源码编译安装php以及mysql.redis扩展模块 3.      配置虚拟主机 文中所涉及安装包程序均提供下 ...

最新文章

  1. ERP_Oracle Erp 11i 和 R12的区别概述(概念)
  2. java生成dex_Java反编译Dex – jadx
  3. JZ2440学习总结2
  4. 论文浅尝 | BERT:Pre-training of Deep Bidirectional Transformers
  5. java使用Executor(执行器)管理线程
  6. 透彻理解回文~单链表的逆序~
  7. 还没毕业就被阿里30万年薪抢定,他凭什么?
  8. 软件系统中的颗粒度_意式浓缩咖啡丨甘醇香浓余韵长,研磨的度与质千万别忽视...
  9. SQL Server 2008:示例数据库安装
  10. centos系统下搭建网站环境 php+mysql+apache
  11. VisualGDB系列8:使用VS创建CMake Linux项目
  12. 那些年使用Android studio遇到的问题
  13. 计算机的基础硬件知识,计算机硬件基础知识学习_电脑硬件知识_手机硬件知识...
  14. 爬取网易云音乐的歌曲
  15. 集合的相关概念(开闭、有界无界、内点边界点等)
  16. 计算机学院运动会解说词,学院运动会入场解说词
  17. Linux-C 简单的C语言日志库
  18. 膨胀卷积(空洞卷积)
  19. 智能骨科图像方向,按照期刊进行的文献整理
  20. 计算机专业mx330够用吗,这款新的HP笔记本电脑配备了MX330图形卡,那么性能如何?...

热门文章

  1. __func__标识符
  2. c语言延时程序_科技文化节 | 剑指疫情,策“码”扬“编”程序设计大赛完美收官...
  3. pythonexe系统错误丢失_PyCharm-错误-找不到指定文件python.exe的解决方法
  4. vue项目js文件引入第三方库组件
  5. Games104 Lecture 8 游戏引擎的动画技术基础
  6. 2022年12月29日进行注册身份证功能
  7. DPA是什么,有什么用
  8. go语言path包和filepath包的学习与使用
  9. n6pro android,360 N6Pro开启开发者选项功能的图文教程,方法步骤:  1、我
  10. java 长整型long_关于java:长于Long.MAX_VALUE的长整型