2.Nginx安装
2.1Nginx概述
2.1.1 Nginx介绍
Nginx(engine x),2002 年开发,分为社区版和商业版(nginx plus)
2019 年3 月 15 日 F5 Networks 6.7 亿美元的价格收购
nginx是免费的、开源的、高性能的 HTTP 和反向代理服务器、邮件代理服务器、以及 TCP/UDP
代理服务器。
nginx其他二次发行版:
Tengine:由淘宝网发起的 Web 服务器项目,它在 Nginx 的基础上,针对大访问量的需求,
添加了很多高级功能和特性。Tenginx 的性能和稳定性已经在大型的网站如淘宝网、天猫商城等
得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的 Web 平台。从2011年12月
开始,Tengine 成为一个开源项目。官网:http://tengine.taobao.org/
OpenResty:基于Nginx与Lua语言的高性能Web平台,章亦春团队开发。
官网:http://openresy.org/cn/
2.1.2 Nginx功能介绍
1.静态的web资源服务器 html、图片、js、css、txt 等静态资源
2.http/https协议的反向代理
3.结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
4.tcp/udp协议的请求转发(反向代理)
5.imap4/pop4协议的反向代理
2.2 Nginx架构和进程
2.2.1 Nginx架构

2.2.2 Nginx进程
nginx是多进程组织模式,而且是一个由 Master 主进程和 Worker 工作进程组成。

主进程(master process)的功能:
1.对外接口:接收外部的操作(信号)
2.对内转发:根据外部的操作的不同,通过信号管理 Worker
3.监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
4.读取nginx配置文件并验证其有效性和正确性
5.建立、绑定和关闭socket连接
6.按照配置生成、管理和结束工作进程
7.接受外界指令,比如重启、升级及退出服务器等指令
8.不中断服务,实现平滑升级,重启服务并应用新的配置
9.开启日志文件,获取文件描述符
10.不中断服务,实现平滑升级,升级失败进行回滚处理
11.编译和处理perl脚本
工作进程(Worker Process)的功能:
1.所有 worker 进程都是平等的
2.实际处理:网络请求,由 worker 进程处理
3.worker 进程数量:一般设置为核心数,充分利用 CPU 资源,同时避免进程数量过多,导致
进程竞争CPU 资源,增加上下文切换的损耗
4.接受处理客户的请求
5.将请求依次送入各个功能模块进行处理
6.I/O调用,获取响应数据
7.与后端服务器通信,接收后端服务的处理结果
8.缓存数据,访问缓存索引,查询和调用缓存数据
9.发送请求结果,响应客户的请求
10.接收主程序指令,比如重启、升级和退出等
2.2.3 Nginx和HTTP连接建立

nginx启动时,Master进程,加载配置文件
Master进程,初始化监听的socket
Master进程,fork出多个Worker进程
Worker进程,竞争新的连接,获取方通过三次握手,建立Socket连接,并处理请求
2.2.4 HTTP处理过程

nginx是一种高性能的Web服务器,可以处理大量的并发HTTP请求。nginx在处理HTTP请求时采用了高效的事件驱动模型,使用异步IO等技术实现了高性能、低延迟的请求处理。
在处理HTTP请求时,nginx会通过以下步骤进行处理:
1.读取请求:当客户端发送HTTP请求时,Nginx会使用socket接口读取请求,包括请求头和请求体
2.解析请求:Nginx会对请求进行解析,包括解析请求方法、请求路径、查询参数等信息。Nginx还会
对请求头进行解析,包括解析Host、User-Agent、Content-Type等字段,这些信息可以在后续处
理中使用。
3.处理请求:根据解析得到的请求信息,Nginx会进行请求处理。比如,如果请求路径对应的是一个
静态文件,Nginx会直接返回文件内容;如果请求路径对应的是一个动态页面,Nginx会将请求转发
给对应的后端服务器。
4.处理请求体:如果请求包含请求体,Nginx会将请求体读取到内存中,以供后续处理使用。
5.处理响应:当请求处理完成后,Nginx会根据处理结果生成响应,并发送给客户端。Nginx会将响应
头和响应体一起发送给客户端,响应头中包含响应状态码、响应头字段等信息。
6.关闭连接:当请求处理完成后,Nginx会关闭连接,释放资源,等待下一个请求。
2.3 Nginx模块介绍
nginx有多种模块:
1.核心模块:
是Nginx服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析、事件驱动机制、
进程管理等核心功能。
2.标准HTTP模块:
提供HTTP协议解析相关的功能,比如:端口配置、网页编码设置、HTTP响应头设置等
3.可行HTTP模块:
主要用于扩展标准的HTTP功能,让Nginx能处理一些特殊的服务,比如:Flash多媒体传输、
解析 GeoIP 请求、网络传输压缩、安全协议 SSL 支持等
4.邮件服务模块:
主要用于支持Nginx的邮件服务,包括对 POP3 协议、IMAP 协议和 SMTP 协议的支持
5.Stream服务模块:
实现反向代理功能,包括 TCP 协议代理
6.第三方模块:
是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如:json 支持、Lua 支持等
Nginx 高度模块化,但其模块早期不支持 DSO 机制;1.9.11 版本支持动态装载和卸载。

2.4 安装Nginx
Nginx分为社区版和商业版本,一般是社区版。
2.4.1 本地仓库安装(推荐)
#本地仓库安装
[root@localhost ~]# dnf -y install nginx
#删除本地安装
[root@localhost ~]# dnf -y remove nginx
#查看安装版本:1.20.1
[root@localhost ~]# rpm -qa |grep nginx
nginx-filesystem-1.20.1-14.el9_2.1.noarch
2.4.2 官方安装
1.首先打开官方网址:www.nignx.org 点击:install

2.选择Linux安装,点击:packages

3.选择RHEL

4.按照系统提示配置本地仓库:

#创建库文件并修改
[root@localhost ~]# vim /etc/yum.repos.d/nginx.repo
......直接复制粘贴......
5.安装Nginx(稳定版 or 最新版)
#安装Nginx
[root@localhost ~]# dnf -y install nginx
#查看安装版本:1.26.2稳定版本
[root@localhost ~]# rpm -qa |grep nginx
nginx-1.26.2-1.el9.ngx.x86_64
#默认安装稳定版本,要想安装最新版本需要执行以下命令
#启动mainline服务
[root@localhost ~]# dnf config-manager --enable nginx-mainline
#安装最新版本(需要先删除旧版本)
[root@localhost ~]# dnf -y install nginx
#查看安装版本
[root@localhost ~]# rpm -qa | grep nginx
nginx-1.27.2-1.el9.ngx.x86_64
2.4.3 源码安装
1.去网站下载源码包 点击download--选择要下载的版本

2.把安装包加载到虚拟机中,创建目录对其存放和解压:
#创建Nginx目录用于存放压缩包和操作
[root@localhost ~]# mkdir -p /root/Nginx
#把压缩包移动到Nginx目录
[root@localhost ~]# mv nginx-1.27.2.tar.gz /root/Nginx/
#解压压缩包
[root@localhost ~]# cd Nginx/
[root@localhost Nginx]# tar -zxvf nginx-1.27.2.tar.gz
遇到点麻烦,先暂停更新。。。。。
2.5 控制服务
1.启动服务
#启动nginx服务
[root@localhost ~]# nginx
or
[root@localhost ~]# systemctl start nginx
#查看nginx服务状态
[root@localhost ~]# netstat -lntup | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 20599/nginx: master
tcp6 0 0 :::80 :::* LISTEN 20599/nginx: master
2.停止服务
#停止服务
[root@localhost ~]# nginx -s stop
or
[root@localhost ~]# systemctl stop nginx
#查看nginx服务状态
[root@localhost ~]# netstat -lntup | grep nginx
2.6 自定义页面
1.查看默认页面
#查看默认页面:
[root@localhost ~]# firefox localhost
or
[root@localhost ~]# curl localhost
注意:localhost为主机名

2.自定义页面
#使用rpm命令查看nginx页面文件所在目录
[root@localhost ~]# rpm -ql nginx
/usr/share/nginx/html/icons
#进入页面文件目录
[root@localhost ~]# cd /usr/share/nginx/html/
#可以进入页面进行自定义
[root@localhost html]# ll
lrwxrwxrwx. 1 root root 25 Oct 11 2023 index.html -> ../../testpage/index.html
3.Nginx配置

3.1 配置文件说明
Nginx的配置文件的组成部分:
1.主配置文件:/etc/nginx/nginx.conf
2.子配置文件:include conf.d/*.conf
3.fastcgi,uwsgi,scgi 等协议相关的配置文件
4.mime.types:支持的 mime 类型,MIME(Multipurpose Internet Mail Extensions)
多用途互联网邮件扩展类型,MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据,
是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器
会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式
Nginx配置文件格式说明:
配置文件由指令与指令块构成
每条指令以分号结尾,指令与值之间以空格符号分隔
可以将多条指令放在同一行,用分号分隔即可,但可读性差,不推荐
指令块以{}大括号将多条指令组织在一起,且可以嵌套指令块
include语句允许组合多个配置文件以提升可维护性
使用#符号添加注释,提高可读性
使用$符号使用变量
部分指令的参数支持正则表达式
Nginx主配置文件的配置指令方式:
directive value [value2 ...];
注意:
(1)指令必须以分号结尾
(2)支持使用配置变量
内建变量:由 Nginx 模块引入,可直接引用
自定义变量:由用户使用 set 命令定义,格式:set variable_name value;
引用变量:$varialbe_name
主配置文件结构:四部分
main block:主配置段,即全局配置段,对 http,mail 都有效
# 事件驱动相关的配置
event {
... }
# http/https 协议相关配置段
http {
... }
# 默认配置文件不包括下面两个块
# mail 协议相关配置段
mail {
... }
# stream 服务器相关配置段
stream {
...}
默认主配置文件结构:



3.2 配置基于主机名的Web服务器
1.防火墙设置
#将HTTP服务添加到防火墙或关闭防火墙
[root@localhost ~]# firewall-cmd --permanent --add-service=http
[root@localhost ~]# systemctl restart firewalld
or
[root@localhost ~]# systemctl stop firewalld
2.关闭安全机制
#关闭安全机制(先照做,后面会讲)
[root@localhost ~]# setenforce 0
3.编辑/etc/hosts文件
#编辑/etc/hosts文件
[root@localhost ~]# vim /etc/hosts
192.168.91.129 www.4399.com
192.168.91.129 www.4399.net
4.编辑/etc/nginx/conf.d/文件
#进入nginx内容配置文件
[root@localhost ~]# cd /etc/nginx/conf.d/
#创建com.conf文件并编辑
[root@localhost conf.d]# vim com.conf
server{
server_name www.4399.com;
root /var/www/4399.com/;
access_log /var/log/nginx/4399.com/access.log;
error_log /var/log/nginx/4399.com/error.log;
}
#创建net.conf文件并编辑
[root@localhost conf.d]# vim net.conf
server{
server_name www.4399.net;
root /var/www/4399.net/;
access_log /var/log/nginx/4399.net/access.log;
error_log /var/log/nginx/4399.net/error.log;
}
5.创建页面显示文件
#创建4399.com服务器显示文件及编辑
#创建4399.com目录
[root@localhost conf.d]# mkdir -p /var/www/4399.com/
#创建显示文件index.html并编辑
[root@localhost conf.d]# echo "Welcome to 4399.com!" > /var/www/4399.com/index.html
#创建4399.com日志文件
[root@localhost conf.d]# cd /var/log/nginx/
[root@localhost nginx]# mkdir 4399.com
#创建4399.net服务器显示文件及编辑
#创建4399.net目录
[root@localhost conf.d]# mkdir -p /var/www/4399.net/
#创建显示文件index.html并编辑
[root@localhost conf.d]# echo "Welcome to 4399.net!" > /var/www/4399.net/index.html
#创建4399.net日志文件
[root@localhost conf.d]# mkdir /var/log/nginx/4399.net
6.重新加载nginx服务
[root@localhost conf.d]# systemctl restart nginx
7.访问nginx基于主机名的Web服务器服务
#1.使用curl命令抓取页面
[root@localhost example.com]# curl www.example.com
Welcome to 4399.com!
#2.使用firefox命令访问页面
[root@localhost example.com]# firefox http://www.example.com/index.html
#注意:在主机名后添加/index.html与否,显示结果不同
3.3 配置基于端口的Web服务器
1.编辑/etc/nginx/conf.d文件
#进入nginx内容配置文件:
[root@localhost ~]# cd /etc/nginx/conf.d/
#配置9091.conf文件
[root@localhost conf.d]# vim 9091.conf
server{
listen 9091;
server_name _;
root /var/www/9091/;
access_log /var/log/nginx/9091/access.log;
error_log /var/log/nginx/9091/error.log;
}
#配置9092.conf文件
[root@localhost conf.d]# vim 9092.conf
server{
listen 9092;
server_name _;
root /var/www/9092/;
access_log /var/log/nginx/9092/access.log;
error_log /var/log/nginx/9092/error.log;
}
2.创建页面显示文件
#创建9091端口服务器显示文件及编辑
[root@localhost conf.d]# cd /var/www
#创建9091目录
[root@localhost www]# mkdir 9091
#创建显示文件index.html并编辑
[root@localhost www]# echo "9091" > 9091/index.html
#创建日志文件
[root@localhost www]# mkdir /var/log/nginx/9091
#创建9091端口服务器显示文件及编辑
#创建9092目录
[root@localhost www]# mkdir 9092
#创建显示文件index.html并编辑
[root@localhost www]# echo "9092" > 9092/index.html
#创建日志文件
[root@localhost www]# mkdir /var/log/nginx/9092
3.重新加载nginx服务
[root@localhost ~]# systemctl restart nginx
4.访问nginx基于端口的Web服务器服务
#使用curl命令抓取页面
[root@localhost ~]# curl 192.168.91.129:9091
9091
[root@localhost ~]# curl 192.168.91.129:9092
9092
#使用firefox命令访问页面
[root@localhost ~]# firefox 192.168.91.129:9091
[root@localhost ~]# firefox 192.168.91.129:9092
3.4 配置基于IP的Web服务器
1.将自己的IP地址设置为静态 and 重启虚拟机
[root@localhost ~]# nmcli connection modify ens160 ipv4.addresses 192.168.91.30/24 ipv4.gateway 192.168.91.2 ipv4.dns 192.168.91.2 ipv4.method manual connection.autoconnect yes
2.添加新的IP地址

314

被折叠的 条评论
为什么被折叠?



