Nginx-高性能的 Web 服务端
Nginx是由1994年毕业于俄罗斯国立莫斯科鲍曼科技大学的同学为俄罗斯rambler.ru公司开发的,开发 工作最早从2002年开始,第一次公开发布时间是2004年10月4日,版本号是0.1.0
2019年3月11日F5 与 NGINX达成协议,F5 将收购 NGINX 的所有已发行股票,总价值约为 6.7 亿美元。 6.7亿美金约合44.97亿人民币,nginx核心模块代码长度198430(包括空格、注释),所以一行代码约为 2.2万人民币
官网地址 www.nginx.org
Nginx历经十几年的迭代更新( https://nginx.org/en/CHANGES), 目前功能已经非常完善且运行稳 定,另外Nginx的版本分为开发版、稳定版和过期版,nginx以功能丰富著称,它即可以作为http服务 器,也可以作为反向代理服务器或者邮件服务器能够快速的响应静态网页的请求
支持FastCGI/SSL/Virtual Host/URL Rwrite /Gzip / HTTP Basic Auth/http或者TCP的负载均衡(1.9版本以 上且开启stream模块)等功能,并且支持第三方的功能扩展
环境,rhel9.3
内存较大 4g
单主机
ip 192.168.110.100
nginx的源码编译
1,用xftp传个nginx1.24
2,解压
3,进入目录
4,安装支持软件
dnf install gcc pcre-devel zlib-devel openssl-devel -y
5,安装
./configure --prefix=/usr/local/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
6,编译
7,创建一个新的用户账户
8,执行nginx 的可执行文件
9,查看访问
10,查看文件大小
11.关闭debug功能
12,再次执行
13,把nginx软件的命令执行路径添加到环境变量中
14,查看现在大小
15,启动nginx
16,访问查看
17,配置文件目录,配置文件所在位置
nginx的平滑升级与回滚
1,下载更加新的版本
https://nginx.org/download/nginx-1.26.2.tar.gz
2,添加echo模块
3,解压1.26版本
4,环境检测
5,回复环境纯净
6,重启动
7,把新版本的nginx命令复制过去
8,平滑更新:一些复杂的系统可能利用这些信号来触发平滑的重启或更新过程,以减少服务中断
9,回收旧版本
10,查看此时版本
11,平滑回滚
12,查看此版本
13,删除之前文件
nginx简单命令
1,查看当前版本
2,将当前版本升至新版本
3,检测配置文件中的语法是否正常
4,在不关闭进程的情况下重新加载配置
5,设置全局指令,使多个worker进行(注意和 配置文件不要同时配置,否则冲突)
【1】修改配置文件
【2】当前线程
【3】关闭修改
【4】现在线程
【5】回复纯净
启动脚本编写
1,创建脚本
[Unit] Description=The NGINX HTTP and reverse proxy server After=syslog.target network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
2,使其生效
nginx核心配置详解
修改全局配置
1,修改用户与自动根据你有几个核心匹配进程
【1】修改内容
【2】效果
2,cpu核心绑定
【1】修改内容
【2】效果
3,修改最大链接数
【1】查看系统本身可以打开多少文件
【2】修改系统配置文件,使nginx用户可以同时打开文件数量更多
【3】检测是否可行(此数可更大,非极值)
【4】修改nginx配置文件
4,使用epoll,提高程序在大量并发连接时只有少量活跃连接的情况下的效率
修改vim配置
nginx配置中的root和alias
1,新建一个 PC web 站点
【1】为避免主配置文件过长,写于子配置文件中。主配置修改
【2】建立子配置文件
【3】导入测试页
【4】校验是否有问题
【5】更新配置
【6】增加电脑域名解析
【7】访问一下
root与allias
2,root:指定web的家目录,在定义location的时候,文件的绝对路径等于 root+location
【1】修改配置(可直接看【6】)
【2】创建所需文件,设置测试页
【3】检测语法是否有误,加载配置
【4】访问测试
【5】查看错误日志
【6】修改配置
【7】测试
alias:定义路径别名,会把访问的路径重新定义到其指定的路径,文档映射的另一种机制;仅能用于 location上下文,此指令使用较少
【1】配置
【2】重加载并测试
location
语法规则
在目标相同时 不带符号,= ,^~, ~ ,~*。五种中,
t0~ 与 ~ * 谁在前优先级最高
t1不带符号次之
t2 ^~
t3 =
1,不带符号
【1】配置
【2】添加测试页
【3】访问
2, =
#用于标准uri前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
【1】配置
【2】添加测试页
【3】测试 发现不加东西的优先级最高
3, ^~
#用于标准uri前,表示包含正则表达式,并且匹配以指定的正则表达式开头
#对uri的最左边部分做匹配检查,不区分字符大小写
【1】配置
【2】添加测试页
【3】测试
不是以t开头,无法查到
4,~
#用于标准uri前,表示包含正则表达式,并且区分大小写
【1】配置
【2】测试
用户认证
由 ngx_http_auth_basic_module 模块提供此功能
【1】创建认证文件
【2】创建测试页
【3】配置
【4】测试
设置错误页面
【1】编辑
【2】建立页面
【3】测试
自定义错误日志
原错误文件日志位置
【1】配置
【2】建立所需文件
【3】添加地址解析
【4】测试
检测文件是否存在
【1】配置
try_files $uri $uri.html $uri/index.html /error/default.html;
【2】建立所需文件
【3】原访问
【4】如果删去访问页
【5】恢复
长连接配置
【1】编辑主配置文件
【2】安装测试工具 telnet
【3】测试
keepalive_timeout 65 65秒后断开连接
(keepalive_requests 2)
【4】另一种配置
【5】效果
下载服务器的设定及优化
【1】创建下载目录,并创建一个大小为100MB的文件
【2】修改配置文件
【3】访问测试
3,状态页面
【1】新编写子配置文件(非必要)
【2】添加地址解析
【3】访问
【4】不能让人随便看,修改配置
【5】添加本地解析并测试
真实主机不受限
4,数据压缩功能
Nginx支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文 件大小将比源文件显著变小,样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相 应的CPU资源。
Nginx对文件的压缩功能是依赖于模块 ngx_http_gzip_module,默认是内置模块
【1】配置文件
gzip_comp_level 4; gzip_min_length 1k; gzip_http_version 1.1; gzip_vary on; include "/usr/local/nginx/conf.d/*.conf"; gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/gif image/png;
【2】创建大小文件准备测试
【3】测试
nginx中变量的使用
【1】创建子配置文件
efault_type text/html;
echo $remote_addr;
echo $is_args;
echo $document_root;
echo $document_uri;
echo $host;
echo $remote_port;
echo $remote_user;
echo $request_method;
echo $request_filename;
echo $request_uri;
echo $scheme;
echo $server_protocol;
echo $server_addr;
echo $server_name;
echo $server_port;
echo $http_user_agent;
echo $http_cookie;
echo $cookie_key2;
【2】添加本地解析
【3】测试
curl -b "key1=wuyyy,key2=wuyyy1" -u lee:lee var.wuyyy.org/var?name=wuyyy&&id=6666
【4】设置变量
【5】效果
rewite相关功能
【1】修改配置文件(if)
【2】检验
【3】修改配置文件(break添加前)
【4】重启测试
【5】添加break后
【6】测试发现被终止了
【7】再加判断语句
【8】再测(curl中断,其他全输出)
【9】修改配置(ruturn)
【10】测试
3,rewrite 指令
rewrite flag 使用介绍
permanent,redirect,临时,永久充定向
【1】配置
设置配置页
【2】效果
【3】永久重定向
访问前
修改配置后
【4】测试(因为curl不支持充定向,在浏览器中测)
【5】临时重定向
修改配置
【6】测试
rewrite 案例: break 与 last
【1】准备工作
【2】配置
【3】浏览器测试
【4】测试break
显示结果
【5】测试last
显示结果
自动跳转 https
【1】创建文件
【2】创建认证文件
这条命令是使用 OpenSSL 工具生成一个新的自签名 SSL 证书和相应的私钥。这个证书和私钥可以用于测试环境或内部网络中的 HTTPS 加密通信。下面是对这条命令各部分的详细解释:
-
openssl req
: 这是 OpenSSL 命令行工具用于创建证书签名请求(CSR)的命令,但在这里通过一些选项的组合,它被用来直接生成一个自签名证书。 -
-newkey rsa:2048
: 这个选项告诉 OpenSSL 生成一个新的 RSA 私钥,密钥长度为 2048 位。RSA 是一种广泛使用的公钥加密算法,2048 位长度是目前认为安全的长度之一。 -
-nodes
: 这个选项用于生成私钥时不设置密码保护。-nodes
是--no-des
的简写,意味着不使用 DES 加密私钥文件。在自动化脚本或需要频繁访问私钥的场景下,这很有用。 -
-sha256
: 指定使用 SHA-256 哈希算法来签名证书。SHA-256 是 SHA-2 系列哈希算法之一,比旧的 SHA-1 更安全。 -
-keyout /usr/local/nginx/certs/wuyyy.org.key
: 指定生成的私钥文件的保存路径和文件名。这里,私钥被保存在/usr/local/nginx/certs/wuyyy.org.key
。 -
-x509
: 这个选项告诉 OpenSSL 创建一个自签名的证书,而不是一个证书签名请求(CSR)。自签名证书意味着证书由同一实体生成和签名,这在测试环境中很常见,但在生产环境中通常不被接受,因为自签名证书不被标准的浏览器和客户端信任。 -
-days 365
: 指定证书的有效期为 365 天。这是证书从签发之日起到过期日期之间的天数。 -
-out /usr/local/nginx/certs/wuyyy.org.crt
: 指定生成的证书文件的保存路径和文件名。这里,证书被保存在/usr/local/nginx/certs/wuyyy.org.crt
。
执行这条命令时,OpenSSL 会提示你输入一些证书的信息,如国家(C)、省份(ST)、城市(L)、组织(O)、组织单位(OU)、通用名称(CN,即你的网站域名或服务器名)等。这些信息将包含在证书中,并被客户端(如浏览器)用于验证证书的身份。
完成后,你将拥有两个文件:一个私钥文件(.key
)和一个自签名证书文件(.crt
),这两个文件可以用于配置 Nginx 或其他支持 SSL/TLS 的服务器,以实现 HTTPS 加密通信。
【3】编辑子配置目录
【4】访问测试
【5】修改配置,是默认去https
【6】测试 自动添加
【7】修改配置,添加报错机制
【8】测试,当输入主站没有的文件时,自动跳转
Nginx 防盗链
防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标 记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗 链,referer就是之前的那个网站域名,正常的referer信息有以下几种:
【1】添加图片(俩不能放一块)
【2】配置防盗链
【3】此时将无法通过非标记链接访问单个文件,只可以直接搜索
【4】另一种写法
Nginx 反向代理功能
逻辑调用关系
访问逻辑图:
反向代理配置参数
【1】准备另两台主机 httpd 110,120(之前的),顺便把之前的子配置删了
【2】修改配置(8080改httpd的配置文件也行,但只能写一个)
【3】测试
【4】配置(子配置,和web2的)
【5】测试
【6】动静分离配置
【7】web1配置
【8】测试
反向代理示例: 缓存功能
【1】配置主配置文件
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2:2 keys_zone=proxycache:20m inactive=120s max_size=1g;
【2】子配置文件修改
在Nginx配置中,proxy_cache
指令及其相关指令用于设置代理缓存的行为,以提高网站的性能和响应速度。下面是对您提供的配置行的解释:
-
proxy_cache proxycache;
-
这一行启用了Nginx的代理缓存功能,并指定了一个名为
proxycache
的缓存区域(cache zone)。在Nginx配置中,你需要在其他地方(通常在
http
块中)定义这个缓存区域,包括它的名称、大小、路径和可选的其它参数(如内存大小、加载因子等)。例如:
nginx复制代码 proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=proxycache:10m max_size=10g;
这里,
/data/nginx/cache
是缓存文件存储的目录,
levels=1:2
定义了缓存目录的层级结构(用于优化文件查找),
keys_zone=proxycache:10m
指定了缓存区域的名称为
proxycache
,并为其分配了10MB的内存用于存储缓存键和元数据,
max_size=10g
限制了缓存区域的最大大小为10GB。
-
-
proxy_cache_key $request_uri;
-
这一行定义了用于生成缓存键的变量。默认情况下,Nginx使用请求的URI(包括查询字符串)作为缓存键。这里显式地指定了使用
$request_uri
作为缓存键,这通常是默认行为,但显式指定有助于清晰配置。
-
-
proxy_cache_valid 200 302 301 10m;
-
这行指令为特定HTTP响应状态码指定了缓存有效期。对于状态码为200(成功)、302(临时重定向)和301(永久重定向)的响应,它们将被缓存10分钟。这意味着,如果Nginx在接下来的10分钟内再次收到相同的请求(具有相同的缓存键),它将直接从缓存中提供响应,而不是向后端服务器转发请求。
-
-
proxy_cache_valid any 1m;
-
这行指令为所有未明确指定缓存有效期的HTTP响应状态码指定了默认缓存有效期。这里,它被设置为1分钟。如果某个响应的HTTP状态码没有通过
proxy_cache_valid
指令明确指定缓存时间,那么它将使用这个默认值。
-
【3】压力测试
【4】查看保留位置
http 反向代理负载均衡
【1】配置
【2】访问测试
【3】配置hash
【4】效果
【5】配置cookie值hash
【6】测试
实现 Nginx 四层负载均衡
环境准备(之前俩个出错没找到原因)
.10/20俩主机
编辑配置文件
检查配置是否成功
传到另外一个去(打错了按下面的输入)
改另一个
检查
【1】配置
因从冲突,故移动改文件
【2】检查
mysql配置
【1】数据库修改
【2】启动
【3】远程链接准备
【4】修改配置
【5】安装数据库客户端(不然用不了没命令)
【6】测试
实现 FastCGI
重新编译
【1】删除
【2】导入所需安装包
【3】解压
【4】编译
./configure --prefix=/usr/local/nginx --add-module=/root/node1/echo-nginx-module-0.63 --add-module=/root/node1/memc-nginx-module-0.20 --add-module=/root/node1/srcache-nginx-module-0.33 --user=nginx --group=nginx --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-pcre
【5】删除旧版nginx
【6】启动
php源码安装
【1】传入文件
【2】解压,进入
【3】检测
./configure --prefix=/usr/local/php --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-curl --with-iconv --with-mhash --with-zlib --with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring --enable-bcmath --with-fpm-systemd
【4】安装缺少的环境
【5】再检测
【6】检测缺啥安装
【7】再测
【8】再装
【9】测
【10】装
---------------------------------------------------------------------------------------------------------------------------------
图片超过300张,明日再添加后面图片
【11】测
【12】装
【13】测
【14】z
没找到,去阿里云找
【15】c
难崩
【16】编译
php相关配置优化
【1】生成主配置文件
【2】修改配置文件
【3】生成子配置文件目录
【4】生成php配置文件
【5】编辑文件,更改时区
【6】生成启动脚本
【7】编辑启动文件
【8】重加载配置文件,启动php,查看结果
【9】更改配置(注意!!!此写法不报错,但不算全端口。请改为0.0.0.0:9000)
【1】添加环境变量
【2】编写文件
【3】配置
【4】配置
【6】访问测试
【7】查看错误日志
【9】再次测试