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

【Web服务器集群】Nginx网站服务

文章目录

  • 一、Nginx 概述
    • 1.什么是 Nginx
    • 2.Nginx 的特点
    • 3.Nginx 应用场景
  • 二、Nginx 服务基础
    • 1.编译安装 Nginx 服务
      • 1.1 布置环境
      • 1.2 安装依赖包
      • 1.3 创建运行用户、组
      • 1.4 编译安装
    • 2.Nginx 的运行控制
      • 2.1 检查配置文件
      • 2.2 启动、停止 Nginx
      • 2.3 日志分割以及升级 Nginx 服务
      • 2.4 添加 Nginx 系统服务
        • 方法一
        • 方法二
    • 3.配置文件 nginx.conf
      • 3.1 全局配置
      • 3.2 I/O事件配置
      • 3.3 HTTP配置
      • 3.4 日志文件格式设定
        • remote_addr 和 http_x_forwarded_for 的区别
      • 3.5 location常见配置指令
  • 三、Nginx访问控制
    • 1.访问状态统计
      • 1.1 查看已经安装模块
      • 1.2 修改配置文件
      • 1.3 重启服务,访问测试
      • 1.4 判断服务器并发量
    • 2.


一、Nginx 概述

1.什么是 Nginx

  Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。

2.Nginx 的特点

  • Nginx 具有高并发、高性能的特性;
  • 系统资源消耗低,相比于 Apache 更加轻量级;
  • Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率
  • Nginx支持热部署。它的启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级;
  • 对 HTTP 并发连接的处理能力高,单台服务器可支持30000 ~ 50000个并发请求,在实际生产环境中约20000~30000并发连接数。

Nginx 和 Apache 的差异

  • 轻量级,Nqinx比Apache占用更少的内存及资源。

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

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

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

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

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

  • Nginx高度模块化,编写模块相对简单,且组件比Apache少。

  • 高并发下nginx能保持低资源低消耗高性能;Nqinx配置简洁,Apache配置复杂。

3.Nginx 应用场景

  • http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
  • 虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。
  • 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。
  • nginz 中也可以配置安全管理。比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。

二、Nginx 服务基础

1.编译安装 Nginx 服务

1.1 布置环境

  关闭防火墙,将安装nginx所需软件包传到/opt目录下。安装包下载网址:nginx中文官网。

###关闭防火墙及开机自启功能
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0
[root@localhost ~]# cd /opt/
###上传安装包
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
nginx-1.24.0.tar.gz  rh

1.2 安装依赖包

  nginx的配置及运行需要pcre、zlib、openss1等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。

[root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

1.3 创建运行用户、组

  创建运行用户、组(Nginx服务程序默认以 nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)

###创建一个名为nginx的用户,不建立宿主目录,禁止登录到Shell环境中
[root@localhost ~]# useradd -M -s /sbin/nologin nginx

1.4 编译安装

[root@localhost ~]# cd /opt/cd / opt
[root@localhost opt]# tar zxvf nginx-1.24.0.tar.gz
[root@localhost opt]# ls
nginx-1.24.0  nginx-1.24.0.tar.gz  rh[root@localhost opt]# cd nginx-1.24.0/
[root@localhost nginx-1.24.0]# ls
auto     CHANGES.ru  configure  html     Makefile  objs    src
CHANGES  conf        contrib    LICENSE  man       README
[root@localhost nginx-1.24.0]# ./configure \
--prefix=/usr/local/nginx \					#指定nginx的安装路径
--user=nginx \								#指定用户名
--group=nginx \								#指定组名
--with-http_stub_status_module				#启用http stub_status_module模块以支持状态统计[root@localhost nginx-1.24.0]# make -j2 && make install

  为了使 Nginx 服务器的运行更方便,可以为主程序 nginx 创建链接文件,以便管理员直接执行nginx 命令就可以调用 Nginx 的主程序

[root@localhost nginx-1.24.0]# cd /usr/local/nginx/
[root@localhost nginx]# ls
conf  html  logs  sbin
[root@localhost nginx]# cd sbin/
[root@localhost sbin]# ls
nginx
###让系统识别nginx的操作命令
[root@localhost sbin]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
###查看版本信息
[root@localhost sbin]# ./nginx -v
nginx version: nginx/1.24.0
###查看版本信息以及配置项
[root@localhost sbin]# nginx -V
nginx version: nginx/1.24.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

2.Nginx 的运行控制

2.1 检查配置文件

  检查配置文件是否配置正确和语法是否正确。若要检查其他位置的配置文件,可以使用-c选项来指定路径。

[root@localhost sbin]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

2.2 启动、停止 Nginx

  直接运行 nginx 即可启动 Nginx 服务器,这种方式将使用默认的配置文件,若要改用其他配置文件,需添加-c 配置文件路径选项来指定路径。这里需要注意,如果服务器中已装有 httpd 等其他 Web 服务软件,应修改端口或停用、卸载,以免造成冲突。

  一般习惯建议使用路径来指定文件启动nginx,因为在升级过程中系统需要指定用户用指定路径来运行nginx

[root@localhost sbin]# /usr/local/nginx/sbin/nginx 
[root@localhost sbin]# ps -aux | grep nginx
root      14711  0.0  0.0  20584   620 ?        Ss   16:07   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     14712  0.0  0.0  23112  1380 ?        S    16:07   0:00 nginx: worker process
root      14812  0.0  0.0 112824   980 pts/1    R+   16:18   0:00 grep --color=auto nginx

  nginx有两种进程,分别是master、worker。master进程是用来管理worker进程以及在启动nginx时用来读取配置文件的;而worker进程使用来处理用户请求。

  查看 nginx 的 PID 号 除了一般的netstat -lntp | grep nginxss -lntp | grep nginxps aux | grep nginx的常规方式,还可以通过nginx的PID文件查看PID号。一般大部分的应用程序在启动过程中都会生成PID文件。

[root@localhost sbin]# cat /usr/local/nginx/logs/nginx.pid
14711

  通过 kill 命令发送 HUP 信息表示重载配置,发送 QUIT 信息表示退出进程,发送 kill 信息表示杀死进程。当Nginx 进程运行时,PID 号默认存放在 logs/ 目录下得 nginx.pid 文件中,因此若使用 kill 命令,可以根据 PID 号进行控制。

#结束进程
kill -3 <PID号>
kill -s QUIT <PID号>      					 #-s选项表示指定信号种类
killall -3 nginx
killall -s QUIT nginx                        #等同于-3#重载配置
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx                         #等同于-1

  注意,这里谨慎使用 kill -9 选项,可能导致数据丢失,而 kill -3 并不会影响程序运行。

2.3 日志分割以及升级 Nginx 服务

#日志分制,重新打开日志文件
kill -USR1 <PID号>
#平滑升级
ki1l -USR2 <PID号>

  如果想要升级nginx的版本,除了平滑升级外,还可以使用新版本升级。

###需要解压新版本的压缩包
tar -zxvf nginx-1.xx.xx.tar.gz
###进入新版本的配置目录下
cd nginx-1.xx.xx
###加载新的模块
./configure \
-prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
--with-http_ssl_module
###进行编译安装
make
###将原来的可执行文件进行备份,防止升级失败破坏文件
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade  #要保证当前 nginx进程是通过 /usr/locaL/nginx/sbin/nginx启动的,而不是通过查找环境变量中那个nginx命令启动的
#或者先killall nginx ,再/usr/local/nginx/sbin/nginx

2.4 添加 Nginx 系统服务

方法一

  编写脚本来获取nginx系统服务

[root@localhost ~]# cd /etc/init.d/
[root@localhost init.d]# vim /etc/init.d/nginx
#!/bin/bash
###通过chkconfig调用到系统服务当中,设置开机自启动以及第22个启动和第88个关闭
#chkconfig: 35 22 88
###设置相关描述
#description:Nginx Service Control Script
###获取nginx路径
COM="/usr/local/nginx/sbin/nginx"
###获取nginx进程的pid
PID="/usr/local/nginx/logs/nginx.pid"
###获取执行脚本后面跟着的第一个位置变量
case "$1" in
start)netstat -lntp | grep nginxif  [ $? -eq 0 ]thenecho "nginx 已经启动..."elseecho "nginx 正在启动..."$COMfi
;;
stop)kill -s QUIT $(cat $PID)
;;
restart)$0 stop$0 start
;;
reload)kill -s HUP $(cat $PID)
;;
status)netstat -lntp | grep nginxif  [ $? -eq 0 ]thenecho "nginx 已经启动..."elseecho "nginx 没有启动..."fi
;;
*)echo "Usage: $0 {start|stop|restart|reload|status}"
esac

  给脚本赋执行权限以及执行脚本

[root@localhost init.d]# chmod +x /etc/init.d/nginx
###停止nginx
[root@localhost init.d]# ./nginx stop
[root@localhost init.d]# ps -aux | grep nginx
root      73048  0.0  0.0 112824   976 pts/1    R+   17:04   0:00 grep --color=auto nginx
###启动nginx
[root@localhost init.d]# ./nginx start
nginx 正在启动...
###查看nginx
[root@localhost init.d]# ./nginx status
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      73084/nginx: master 
nginx 已经启动...
[root@localhost init.d]# ps -aux | grep nginx
root      73084  0.0  0.0  20584   620 ?        Ss   17:07   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     73085  0.0  0.0  23112  1380 ?        S    17:07   0:00 nginx: worker process
root      73098  0.0  0.0 112824   980 pts/1    R+   17:07   0:00 grep --color=auto nginx

方法二

  添加nginx为nginx.service服务

[root@localhost ~]# cd /usr/lib/systemd/system/
[root@localhost /usr/lib/systemd/system]# ls            #里面都是启动脚本
abrt-ccpp.service                        plymouth-poweroff.service
abrtd.service                            plymouth-quit.service
abrt-oops.service                        plymouth-quit-wait.service
abrt-pstoreoops.service                  plymouth-read-write.service
.......

  配置nginx.service启动脚本

[root@localhost /usr/lib/systemd/system]#vim nginx.service
[Unit]										
Description=nginx							#服务的描述
After=network.target						#描述服务类别,设置依赖关系
[Service]									#服务管理参数
Type=forking								#后台运行类型
PIDFile =/usr/local/nginx/logs/nginx.pid	#PID文件位置
ExecStart=/usr/local/nginx/sbin/nginx		#启动服务
ExecrReload=/bin/kill -s HUP $MAINPID		#根据PID重载配置
ExecrStop=/bin/kill -s QUIT $MAINPID		#根据PID终止进程,其中MAINPID是获取主进程的PID
PrivateTmp=true								#是否给服务配置独立临时空间
[Install]									#服务安装相关设置
WantedBy=multi-user.target					#设置在多用户环境环境当中安装服务

  加载服务并启动

###加载新的 unit 配置文件
[root@localhost system]# systemctl daemon-reload
[root@localhost system]# systemctl start nginx.service
[root@localhost system]# ps -aux | grep nginx
root      75742  0.0  0.0  20584   616 ?        Ss   19:21   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     75743  0.0  0.0  23112  1380 ?        S    19:21   0:00 nginx: worker process
root      75775  0.0  0.0 112824   980 pts/1    S+   19:25   0:00 grep --color=auto nginx

3.配置文件 nginx.conf

  在 Nginx 服务器的主配置文件 /usr/local/nginx/conf/nginx.conf 中,包括全局配置、I/O 事件配置和 HTTP 配置这三大块内容,配置语句的格式为 关键字 值;(末尾以分号表示结束),以#开始的部分表示注释。

###过滤出配置文件中没有#开头以及空行
[root@localhost conf]# cat nginx.conf | egrep -v "^$|^\s*#"
worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

  注意如果需要修改配置文件建议先备份一个文件。

nginx配置文件主要是由以下几个构成的

模块作用
全局块全局配置,对全局生效;
events块配置影响Nginx服务器与用户的网络连接;
http块配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
server块配置虚拟主机的相关参数,一个http 块中可以有多个server块;
location块用于配置匹配的 uri;
upstream配置后端服务器具体地址,负载均衡配置不可或缺的部分。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2F7seyqz-1685545274802)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230531220006045.png)]

3.1 全局配置

  由各种配置语句组成,不使用特定的界定标记。全局配置部分包括 Nginx 服务的运行用户、工作进程数、错误日志、PID存放位置等基本设置。

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
[root@localhost /usr/local/nginx/conf]#cat nginx.conf
#user  nobody;                              #运行用户,若编译时未指定则默认为nobody
worker_processes  1;						#工作进程数量,一般设置为和cPu核数一样;设置为auto,nginx将会自己获取这个数值
#error_log  logs/error.log;					#错误日志存放位置
#error_log  logs/error.log  notice;			
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;                 #PID文件的位置
worker_rlimit_nofile 60000;					#设置所有worker进程最大可以打开的文件数,默认为1024

3.2 I/O事件配置

(1)使用 events { } 界定标记,用来指定 Nginx 进程的 I/O 相应模型,每个进程的连接数等设置(默认为1024)。

events {use epoll;					#使用epoll I/O模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能worker_connections 60000 ;	#每个进程处理60000个连接multi_accept on;			#是否一次性将监听到的连接全接收进来,默认为off,关闭时一次接收一条连接accept_mutex on;			#默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。这可能会浪费资源并产生不可预计的后果,例如惊群问题
}

知识点:

  • 如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。
  • 在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制。(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)
  • epoll是Linux内核为处理大批句柄而作改进的poll,是Linux 下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
  • worker_prcesses的值和work_connections的值决定了最大并发数量,最大并发数计算方式为: worker_prcesses*work_connections。但在反向代理场景中计算方法不同,因为nginx既要维持和客户路的连接,又要维持和后端服务器的连接,因此处理一次连接要占用2个连接,所以最大并发数计算方式为: worker_prcesses*work_connections/2

(2)linux 系统对文件打开的数量有最大的限制,通常设置为1024,这个数值很容易会达到,从而造成系统程序或者系统的瓶颈。

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

###查看当前进程可以打开的最大文件数open files
[root@localhost /usr/local/nginx/conf]# ulimit -a               
...
pending signals                 (-i) 14959
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
...
###修改当前进程可以打开文件的最大数量
[root@localhost /usr/local/nginx/conf]# ulimit -n              
1024
###查看当前系统的最大文件数
[root@nginx /usr/local/nginx/conf]# cat /proc/sys/fs/file-max      
378925
###通过命令ulimit -n 65535可以进行更改
[root@localhost /usr/local/nginx/conf]# ulimit -a 65535
[root@localhost /usr/local/nginx/conf]# ulimit -n
65535

  如果想要永久修改最大连接数,可以在/etc/security/limits.conf文件中修改。

###在最后一行添加如下内容
###第一列为用户和组
###第二列为磁盘限额,软硬限制
###第三列为项目
###第四列为相应项目的数量
[root@localhost conf]# vim etc/security/limits.conf
*                soft    nofile          65535
*                hard    nofile          65535

   其中nofile是指文件描述符。如果还想修改用户可以打开的最大进程数,可以使用nproc参数。如果想要锁定内存大小,可以使用memlock参数。注意:这些参数配置的文件需要重启系统才能生效。

3.3 HTTP配置

(1)使用 http { } 界定标记,包括访问日志、HTTP 端口、网页目录、默认字符集、连接保持,以及虚拟Web主机、PHP解析等一系列设置,其中大部分配置语句都包含在子界定标记 server { }` 内。

http {##文件扩展名与文件类型映射表include mime. types;##默认文件类型default_type application/octet-stream;##日志格式设定#log_format main  	'Sremote addr - $remote user [$time local] "$request" '#					'$status $body_bytes_sent "$http referer" '#					'"$http user agent" "shttp x forwarded for"';##访问日志位置#access_log logs/access.logmain;##开启文件传输模式sendfile 		on; #只在sendfile on时有效。调用tcp_cork方法,让数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵赛。默认为off。#tcp_nopush 	on;##连接保持超时时间,单位是秒#keepalive_timeout   0;keepalive_timeout   65;##gzip模块设置,设置是否开启gzip压缩输出#gzip  on;##web服务的监听配置server {##监听地址及端口listen 80;##站点域名,可以有多个,用空格隔开server_name www.kgc.com;##网页的默认字符集charset utf-8;##根目录配置location / {##网结根目录的位置/usr/local/nginx/htmlroot html;##默认首页文件名index index.html index.php;}##内部错误的反馈页面error_page 500 502 503 504 /50x.html;##错误页面配置location = /50x.html {root html;}}
}

(2)验证能否通过ip地址访问nginx网站

[root@localhost /usr/local/nginx/conf]# cd /usr/local/nginx/html/
###查看是否有错误网页和正常网页文件
[root@localhost /usr/local/nginx/html]# ls
50x.html  index.html
[root@localhost /usr/local/nginx/html]# systemctl stop nginx.service 
[root@localhost /usr/local/nginx/html]# systemctl start nginx.service

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DbYmUVyX-1685545274803)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230531212202938.png)]

3.4 日志文件格式设定

[root@localhost logs]# cat /usr/local/nginx/logs/access.log 
192.168.145.1 - - [31/May/2023:21:20:30 +0800] "GET / HTTP/1.1" 200 615 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
192.168.145.1 - - [31/May/2023:21:20:30 +0800] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.145.45/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"

   用第一行的日志语句来进行解释各个字段的含义:

    192.168.145.1:客户端地址。

   - -:用户名。

   31/May/2023:21:20:30 +0800:访问时间和时区。

   GET / HTTP/1.1:记录请求方法、请求路径、请求协议。/favicon.ico是浏览器访问会自带文件,它是存储网站前面的log图标。

   200:响应状态码。

   615:记录给客户端发送的文件大小。

   -:可以记录用户是从哪个链接访问过来的。如果是直接访问的话是不显示的,可以用来判断防盗链。

   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36:记录客户浏览器的相关信息。

参数含义
$remote_addr客户端的ip地址(代理服务器,显示代理服务ip地址)
$remote_user用于记录远程客户端的用户名称(一般为-
$time_local用于记录访问时间和时区
$request用来记录请求的uri与http协议
$status用来记录响应状态码,例如:200成功、404页面找不到等。
$body_bytes_sent给客户端发送的文件主体内容字节数
$http_user_agent记录客户浏览器的相关信息
$http_x_forwarded_for可以记录客户端IP,通过代理服务器来记录客户端的ip地址
$http_referer可以记录用户是从哪个链接访问过来的

remote_addr 和 http_x_forwarded_for 的区别

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

  简单来说,比如客户访问服务器,中间有个代理服务器,那么$remote _addr获取的IP地址是客户端发来的,而http_x_forwarded_for会获取客户端发给代理服务器的IP地址以及代理服务器发送给服务器的IP地址。

3.5 location常见配置指令

location / {##网结根目录的位置/usr/local/nginx/htmlroot html;##默认首页文件名index index.html index.php;}

  在location模块下可以添加以下参数进行文件目录配置:

root、 alias、 proxy_pass
root(根路径配置)root /var/www/html请求www.kgc.com/test/1.html,会返回文件/var/www/html/test/1.html
alias (别名配置)alias /var/www/html请求www.kgc.com/test/1.html,会返回文件/var/www/html/1.html
proxy _pass(反向代理配置)

三、Nginx访问控制

1.访问状态统计

1.1 查看已经安装模块

  Nginx内置了 HTTP_STUB_STATUS 状态统计模块,用来反馈当前得 Web 访问情况,配置编译参数时可添加--with-http_stup_status_dodule 来启用此模块支持。

###查看已安装的 Nginx 是否包含 HTTP STUB STATUS 模块
[root@localhost ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.24.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@localhost ~]# cd /opt/nginx-1.24.0/auto/
###可查看 nginx是否安装了HTTP_STUB_STATUS
[root@localhost auto]# cat options  | grep "HTTP_STUB_STATUS"
HTTP_STUB_STATUS=NO--with-http_stub_status_module)  HTTP_STUB_STATUS=YES 

1.2 修改配置文件

  要使用 Nginx 的状态统计功能,除了启用内建模块以外,还需要修改 nginx.conf 配置文件,指定访问位置并添加stub_status 配置代码。(修改之前进行备份)

[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# vim /usr/local/nginx/conf/nginx.conf
.....
http {
.....server {listen 80;server name www.kgc.com;charset utf-8;location / {root html;index index.html index.php;}##添加 stub status 配置##			location /status {						#访问位置为/statusstub_status on;						#打开状态统计功能access_log off;						#关闭访问/status目录下页面的访问日志记录}}
}

1.3 重启服务,访问测试

[root@localhost conf]# systemctl restart nginx.service浏览器访问 http://192.168.145.45/status

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AQSonIHo-1685545274804)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230531224136063.png)]

Active connections:表示当前的活动连接数,即当前与 Nqinx 服务器建立的连接数。
server accepts handled requests:表示已经处理的连接信息。
2 2 1:服务器已接收的连接数:服务器成功处理的连接数;服务器累计处理的总请求数(在保持连接模式下,请求数量可能会大于连接数量)。
Reading:表示当前正在从客户端读取数据的连接数。
Writing:表示当前正在从客户端写入数据的连接数。
Waiting:表示当前空闲等待请求的连接数。

1.4 判断服务器并发量

  编写脚本用来判断

[root@localhost ~]# cat test.sh 
#!/bin/bash
while true
doACTIVECONN=$(curl -Ls 192.168.145.45/status | awk '/Active connections/{print $3}')if [ $ACTIVECONN -ge 2 ]then echo "警告!当前并发连接过高!当前并发连接数为:$ACTIVECONN 。"fisleep 10
done

  执行脚本并打开多个浏览器访问192.168.145.45/status

###将脚本放在后台运行
[root@localhost ~]# ./test.sh &
[1] 78016
[root@localhost ~]# curl -Ls 192.168.145.45/status
Active connections: 1 
server accepts handled requests10 10 9 
Reading: 0 Writing: 1 Waiting: 0 
[root@localhost ~]# 警告!当前并发连接过高!当前并发连接数为:3 。
警告!当前并发连接过高!当前并发连接数为:3 。

2.

相关文章:

【Web服务器集群】Nginx网站服务

文章目录 一、Nginx 概述1.什么是 Nginx2.Nginx 的特点3.Nginx 应用场景 二、Nginx 服务基础1.编译安装 Nginx 服务1.1 布置环境1.2 安装依赖包1.3 创建运行用户、组1.4 编译安装 2.Nginx 的运行控制2.1 检查配置文件2.2 启动、停止 Nginx2.3 日志分割以及升级 Nginx 服务2.4 添…...

开始第一个vue项目,环境搭建+html项目运行

【用vue.js&#xff0c;通过script标签导入】 1. 搭建vue脚手架 安装node js安装cnpm&#xff08;淘宝源&#xff09; 【vue】在windows中搭建vue开发环境&#xff08;全网最详细&#xff09;_vue环境搭建_一起来学吧的博客-CSDN博客2a 2. 官网下载地址&#xff1a; 安装 …...

Redis 的数据类型和命令帮助

文章结构 Redis 数据类型1. Redis全局命令&#xff08;跟key有关系&#xff0c;而跟value无关&#xff09;2. StringsGetting and setting StringsManaging counters 3. Lists(L)Basic commandsBlocking commands 4. Sets(S)Basic commands 5. Hashes(H)Basic commands 6. Sort…...

【C++11】智能指针

什么是智能指针&#xff1a; 智能指针是一个类&#xff0c;用来存储指向动态分配对象的指针&#xff0c;负责自动释放动态分配的对象&#xff0c;防止堆内存泄漏。动态分配的资源&#xff0c;交给一个类对象去管理&#xff0c;当类对象声明周期结束时&#xff0c;自动调用析构函…...

三、Go的常用命令以及Go的执行原理

Go的执行原理以及Go的命令 一、Go的源码文件 Go 的源码文件分类&#xff1a; 如上图&#xff0c;分为三类&#xff1a; 1、命令源码文件&#xff1a; 声明自己属于 main 代码包、包含无参数声明和结果声明的 main 函数。 命令源码文件被安装以后&#xff0c;GOPATH 如果…...

ESP32 CAM 模块和 OpenCV 的二维码扫描器

概述 该项目是关于使用 ESP32 CAM 模块和 OpenCV 设计的二维码扫描仪或阅读器。我们将使用 ESP32 摄像头模块和 python 库开发一个程序和设备,我们可以用它来扫描二维码。使用 ESP32 CAM,项目变得更便宜。 QR 码现在已经成为我们日常生活的一部分,因为我们几乎在任何地方都…...

多链路传输技术在火山引擎 RTC 的探索和实践

动手点关注 干货不迷路 传统的数据传输方式大多是利用一个链路、选择设备的默认网卡进行传输&#xff0c;使用这种方式实现实时音视频通话时&#xff0c;如果默认网络出现问题&#xff08;如断网、弱网等&#xff09;&#xff0c;用户的通信就会发生中断或者卡顿&#xff0c;影…...

在Flask中构建API接口

重定向行为 斜杠 以下两个路由的不同之处在于是否使用尾部的斜杠。 第一个路由的URL尾部有一个斜杠&#xff0c;看起来就像一个文件夹&#xff0c;访问一个没有斜杠结尾的URL时&#xff0c;Flask会自动进行重定向&#xff0c;在结尾加上一个斜杠。 第二个路由的URL没有尾部…...

Postgres vs MySQL

主要区别及示例 简而言之&#xff0c;Postgres 和 MySQL 之间的主要区别实际上归结为主索引和辅助索引的实现方式以及数据的存储和更新方式。 让我们进一步探讨这个问题。 但首先... 基础知识 索引是一种数据结构&#xff08;主要是 B 树&#xff09;&#xff0c;允许通过…...

02.IP地址以及静态路由配置

文章目录 IP地址IP地址分类IPV4地址(32位)IPV4地址的分类特殊IP地址 VLSM --- 可变长子网掩码(子网划分)CLDR --- 无类域间路由(汇总)配置静态路由的基础配置静态路由的拓展配置 IP地址 IP地址分类 IPV4(32位二进制构成) — 点分十进制IPV6(128位二进制构成) — 冒分十六进制…...

GD32(STM32)因为中断问题,导致不能进行程序 正常运行

项目中&#xff0c;之前定时器中断就用了个TIM2&#xff0c;但后来程序优化需要再加一个计数定时器TIM6&#xff0c; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // 开启定时器时钟,即内部时钟CK_INT72M RCC_APB1PeriphClockCmd(RCC_APB1Perip…...

华为OD机试真题B卷 Java 实现【统计字符】,附详细解题思路

一、题目描述 输入一行字符&#xff0c;分别统计出包含英文字母、空格、数字和其它字符的个数。 数据范围&#xff1a;输入的字符串长度满足 1 \le n \le 1000 \1≤n≤1000 。 二、输入描述 输入一行字符串&#xff0c;可以有空格。 三、输出描述 统计其中英文字符&#…...

深入理解设计原则之开闭原则(OCP)

系列文章目录 C高性能优化编程系列 深入理解设计原则系列 深入理解设计模式系列 高级C并发线程编程 OCP&#xff1a;开闭原则 系列文章目录1、开闭原则的定义和解读2、如何理解“对扩展开放&#xff0c;对修改关闭”3、实现开闭原则的方法4、如何在团队协作中保证开闭原则的实…...

【学习随笔】

2022/11/13 HTML :讲完了 css&#xff1a;讲完了 作业&#xff1a;编写登陆界面、整理一下sql优化,对于mybatis不熟练的继续练习 关于MySQL优化的问题? 思路总结&#xff1a;主要考虑数据库优化与SQL语句优化。 1&#xff0c;数据库优化&#xff0c;包括存储引擎的优化&…...

【多路IO复用】select

select: 1.select&#xff1a;当被监听的 fd&#xff08;文件描述符&#xff09;就绪后会返回&#xff0c;但是我们无法知道具体是哪些 fd 就绪了&#xff0c;只能遍历所有的 fd。通常来说某一时刻&#xff0c;就绪的 fd 并不会很多&#xff0c;但是使用 select 必须要遍历所有…...

cuda编程学习——基础知识介绍!干货向(三)

本文主要内容为介绍CUDA编程前的一些基础知识 参考资料&#xff1a; 高升博客 《CUDA C编程权威指南》 以及 CUDA官方文档 文章、讲解视频同步更新公众《AI知识物语》&#xff0c;B站&#xff1a;出门吃三碗饭 1&#xff1a;并行计算 并行程序可以分为 指令并行&#xff1…...

30 VueComponent 事件的绑定

前言 这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 主要记录的是 vue 的相关实现机制 呵呵 理解本文需要 vue 的使用基础, js 的使用基础 测试用例 用例如下, 我们这里核心关注 事件的处理流程 问题的调试 整个…...

作用域及作用域链

作用域 隔离变量的集合 作用域最大的用处就是隔离变量&#xff0c;不同作用域内的同名变量不会有命名冲突。 作用域类型 全局作用域&#xff0c;函数作用域和块级作用域。 1&#xff09;全局作用域&#xff0c;在整个代码文件中都可以访问的作用域。 2&#xff09;函数作用域…...

深入解析Linux C/C++ 编程中的内存泄漏问题

深入解析Linux C/C 编程中的内存泄漏问题 I. 前言 (Introduction)1.1 文章目的与内容概述 (Purpose and Overview of the Content)1.2 重要性和实用性的说明 (Significance and Practicality Explanation)1.3 数据结构与内存泄漏的基本概念 (Basic Concepts of Data Structure …...

【爬虫第三章】 Python基础

预计更新一、 爬虫技术概述 1.1 什么是爬虫技术 1.2 爬虫技术的应用领域 1.3 爬虫技术的工作原理 二、 网络协议和HTTP协议 2.1 网络协议概述 2.2 HTTP协议介绍 2.3 HTTP请求和响应 三、 Python基础 3.1 Python语言概述 3.2 Python的基本数据类型 3.3 Python的流程控制语句 3…...

电力系统的虚假数据注入攻击和MTD系统研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

【阿里云】阿里云OSS对象存储— 开通OSS服务、搭建OSS环境、快速入门

目录 一、开通OSS服务 二、搭建OSS环境 1、创建Bucket存储空间 2. 创建文件夹上传图片 3. RAM 访问控制 三、快速入门 1.下载SDK 2.创建存储空间[可选] 3.上传图片 一、开通OSS服务 二、搭建OSS环境 1、创建Bucket存储空间 选择 Bucket列表&#xff0c;进行Bucket创建…...

代理对象Proxy是什么

Proxy是ES6&#xff08;ECMAScript 2015&#xff09;引入的一个特性&#xff0c;它是一种用于创建代理对象的构造函数。代理对象可以用来拦截并自定义对目标对象的操作。 通过使用Proxy&#xff0c;您可以在目标对象上设置各种拦截器&#xff08;称为"陷阱"&#xf…...

会话跟踪cookie和session

什么是会话跟踪技术 会话&#xff1a;用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可能包含多次请求和响应。 会话跟踪&#xff1a;一种维护浏览器状态的方法&#xff0c;服务器需…...

ACS Cent. Sci 2018 | 数据驱动的分子连续表征的自动化学设计

原文标题&#xff1a;Automatic Chemical Design Using a Data-Driven Continuous Representation of Molecules 代码&#xff1a;https://github.com/aspuru-guzik-group/chemical_vae 原文链接&#xff1a;https://pubs.acs.org/doi/10.1021/acscentsci.7b00572 Automatic…...

安卓Termux搭建web服务器【公网远程手机Android服务器】

文章目录 概述1.搭建apache2.安装cpolar内网穿透3.公网访问配置4.固定公网地址5.添加站点 概述 Termux是一个Android终端仿真应用程序&#xff0c;用于在 Android 手机上搭建一个完整的Linux 环境&#xff0c;能够实现Linux下的许多基本操作&#xff0c;不需要root权限Termux就…...

【大数据之Hive】二、Hive安装

Hive安装部署&#xff08;最小化部署&#xff09; 安装部署Hive&#xff08;最小化只用于本机测试环境中&#xff0c;不可用于生产环境&#xff09;&#xff0c;并运行。 步骤&#xff1a; &#xff08;1&#xff09;把apache-hive-3.1.3-bin.tar.gz解压到/opt/module/目录下&…...

三大特性之多态

文章目录 静态的多态动态的多态虚函数虚函数的重写&#xff08;覆盖&#xff09;利用虚函数重写实现多态重写的两个例外1.协变2.析构函数的函数名不同 C11的override和final 重载&#xff0c;重写&#xff08;覆盖&#xff09;&#xff0c;重定义&#xff08;隐藏&#xff09;抽…...

单调队列优化dp

文章目录 单调队列优化dp烽火传递修剪草坪绿色通道琪露诺旅行问题Watching Fireworks is Fun瑰丽华尔兹股票交易 单调队列优化dp 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 单调队列优化dp的建模形式&#xff1a;这是窗口右滑动的情况 对于窗口左滑动的也是同理。…...

【低压配电漏电继电器660V/LLJ-100H/AC220V 中性点漏电保护 JOSEF】

LLJ-F(S)系列漏电继电器 系列型号&#xff1a; LLJ-10F(S)漏电继电器LLJ-15F(S)漏电继电器LLJ-16F(S)漏电继电器 LLJ-25F(S)漏电继电器LLJ-30F(S)漏电继电器LLJ-32F(S)漏电继电器 LLJ-60F(S)漏电继电器LLJ-63F(S)漏电继电器LLJ-80F(S)漏电继电器 LLJ-100F(S)漏电继电器LLJ-120…...