5.Nginx

news2024/11/15 16:43:02

文章目录

  • Nginx
      • 编译安装Nginx
      • 检查、启动、重启、停止nginx服务
      • 添加Nginx系统服务
      • Nginx配置
        • 全局配置
        • I/O事件配置
        • HTTP配置
        • Web服务的监听配置
        • 日志格式设定
        • location常见配置指令
        • 访问状态统计配置

Nginx

  • 一款高性能、轻量级Web服务软件

    • 稳定性高
    • 系统资源消耗低
    • 对HTTP并发连接的处理能力高
      • 单台物理服务器可支持30000 ~ 50000个并发请求
  • Nginx和Apache的差异

    • 轻量级:Nginx比Apache占用更少的内存及资源

    • 静态处理,Nginx静态处理性能比Apache高

    • Nginx可以实现无缓存的反向代理加速,提高网站运行速度

    • Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件

    • Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级

    • Nginx是异步进程,多个连接可以对应一个进程 ;Apache是同步多进程,一个连接对应一个进程

    • Nginx高度模块化,编写模块相对简单,且组件比Apache少,高并发下Nginx能保持低资源低消耗高性能

    • Nginx配置简洁,Apache配置复杂

    • Nginx使一款异步非阻塞工作模式的web应用,Apache是同步阻塞

编译安装Nginx

systemctl stop firewalld           ##关闭防火墙
systemctl disable firewalld
setenforce 0

vim /etc/selinux/config
vim /etc/selinux/config

修改配置
SELINUX=disabled
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
cd /opt/
cd nginx-1.24.0/


./configure \
--prefix=/usr/local/nginx \              # 指定nginx的安装路径
--user=nginx \                               #指定用户名
--group=nginx \                            # 指定组名   
--with-http_stub_status_module  
#启用http_stub_status_module模块以支持状态统计



./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module


./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module


make -j2
make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin  

#让系统识别nginx的操作命令

检查、启动、重启、停止nginx服务

nginx -t   ##检查配置文件是否正确

/usr/local/nginx/sbin/nginx   ##启动nginx
##查看进程号
cat /usr/local/nginx/logs/nginx.pid   ##查看服务进程号

netstat -lntp | grep nginx
ss -lntp | grep nginx
ps aux | grep nginx            
##找其中的Master进程,用来管理work进程和读取配置文件,work进程处理用户请求

ps aux | grep -v grep | grep -c nginx
##在没配置系统服务前关闭进程


kill -3 pid         ##停止服务
kill -3 -s QUIT pid
killall -3 nginx
killall -3 -s QUIT nginx


kill -1 pid         ##根据PID重载服务
kill -s HUP pid
killall -1 nginx
killall -s HUP nginx



kill -0 pid         ##检查服务是否运行
killall -0 nginx


kill -USR1 pid    ##日志分割,重新生成新的空日志文件
##平滑升级Nginx版本

kill -USR2 pid    ##平滑升级


tar -xf nginx-1.XXX            ##解压高版本的Nginx软件包

./configure \
--prefix=/usr/local/nginx \              
--user=nginx \                            
--group=nginx \                          
--with-http_stub_status_module      
##添加配置项

make -j2       ##编译安装

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak            ##备份老的配置文件


cd /opt/nginx-1.XXX
cp objs/nginx /usr/local/nginx/sbin/nginx
##复制高版本的二进制配置文件到已安装的软件的配置文件目录中


make upgrade     ##升级,在升级前先打开nginx的服务

nginx -V     ##查看nginx版本
##查看Nginx是否运行

kill -0 pid
killall -0 nginx
echo $?      ##为0   为开启


netstat -lntp | grep nginx
echo $?      ##为0  为开启

ps -ef | grep -v "grep|$$" | grep -c "nginx"

添加Nginx系统服务

方法一:

vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: 35 22 88
#desc: this is nginx control script

CMD="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
COUNT=$(ps -ef | grep -v "service|grep|$$" | grep -c "nginx")

case "$1" in
start)
   if [ $CONUT -ge 1 ]
   then
   		echo "Nginx已经启动"
   else
   		echo "Nginx正在启动"
   		$CMD
   fi   
;;

stop)
   kill -s QUIT $(cat $PID)
;;

restart)
   $0 stop
   $0 start
;;

reload)
    kill -s HUP $(cat $PID)
;;

status)
	if [ $CONUT -ge 1 ]
   then
   		echo "Nginx在运行"
   else
   		echo "Nginx关闭"
   fi   

*)
echo “Usage: $0 {start|stop|restart|reload|status}esac
chmod +x nginx
chkconfig --add nginx
systemctl daemon-reload

方法二:

vim /usr/lib/systemd/system/nginx.service
[Util]
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.target

chmod +x /usr/lib/systemd/system/nginx.service
systemctl daemon-reload

Nginx配置

/usr/local/nginx/conf

cat nginx.conf | egrep -v "^$|^\s*#"
##过滤配置中的有效行
  1. 全局块:全局配置,对全局生效
  2. events块:配置影响Nginx 服务器与用户的网络连接
  3. http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
  4. server块: 配置虚拟主机的相关参数,一个http块中可以有多个server块
  5. location块:用于配置匹配的url
  6. upstream:配置后端服务器具体地址,负栽均衡配置不可或缺的部分。

全局配置

#user nobody;                       
#运行用户,若编译时未指定则默认为nobody

worker_processes 1;                 
#工作进程数量,一般设置为和CPU核数一样;设置为auto,nginx将会自己获取这个数值

#error_log logs/error.log;          
#错误日志文件的位置

#pid logs/nginx.pid;                
#PID文件的位置

worker_rlimit_nofile 60000;
#设置所有worker进程最大可以打开的文件数,默认为1024
vim /etc/security/limits.conf
修改系统最大连接文件数

I/O事件配置

events {


use epoll;           
##使用epoll模型, 2.6及以上版本的系统内核,建议使用epoll模型以提高性能

worker_connections 4096;                  
##每个进程处理4096个连接

multi_accept on;
##是否一次性将监听到的连接全接收进来,默认为off,关闭时一次接收一条连接

accept_mutex on;
##默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker.这可能会浪费资源并产生不可预计的后果,例如惊群问题


}


##如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。

##在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。

##可使用"ulimit -a"命令查看系统允许当前用户进程打开的文件数限制。


##epo11是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用I0接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率


##worker_ processes的值和work_ connections的值决定了最大并发数量,最大并发数计算方式为: worker_ processes*worker_ connections. 
但在反向代理场景中计算方法不同,因为nginx既要维持和客户端的连接,又要维持和后端服务器的连接,因此处理一次连接要占用2个连接,所以最大并发数计算方式为: 
worker_ processes*worker_ .connections/2

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;
       
       ##此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据) ,此选项仅在使用sendfile  on  的时候使用,有助于解决网络阻塞,默认为  off
       #tcp_nopush  on;
       
       ##连接保持超时时间,单位是秒
       #keepalive_timeout 0;
       keepalive_timeout 65;
       
       ##gzip模块设置,设置是否开启gzip压缩输出
       gzip on;

Web服务的监听配置

server {

    监听地址及端口
    listen 80;
    
    站点域名,可以有多个,用空格隔开
    server name www.ggl.com;
    
    网页的默认字符集
    charset utf-8;
    
    根目录配置
    location / {
    网站根目录的位置/usr/local/nginx/html
    root html;
    
    默认首页文件名
    index index.html index.php;
    
    内部错误的反馈页面
    error_page 500 502 503 504 /50x.html;
    
    错误页面配置
    location = /50x.html {
    root html;
    }
  }
}

日志格式设定

$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;

##$remote_addr   记录上一节点地址
##$http_x_forwarded_for    记录所有经过的节点的地址


$remote_user:用来记录客户端用户名称;
$time_local:用来记录访问时间与时区;
$request:用来记录请求的url与http协议;
$status:用来记录请求状态;成功是200;
$body_bytes_sent:记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;


通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote. add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_ forwarded_ for信息, 用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

location常见配置指令

locarion  /test

root (根路径配置):  root   /var/www/html
请求www.ggl.com/test/1.html
会返回/var/www/html/test/1.html


alias (别名配置):alias   /var/www/html
请求www.ggl.com/test/1.jpg,
会返回文件/var/www/html/1.jpg


proxy_pass (反向代理配置):

访问状态统计配置

先使用命令/usr/local/nginx/sbin/nginx -V 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS模块
cd /opt/nginx-1.24.0/auto
cat options | grep YES               ##查看模已安装的所有模块
cd /usr/local/nginx/conf

vim /usr/local/nginx/conf/nginx.conf


......
http {
.....
server {
listen 80;
server_name www.xyw.com
charset utf-8;
location / {
    root html;
    index index.html index.php;
}

##添加stub_status配置##
location /status {             ## 访问位置为/status
stub_status on;               ##打开状态统计功能
access_log off;                ##关闭此位置的日志记录
     }
   }
}

浏览器访问http://192.168.242.66/status


Active connections: 表示当前的活动连接数,即当前与Nginx 服务器建立的连接数。


server accepts handled reguests :表示已经处理的连接信息

三个数字依次表示:服务器已接收的连接数
               服务器成功处理的连接数
               服务器累计处理的总请求数( 在保持连接模式下,请求数量可能会大于连接数量)


Reading:表示当前正在从客户端读取数据的连接数。
Writing:表示当前正在向客户端写入数据的连接数。
waiting:表示当前空闲并等待请求的连接数。

可curl -Ls http://192.168.242.66/statu 结合awk与if语句进行性能监控。
##查看连接的并行数

curl -Ls 192.168.242.66/status | awk '/Active connections/{print $3}' 


##创建脚本,实现每10秒查看一下并行数,并在一定数量后进行告警

#!/bin/bash

while true
do
CONNECT=$(curl -Ls 192.168.242.66/status | awk '/Active connections/{print $3}')

  if [ $CONNECT -gt 100 ]
  then
     echo "告警!当前并发连接过高,当前并发数为:$CONNECT"
  fi

sleep 10
done

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【开源项目】银行查询服务的设计和实现

银行查询服务的设计和实现 项目地址github:https://github.com/xl-echo/bankInquiryService项目地址gitee:https://gitee.com/xl-echo/bank-inquiry-service 银行查询服务的设计初衷是:为提供更加便利的查询服务,我们在分布式系…

科研热点|2023年两院院士增选,正式启动 (附增选指南)!

中国科学院 5月31日,中国科学院官网发布《2023年度中国科学院院士增选指南》《中国科学院关于推荐中国科学院院士候选人的通知》等多个文件,正式启动2023年院士增选工作。 2023年度中国科学院院士增选指南 院士制度是党和国家为树立尊重知识、尊重人才…

IOS苹果证书在线制作,无需mac电脑,拒绝钥匙串

IOS苹果证书在线制作,无需mac电脑,拒绝钥匙串 在公众号、小程序出来后,APP开发出现了很多H5的开发框架,比如uniapp等,如果你编译uniapp的程序,打包成ios项目的时候需要两个证书文件,分别是&…

KD7440八通道安规综合测试仪

一、产品概述 KD7440 系列程控耐压测试仪均采用高速 MCU 和大规模数字电路设计的高性能的安规测试仪,其输出电压的大小、输出电压的上升、下降、输出电压的频率由 MCU 控制,能实时显示击穿电流值和电压值,并具有软体校准功能,配备…

Docker安装配置教程

Docker要求: lunix内核,要求3.8以上 centos7 Docker是一个进程,一启动就两个进程,一个服务,一个守护进程。占用资源就非常少,启动速度非常快,1s。 一台机器上vm,3到10个实例。docke…

iOS 16 UIResponderForwarderWantsForwardingFromResponder Crash问题解决方案

背景 最近后台统计发现有一个随机的Crash,引起了我们的关注 从操作系统来看,都是iOS 16 系统 崩溃堆栈如下: Exception Type: EXC_BREAKPOINT (SIGTRAP) Exception Codes: 0x0000000000000001, 0x00000001daa1808c Termination Reason: …

git推送代码冲突解决

冲突情况一 首先甲和乙同时从远程仓库拉取v1版本的代码,然后乙先修改代码产出v3版本的代码进行提交并且成功,随后甲修改v1版本代码产出v2版本的代码,此时想要提交到origin/master,但是远程的最新版本并不是之前的v1了,这里就产生…

维纳过程和伊藤引理

目录 一、马尔可夫过程(Markov) 1. 基本概念 2. 具体使用 二、维纳过程 1. 基本概念 2. 具体使用 三、广义维纳过程 1. 漂移率和方差率 2. 广义维纳过程的基本概念 3. 具体使用 四、伊藤过程 五、几何布朗运动 六、伊藤引理 1. 基本概念 …

SuperMap Hi-Fi 3D SDK for Unity设置渲染范围

kele 一、背景 在三维项目中经常会使用到大屏,有可能会用到4K屏、8K屏、长屏、带鱼屏等高分辨率的屏幕,这些屏幕的其中一个特点是其长宽比比较大,有些时候会是几块16:9的屏幕横向拼接而成,这就使得这整个屏幕在水平方向…

数字信号处理9:Z变换(1)

说实话,这两天看Z变换看的迷迷糊糊的,就觉得它求卷积的时候好用,再剩下的,我怎么感觉用处不大。 首先来说z变换:,或者简单一点的可以这样子写:,感觉Z变换最重要的一个问题是收敛性,…

2023安卓逆向 -- 某合伙apk登录加密分析

接上节课内容 ​​安卓逆向 -- 抓包环境设置(CharlesPostern)​​ 一、分析登录的数据包,加密的数值是登录的密码,看着想md5加密,请求头中,x-sign也是加密的,看着也像md5。 POST /app/api/v1/partnerLogin/login HT…

2022 Kube-OVN开源社区年度报告

感谢各位社区小伙伴陪伴Kube-OVN又走过了快速发展的一年,随着Kubernetes技术的广泛应用,CNI网络插件的使用率逐步攀升,Kube-OVN社区也在不断成长。让我们一起跟随这篇文章,走进Kube-OVN的2022。 产品功能持续优化 2022年&#xff…

JavaScript高级教程(javascript实战进阶)

javascript高级、面试常问、必备知识点 1.数据类型2.引用变量赋值问题3. 对象和函数4.函数原型与原型链面试题一面试题二面试题一分析面试题二分析原型链注意点 5.执行上下文和执行上下文栈面试题一面试题二面试题一分析面试题二分析 6.作用域面试题一面试题二面试题一分析面试…

git(版本控制)详细解说【工作必备技能】

Git 1 什么是Git Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用…

轻松白嫖GPT-4,已经标星38K,不再害怕高昂的AI模型费用!

文章目录 白嫖GPT-4当前可白嫖站点 白嫖GPT-4 计算机专业学生xtekky在GitHub上发布了一个名为gpt4free的开源项目,该项目允许您免费使用GPT4和GPT3.5模型。这个项目目前已经获得了380000颗星。 开源地址:https://github.com/xtekky/gpt4free 简而言之&a…

软件开发:面向对象设计的七大原则!

七大原则 开闭原则、里氏代换原则、迪米特原则(最少知道原则)、单一职责原则、接口分隔原则、依赖倒置原则、组合/聚合复用原则。 开闭原则(The Open-Closed Principle ,OCP) 开闭原则:软件实体&#xff…

隐马尔科夫模型

隐马尔可夫模型 隐马尔可夫模型(Hidden Markov Model, HMM)可以由观测序列推断出概率最大的状态序列. HMM中的变量可分为两组: 状态变量(隐变量): { y 1 , y 2 , . . . , y n } \left \{ y_{1},y_{2},...,y_{n}\right \} {y1​,y2​,...,yn​};序列标注问题中的标注. 观察变量…

《Python程序设计与算法基础教程(第二版)》江红 余青松 课后选择题 课后填空题答案

目录 第一章一、选择题二、填空题 第二章一、选择题二、填空题 第三章一、选择题二、填空题 第四章一、选择题二、填空题 第五章一、选择题二、填空题 第八章一、选择题二、填空题 第一章 一、选择题 Python语言属于 C A.机器语言 B.汇编语言 C.高级语言 D.以上都不是 在下列…

【python】数据预处理:分位数归一化 Quantile Normalization + INSCODE AI创作助手测试

文章目录 写在前面标准化/归一化python模块qnorm实现分位数归一化R代码实现分位数归一化分位数归一化 - NSCODE AI创作助手的回答*Q1:Quantile Normalization是什么?**Q2-1: 什么时候用Quantile normalization?**Q2-2: 什么时候做Quantile no…

VScode软件下载与中文设置

目录 一、下载软件 二、中文设置 一、下载软件 1.网站上下载 2.百度网盘链接下载 链接:https://pan.baidu.com/s/1PMhxaExwhurDVVPkkbbYmw?pwd507o 提取码:507o 就选择路径->同意许可->完成下载 二、中文设置 1.在左侧扩展图标中打开“EXT…