当前位置: 首页 > news >正文

NGINX安装升级

nginx介绍

Nginx的版本分为开发版、稳定版和过期版,nginx以功能丰富著称,它即可以作为http服务器,也可以作为反向代理服务器或者邮件服务器,也可以作为反向代理服务器或者邮件服务器,能够快速的响应静态网页的请求,支持FastCGI/SSL/Virtual Host/URL Rwrite/Gzip/HTTP Basic Auth/http或者TCP的负载均衡(1.9版本以上且开启stream模块)等功能,并且支持第三方的功能扩展
 

nginx功能

  • 静态的web资源服务器html,图片,js,css,txt等静态资源
  • http/https协议的反向代理 7层
  • 结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
  • tcp/udp协议的请求转发(反向代理) 4层

nginx进程结构

  • 多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求。
  • 多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来个客户方进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定
     

nginx模块

核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理等核心功能

标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置 等等

可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如:Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等

邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持

Stream服务模块: 实现反向代理功能,包括TCP协议代理

第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等

nginx安装与使用

yum安装nginx

http://nginx.org/en/linux_packages.html #官网
yum install -y epel-release  #安装epel源
yum install nginx -y  #安装nginx
编译安装nginx
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel
#安装依赖包   
useradd -M -s /sbin/nologin nginx
#新建nginx用户便于管理cd /opt/
wget http://nginx.org/download/nginx-1.18.0.tar.gz#官网下载安装包
tar xf nginx-1.18.0.tar.gz #解压软件包
cd nginx-1.18.0/
mkdir /apps/nginx -p./configure --prefix=/apps/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_modulemake -j2&&make install  # 编译安装chown -R nginx.nginx /apps/nginx
#修改权限/apps/nginx/sbin/nginx#绝对路径启动
ln -s /apps/nginx/sbin/nginx /usr/sbin/ #创建软连接后直接 nginx启动conf:保存nginx所有的配置文件
html目录中保存了nginx服务器的web文件
logs:用来保存nginx服务器的访问日志错误日志等日志
sbin:保存nginx二进制启动脚本
将nginx添加系统服务
vim /usr/lib/systemd/system/nginx.service  #建立.service文件[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid #注意文件位置,如果不对 启动不了
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf #注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]systemc	
WantedBy=multi-user.target
通过脚本运行启动
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: - 99 20
#description:Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)$COM
;;
stop)kill -s QUIT $(cat $PID)
;;
restart)$0 stop$0 start
;;reload)kill -s HUP $(cat $PID)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
chmod +x /etc/init.d/nginx
chkconfig --add nginx #添加为系统服务
chkconfig --list nginxservice nginx start 
service nginx stop #哪个开启用那个关闭
systemctl stop nginx
systemctl start nginx
修改pid文件位置
mkdir /apps/nginx/run/ #创建目录
vim /apps/nginx/conf/nginx.conf #修改配置文件
pid   /apps/nginx/run/nginx.pid; #找到 pid的位置修改  
systemctl daemon-reload  #重新加载配置
nginx信号使用
nginx -h/? #帮助
nginx -v #显示版本号
nginx -V  #显示编译详细信息情况 模块等信息
nginx -s   stop   #立即关闭nginx
nginx -s   quit   #不影响业务的状态下退出
nginx -s   reload #重新加载 
nginx -s   reopen #分割日志
nginx -g 'user zhangsan;'   #以张三身份运行,默认是以nginx身份
nginx -g 'daemon off;'    #前台运行命令
nginx -t  #检查语法格式
nginx -T  #打印配置文件
nginx -c 文件 #指明加载配置文件分割日志
[root@node2 nginx]cd /var/log/nginx/
#切换到
[root@node2 nginx]mv access.log access.log.bak
[root@node2 nginx]touch access.log
#此时日志不会写入到新文件
[root@node2 nginx]ps aux |grep nginx
[root@node2 nginx]kill -s  USR1 117994
[root@node2 nginx]nginx -s reopen 
平滑升级
  1. 将旧Nginx文件换成新Nginx文件(注意备份)
  2. 向master进程发送USR2信号
  3. master进程修改pid文件名,加后缀.oldbin
  4. master进程用新Nginx文件启动新master进程,系统中将有新旧两个Nginx主进程共同提供Web服务
  5. 向旧的Nginx服务进程发送WINCH信号,使旧的Nginx worker进程平滑停止,并删除Nginx.pid.oldbin文件
  6. 向旧master进程发送QUIT信号,关闭老master
  7. 如果发现升级有问题,可以回滚向老master发送HUP,向新master发送QUIT
     
[root@localhost ~]ps aux |grep nginx #先查看是否开启nginx
[root@localhost ~]vim /apps/nginx/conf/nginx.conf
#开启 两核
#user  nobody;
worker_processes  2;  #worker_processes  1 原来是1核
[root@localhost ~]ln -s /apps/nginx/sbin/nginx /usr/bin/
[root@localhost ~]nginx -s reload  #重新加载配置文件
[root@localhost ~]wget https://nginx.org/download/nginx-1.20.2.tar.gz -P /usr/local/src/   #下载安装包到src目录
[root@localhost ~]cd /usr/local/src
[root@localhost src]tar xf nginx-1.20.2.tar.gz #解压
[root@localhost src]cd nginx-1.20.2/
[root@localhost nginx-1.20.2]nginx -V  #查看详细信息
[root@localhost nginx-1.20.2]./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module  #重新编译
[root@localhost nginx-1.20.2]make  #不要make install
[root@localhost objs]cd objs #此文件夹中有新版本的nginx  运行程序
[root@localhost objs]./nginx -v #查看版本
nginx version: nginx/1.20.2
[root@localhost objs]mv /apps/nginx/sbin/nginx   /apps/nginx/sbin/nginx.bak  #将低版本的nginx主程序改名
[root@localhost objs]cp /usr/local/src/nginx-1.20.2/objs/nginx /apps/nginx/sbin/  #将新版本 拷入进去
[root@localhost objs]/apps/nginx/sbin/nginx -t  #检查语法问题
[root@localhost nginx]kill -USR2 `cat /apps/nginx/logs/nginx.pid` #发送信号[root@localhost nginx]dd if=/dev/zero of=/apps/nginx/html/m.img bs=1G count=10  #校验
[root@localhost nginx]wget --limit-rate=1M http://192.168.65.110/m.img  #开启新机器下载
[root@localhost nginx]ss -ntap|grep 80  #查看进程管理下载
LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=8850,fd=6),("nginx",pid=8849,fd=6),("nginx",pid=8848,fd=6),("nginx",pid=5489,fd=6),("nginx",pid=5488,fd=6),("nginx",pid=5146,fd=6))
ESTAB      0      0      192.168.65.110:22                 192.168.65.1:59680               users:(("sshd",pid=1785,fd=3))
ESTAB      0      461224 192.168.65.110:80                 192.168.65.103:38450               users:(("nginx",pid=5488,fd=3))[root@localhost nginx]ls /apps/nginx/logs/  #有新老两个进程
access.log  error.log  nginx.pid  nginx.pid.oldbin[root@localhost nginx]cat /apps/nginx/logs/nginx.pid.oldbin 
5146
[root@localhost nginx]kill -WINCH `cat /apps/nginx/logs/nginx.pid.oldbin`  #关闭老进程[root@localhost nginx]#pstree -p |grep nginx  #查看老进程|-nginx(5146)---nginx(8848)-+-nginx(8849)|                           `-nginx(8850)

相关文章:

  • 数据库基础语法
  • CSS 垂直水平居中总结(全)
  • 香港商标注册申请所需资料及办理流程
  • netty使用
  • 【Flink on k8s】- 4 - 在 Kubernetes 上运行容器
  • C#winform上下班打卡系统Demo
  • 鸿蒙系统开发手册 - HarmonyOS内核驱动层源码分析
  • 实现跨VLAN通信、以及RIP路由协议的配置
  • JAVA实现敏感词高亮或打码过滤:sensitive-word
  • TCP通讯
  • Linux UUCP命令教程:如何在Linux系统中进行文件复制(附实例详解和注意事项)
  • hive 命令行中使用 replace 和nvl2 函数报错
  • CopyOnWriteArraySet怎么用
  • log4j2日志框架使用
  • Redisson的基本使用
  • 4个实用的微服务测试策略
  • axios 和 cookie 的那些事
  • Centos6.8 使用rpm安装mysql5.7
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JavaScript 一些 DOM 的知识点
  • JAVA并发编程--1.基础概念
  • Java精华积累:初学者都应该搞懂的问题
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Vue官网教程学习过程中值得记录的一些事情
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 服务器之间,相同帐号,实现免密钥登录
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 赢得Docker挑战最佳实践
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • #传输# #传输数据判断#
  • (11)MATLAB PCA+SVM 人脸识别
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (javascript)再说document.body.scrollTop的使用问题
  • (分享)自己整理的一些简单awk实用语句
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core 中的路径问题
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET项目中存在多个web.config文件时的加载顺序
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [Android Pro] Notification的使用
  • [BJDCTF2020]The mystery of ip
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • [C++]高精度 bign (重载运算符版本)
  • [EFI]Acer Aspire A515-54g电脑 Hackintosh 黑苹果efi引导文件
  • [Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例
  • [linux运维] 利用zabbix监控linux高危命令并发送告警(基于Zabbix 6)
  • [Node + Docker] 聊聊怎么把 nodeclub 构建成 Docker 镜像
  • [Oh My C++ Diary]\t \n \r的用法
  • [orleans2.1]这是你没玩过的船新版本
  • [python]bar_chart_race设置日期格式