目录
3、查看Nginx支持的最大并发量(软件支持、系统支持、CPU性能):
4.1 查看nginx的安装模块,是否包含 HTTP_STUB_STATUS 模块
4.12查看 /opt/nginx-1.12.2/auto/options 文件:
4.13 查看 HTTP_STUB_STATUS 模块是否已安装:
4.2 修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置
一、Nginx概述
1.1 Nginx概述
Nginx 是开源、高性能、轻量级、稳定性高的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。对HTTP并发连接的处理能力高,单台物理服务器可支持30000~50000个并发请求。
1.2 Nginx和Apache的差异
轻量级,nginx比apache占用更少的内存及资源 |
静态处理,Nginx静态处理性能比Apache高 |
Nginx可以实现五缓存的反向代理加速,提高网站运行速度 |
Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件 |
Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级 |
nginx是异步进程,多个连接可以对应一个进程;apache是同步多进程,一个连接对应一个进程 |
Nginx高度模块化,编写模块相应简单,且组件比Apache少 |
高并发下nginx能保持低资源低消耗高性能 |
Nginx配置简介,Apache配置复杂 |
1.3 nginx和apache区别
nginx更轻量 比apache占用更少的内存资源 |
nginx抗并发能力更强 |
nginx是模块化设计,配置相对简单,组件也比较apache少 |
nginx处理请求是异步非阻塞,apache是同步阻塞性的 |
nginx可以多个连接对应一个进程,apache是一个连接对应一个进程 |
1.4 Nginx的进程
Apache和Nginx的默认端口都是80,如果其中一个已经启动了,那么再启动另一个会报错。如果想要同时使用,可以修改其中一个的端口号。
Nginx有两个进程:
master process:主进程(守护进程),用来管理工作进程。
worker process:工作进程,用来处理用户的请求。
二、编译安装nginx服务
1:关闭防火墙,将nginx所需压缩包上传到/opt目录下
systemctl stop firewalld
setenforce 0
ls /opt/
nginx-1.12.2.tar.gz rh
2 :安装依赖包
nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。
yum install -y pcre-devel zlib-devel gcc gcc-c++ make
#各程序作用解释如下:
gcc #C语言的编译器
gcc-c++ #C++的编译器
make #源代码编译器(源代码转换成二进制文件)
pcre-devel #perl的接口开发包,提供正则表达式
zlib-devel #提供压缩功能
3: 创建运行用户和组,便于管理
useradd -M -s /sbin/nologin nginx
4 解压软件包,编译安装nginx
5 将nginx的操作指令放入环境变量PATH的目录下
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ //让系统识别nginx的操作指令
6 检查、启动、重启、停止nginx服务
检查配置文件是否配置正确,并启动nginx服务
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
7 多种方式查看nginx的PID号
8 停止nginx服务
注意:nginx有主进程和工作进程,一定要杀死主进程(即父进程)
9 重载nginx服务
10 日志分割(移走原有日志,重新打开日志文件)
11 升级nginx服务
#平滑升级: kill -USR2 <PID号>
#新版本升级:
tar zxvf nginx-XX.XX.tar.gz #XX代表新版本号
cd nginx-XX.XX
./configure \
--prefix=/usr/local/nginx \
--user=nginx \ --group=nginx \
--with-http_stub_status_module \
--w#ith-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 #编译升级
#或者先 killall -3 nginx ,再 /usr/local/nginx/sbin/nginx
12 添加nginx系统服务
方法一:
方法二:
将nginx命令加入服务,编写/lib/systemd/system/nginx.service文件。
/lib/systemd/system/nginx.service文件注释:
13 浏览器访问验证
使用浏览器输入本机IP地址,访问验证。
默认首页文件位置在 /usr/local/nginx/html/ 目录下。
cd /usr/local/nginx/html //首页文件默认存放在该目录下
ls //index.html是默认首页文件
50x.html index.html
三、Nginx服务的主配置文件
主配置文件位置:/usr/local/nginx/conf/nginx.conf
/usr/local/nginx/conf/ 目录下:
nginx.conf 是主配置文件
nginx.conf.default 是主配置文件的备份文件
主配置文件中有六个主要模块:
1、全局块:全局配置,对全局生效。
2、events块:配置影响Nginx服务器与用户的网络连接。
3、http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
4、server块:配置虚拟主机的相关参数,一个http块中可以有多个server 块。每个 server 块就相当于一个虚拟主机。。
5、location块:用于配置匹配的url,一个server块中可以有多个location块。
6、upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。
1 、全局块(全局配置)
就是配置文件从头开始到 events 块之间的内容,主要设置的是影响nginx服务器整体运行的配置指令。比如 worker_process,值越大,可以支持的并发处理量也越多,但是还是和服务器的硬件相关。
vim /usr/local/nginx/conf/nginx.conf
#user nobody; //运行用户,若编译时未指定则默认为nobody,若编译指定了用户则会写到二进制程序里变成默认配置。此前编译时指定了"--user=nginx",所以现在二进制程序中的运行用户为nginx
worker_processes 1; //工作进程数量,一般设置为和CPU核数一样
#error_log logs/error.log; //错误日志文件的位置
#pid logs/nginx.pid; //PID文件的位置
2 、events块( I/O 事件配置)
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等。
3、查看Nginx支持的最大并发量(软件支持、系统支持、CPU性能):
1、软件支持
软件配置支持多少并发量,由主配置文件nginx.conf决定:理论上支持的并发量=工作进程数量×每个工作进程处理的连接数。
2、系统支持
使用"ulimit -a"可查看系统允许当前用户进程打开的文件数限制。
修改系统支持的最大并发量:
- “ulimit -n 65535”命令可临时修改本地每个用户进程可以同时打开的最大文件数。
- vim /etc/security/limits.conf,编辑该文件可永久修改。
3、查看nginx支持的文件类型:
3.1: 全局 server 块
最常见的配置是本虚拟机主机的监听配置,和本虚拟主机的名称或 IP 配置。
#监听地址及端口
listen 80;
#站点域名,可以有多个,用空格隔开
server_name www.yuji.com;
3.2 location块
- 一个 server 块可以配置多个 location 块。
- 主要作用是根据请求地址路径的匹配,匹配成功进行特定的处理。
- 这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
location常见配置指令:root、alias、proxy_pass
- root(根路径配置):root /var/www/html 请求www.yuji.com/test/1.html,会返回文件/var/www/html/test/1.html
- alias(别名配置,即虚拟路径):alias /var/www/html 请求www.yuji.com/test/1.html,会返回文件/var/www/html/1.html
- proxy_pass(反向代理配置)
四、访问状态统计配置
4.1 查看nginx的安装模块,是否包含 HTTP_STUB_STATUS 模块
先使用命令 /usr/local/nginx/sbin/nginx -V 查看已安装的nginx是否包含 HTTP_STUB_STATUS 模块。
nginx -v #查看nginx的版本。此前已将nginx的可执行文件放入PATH的目录中,所以可以直接使用nginx命令
nginx -V #查看nginx的版本,以及编译安装时的配置参数
cat /opt/nginx-1.12.2/auto/options #查看nginx已安装和未安装的模块,with表示已安装,without表示未安装
cat /opt/nginx-1.12.2/auto/options | grep "YES" #查看nginx已安装的所有模块
4.11查看版本和编译安装时的配置参数:
4.12查看 /opt/nginx-1.12.2/auto/options 文件:
4.13 查看 HTTP_STUB_STATUS 模块是否已安装:
cat /opt/nginx-1.12.2/auto/options | grep "HTTP_STUB_STATUS"
HTTP_STUB_STATUS=NO #此处NO表示该模块不是默认安装的
--with-http_stub_status_module) HTTP_STUB_STATUS=YES ;; #表示该模块已安装
4.2 修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置
4.3 重启服务,访问测试
通过命令进行访问:
监控nginx当前并发数量:
可使用 curl -Ls http://192.168.72.10/status 结合awk与if语句进行性能监控。
五、基于授权的访问控制(只有指定用户能访问)
设置只有指定用户才可以访问该网页,想要对哪个路径进行限制,就在location下添加路径和认证配置。
我这里直接使用根目录做实验。
5.1 生成用户密码认证文件
用户密码认证文件的文件名自拟。
但文件属主必须修改为nginx,文件权限必须设置为400。
5.2 修改主配置文件和相对应的目录,添加认证配置项
想要对哪个路径进行限制,就在对应的location块下添加认证配置项。
我这里直接使用根目录做实验
5.3 重启服务,访问测试
六、基于客户端的访问控制
设置只有指定IP/IP段才可以访问该网页,或指定IP/IP段不能访问。想要对哪个路径进行限制,就在location块下添加路径和控制规则,我这里直接使用根目录做实验。
访问控制规则如下:
- deny IP/IP段:拒绝某个IP或IP段的客户端访问。(黑名单)
- allow IP/IP段:允许某个IP或IP段的客户端访问。(白名单)
- 规则从上往下执行,匹配到则停止,不再往下匹配。
示例1:
注意要先关闭web服务器的防火墙,以免防火墙的原因导致无法访问。
示例2:
规则从上往下执行,匹配到则停止,不再往下匹配。
所以如果同一个IP既被拒绝访问,又被允许访问,要看哪一条规则在上方,匹配到上方的规则后就停止,不再往下匹配。