目录
编码下载Nginx
安装nginx的功能
安装nginx的依赖包
dnf install gcc pcre-devel zlib-devel openssl-devel -y
下载1.24版本的nginx的压缩包
解压
tar zxf nginx-1.24.0.tar.gz
cd nginx-1.24.0
创建Nginx用户
useradd -s /sbin/nologin -M nginx
查看
ls
选择下载那些模块,添加那些模块
./configure --prefix=/usr/local/nginx \
--user=nginx \ # 指定nginx运行用户
--group=nginx \ # 指定nginx运行组
--with-http_ssl_module \ # 支持https://
--with-http_v2_module \ # 支持http版本2
--with-http_realip_module \ # 支持ip透传
--with-http_stub_status_module \ # 支持状态页面
--with-http_gzip_static_module \ # 支持压缩
--with-pcre \ # 支持正则
--with-stream \ # 支持tcp反向代理
--with-stream_ssl_module \ # 支持tcp的ssl加密
--with-stream_realip_module # 支持tcp的透传ip
make install
编译前关闭debug功能
make && make install
验证版本及编译参数
source ~/.bash_profile
刷新系统文件
产看版本
nginx -V
删除Nginx方法
先关闭Nginx
nginx -s stop
卸载
删除Nginx的系统文件
rm -rf /usr/local/nginx/
make clean
平滑升级和回退
下载24版的Nginx
解压出来
tar zxf nginx-1.26.2.tar.gz
nginx的功能模块echo-nginx-module-0.63.ter.gz
将他从win移到linux
将echo-nginx-module-0.63.ter.gz
解压出来
ter zxf nginx-module-0.63
cd到26下
添加一个这个
make 第二次下载不需要加install
make 完成,第二次不需要加install ,就是make install
改名字
cd /root/nginx-1.24.0/src/core/
改名字
vim /nginx.h
对nginx旧版进行备份
查看版本
生成启动文件
生成启动文件
vim /lib/systemd/system/nginx.service
写入
查看uuid,很明显我们查到啦哦id,并且就是这个地址
就是这条
systemctl daemon-reload
先将nginx的服务关掉
nginx -s stop
查看进程是否将服务关掉啦
ps aux | grep nginx
然后我们用之前的方式启动服务 并查看进程
systemctl enable --now nginx
配置主文件,和子配置文件
配置文件路径
vim /usr/local/nginx/conf/nginx.conf
我么使用epoll
定义子配置文件
配置完子配置文件,但是要有子配置文件
配置子配置文件
vim /usr/local/nginx/conf.d/vhost.conf
创建网页可以访问到的东西
去win上解析www.qiqi.org
解析完访问
子配置文件,进行更改
错误写法实例
这种写法是访问的,所以是错的
/data/web/test1/test1/
我们把后面的/test1删掉
创建配置文件里写的文件
mkdir /data/web/test1 -p
echo /data/web/test1 > /data/web/test1/index.html
不关机重新加载一下配置文件,这条指令的作用
nginx -s reload
测试
错误示范找错误
首先报错看日志文件
加啦个斜杠
要最后有/就都要有斜杠
别名
刷新配置
nginx -s reload
测试
location 的详细使用
错误日志的位置
tail /usr/local/nginx/logs/error.log
location 的详细使用
创建location要访问的nginx文件
写入的东西如下
vim /usr/local/nginx/conf.d/vhost.conf
看谁的权限高
证明优先级相同,哪个在前执行那个
显示web1,证明不带字符的优先级第二高
如图所示 ^~ 的优先级大于 =
对目录匹配的优先级如下
========只能是文件,不可以是目录,且写目录的话他的优先级是最高的
所以这个 = 不应该在这里比优先级
怎么创建默认认证文件
怎么创建默认认证文件
如何使用
当你要访问这个文件的时候,你必须要经过认证
记得加分号
nginx -s reload
自定义错误页面
重启
建立目录和文件
测试
自定义错误日志
自定义错误日志
子配置文件
建立目录
mkdir /var/log/qiqi.org
nginx -s reload
先解析
测试
curl www.qiqi.org
检测文件是否存在
如果这里面的文件都报错
那就回报
echo error default > /data/web/html/error/imdex.html
echo error default > /data/web/html/error/default.html
测试
长连接
安装长连接测试工具
vim /usr/local/nginx/conf/nginx.conf
长连接等待时机
5s不响应断开
测试
telnet www.qiqi.org 80
作为下载服务器配置
做一个文件
配置文件中
更改时间
更改文件储存单位
下载太快啦
限速
下载速度1mb
Nginx 高级配置
Nginx 状态页
状态页的子配置文件
重启
nginx -s reload
测试
设置只让谁访问
测试100
测试1
Active connections: #当前处于活动状态的客户端连接数 #包括连接等待空闲连接数=reading+writing+waiting
accepts: #统计总值,Nginx自启动后已经接受的客户端请求连接的总数。
handled: #统计总值,Nginx自启动后已经处理完成的客户端请求连接总数
#通常等于accepts,除非有因worker_connections限制等被拒绝的连接
requests: #统计总值,Nginx自启动后客户端发来的总的请求数
Reading: #当前状态,正在读取客户端请求报文首部的连接的连接数
#数值越大,说明排队现象严重,性能不足
Writing: #当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大
Waiting: #当前状态,正在等待客户端发出请求的空闲连接数
开启 keep-alive的情况下,这个值等于active –
压缩功能
最开始下载的压缩模块
nginx配置文件中
Nginx变量使用
nginx的变量可以在配置文件中引用,作为功能判断或者日志等场景使用
变量可以分为内置变量和自定义变量
内置变量是由nginx模块自带,通过变量可以获取到众多的与客户端访问相关的值。
内置变量
$remote_addr 存放啦客户端的地址,客户端的公网ip
$args 变量中存放啦URL中的所有参数
$is_args 如果有参数为?否则为空
$document_root 保存啦针对当前资源的请求的系统的根目录
$document_uri 保存了当前请求中不包含参数的URI,注意是不包含请求的指令
$host 存放了请求的host名称
limit_rate 10240; echo $limit_rate; #如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0
$remote_port 客户端请求Nginx服务器时随机打开的端口,这是每个客户端自己的端口
$remote_user 已经经过Auth Basic Module验证的用户名
$request_body_file 做反向代理时发给后端服务器的本地资源的名称
$request_method 请求资源的方式,GET/PUT/DELETE等
$request_filename #当前请求的资源文件的磁盘路径,由root或alias指令与URI请求生成的文件绝对路径
$request_uri 包含请求参数的原始URI,不包含主机名
$scheme 请求的协议
$server_protocol 保存了客户端请求资源使用的协议的版本
$server_addr 保存了服务器的IP地址
$server_name 虚拟的主机名字
$server_port 虚拟主机的端口号
$http_user_agent 客户端浏览器的详细信息
$http_cookie 客户端的所有cookie信息
$cookie_ name为任意请求报文首部字部cookie的key名
$http_ name为任意请求报文首部字段,表示记录请求报文的首部字段,ame的对应的首部字段名需要为小写,如果有横线需要替换为下划线
echo之前下载的一个模块
进行解析var.qiqi.org
vim /etc/hosts
可以直接在配置文件里面输出
$remote_addr
重启
nginx -s reload
测试curl var.qiqi.org会输出一个地址
$args
重启
nginx -s reload
测试,输出?后的指令
$is_args
如果args是空的他也是空的
重启
nginx -s reload
测试
$document_root
默认家目录
重启
nginx -s reload
测试
$document_uri
重启
nginx -s reload
测试
$host
重启
nginx -s reload
测试
$remote_port
重启
nginx -s reload
测试
$remote_user
重启
nginx -s reload
测试
$request_method
重启
nginx -s reload
测试
最后访问的文件
$request_filename
重启
nginx -s reload
测试
$request_uri
请求访问的uri
重启
nginx -s reload
测试
$scheme
使用的协议
重启
nginx -s reload
测试
$server_addr
重启
nginx -s reload
测试
$server_name
虚拟主机名字
重启
nginx -s reload
测试
$server_port
重启
nginx -s reload
测试
$http_user_agent
重启
nginx -s reload
测试
$http_cookie
指定cooke
系统的自定义用户变量
vim /usr/local/nginx/conf.d/var.conf
自定义变量
重启测试
网页重启功能内置四个指令
if
= #比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false
!= #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false
~ #区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~ #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假
~* #不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~* #不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真
-f 和 !-f #判断请求的文件是否存在和是否不存在
-d 和 !-d #判断请求的目录是否存在和是否不存在
-x 和 !-x #判断文件是否可执行和是否不可执行
-e 和 !-e #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)
#注意:#如果$变量的值为空字符串或0,则if指令认为该条件为false,其他条件为true。
#nginx 1.0.1之前$变量的值如果以0开头的任意字符串会返回false
vim /usr/local/nginx/conf.d/var.conf
里面写入if用法
使用正则表达式对变量进行匹配,匹配成功时if指令认为条件为true,否则认为false
判断文件是否存在,不存在就输出echo的内容
如果文件存在,就输出文件的内容
进行本地解析
vim /etc/hosts
成功啦就会显示
我们创立文件在进行测试
[root@nginx-node1 ~]# mkdir /data/web/html/test2/
[root@nginx-node1 ~]# echo test2 > /data/web/html/test2/index.html
在进行访问
break
vim /usr/local/nginx/conf.d/var.conf
测试
curl var.qiqi.org/break/
下面的就不执行啦
换一个浏览器测试,两个都会输出
curl -A "firefox" var.qiqi.org/break
return
vim /usr/local/nginx/conf.d/var.conf
测试
curl -I var.qiqi.org/return
创建文件
mkdir -p /data/web/html/return
测试
curl -I var.qiqi.org/return
测试
curl var.qiqi.org/return
rewrite指令
利用nginx的rewrite的指令,可以实现url的重新跳转,rewrite有四种不同的flag
分别是redirect(临时重定向302)
临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端
permanent(永久重定向301)
重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端
break
重写完成后,停止对当前URL在当前location中后续的其它重写操作
last
重写完成后,停止对当前URI在当前location中后续的其它重写操作
永久定向和临时重定向
redirect
vim /usr/local/nginx/conf.d/var.conf
nginx -s reload
测试
curl -I var.qiqi.org
去浏览器进行测试
永久重定向
临时重定向
区别break和last
不会往下走,不回去访问,location里后面的动作全部终止,他会走默认的指定路径,里的test1
没有hahahaahahha
而last会从location 跳出,去找下一个location,还会继续往下找,与break相反
测试
https加密
在100配置http
现在/usr/local/nginx/里创建cerst
certs里什么都没有
去做一下认证文件
openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/nginx/certs/timinglee.org.key
-x509 -days 365 -out /usr/local/nginx/certs/timinglee.org.crt
新建立一个子文件
vim /usr/local/nginx/conf.d/vhosts.conf
进行编辑
检测
nginx -t
重启
去windows进行解析
去访问
去配置文件中进行编写
实现如下功能
强制加密https,这个用if表示如果不是http我就直接让你去https,临时重定向,实现全站加密
将错误的URL,重定向到官网首页
测试不存在的文件
重定向到主页
测试一下存在的文件,会不会重定向
存在的不会重定向
防盗链
在该路径创造一个文件夹,来存放图片
mkdir -p /data/web/html/images
通过Xftp将图片导入
盗链的图和你的资源图不可以放一起
盗链
资源
在10里安装httpd服务
cd /var/www/html/
在该目录下写一个index.html文件
指定啦要访问文件找这个地方
启动10的Apache
我们打开浏览器访问一下10
点击链接调到100的地址
如何防盗链
防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗链,referer就是之前的那个网站域名,正常的referer信息有以下几种:
none: #请求报文首部没有referer首部,#比如用户直接在浏览器输入域名访问web网站,就没有referer信息。
blocked: #请求报文有referer首部,但无有效值,比如为空。
server_names: #referer首部中包含本主机名及即nginx 监听的server_name。
arbitrary_string: #自定义指定字符串,但可使用*作通配符。示例: *.timinglee.org www.timinglee.*
regular expression: #被指定的正则表达式模式匹配到的字符串,要使用~开头,例如: ~.*\.timinglee\.com
也就是说我们需要写一个referer,允许谁访问
vim /usr/local/nginx/conf.d/vhosts.conf
内容看不了啦,但是链接还是可以打开
在进行配置让他想要访问我们的时候,我们输出给他们我想让他们看到的东西
重启测试
nginx的反向代理
nginx主机
[root@nginx html]# vim /usr/local/nginx/conf.d/vhosts.conf
server1主机
下载httpd
yum install httpd -y
写入数据做测试
echo server1 172.25.119.110 > /var/www/html/index.html
server2 主机
下载httpd
yum install httpd -y
创建文件写入数据修改端口,方便测试观察
[root@server2 ~]# mkdir /var/www/html/static
[root@server2 ~]# echo server2 172.25.119.120 > /var/www/html/static/index.html
[root@server2 ~]# vim /etc/httpd/conf/httpd.conf
动静分离
在server上下载动态服务php
yum install php -y
写配置
[root@server1 html]# vim /var/www/html/index.php
<?php
phpinfo();
?>
[root@server1 html]# systemctl restart httpd
nginx主机
[root@nginx html]# vim /usr/local/nginx/conf.d/vhosts.conf
[root@nginx html]# nginx -s reload
访问测试
反向代理:缓存功能
在主配置文件中开启缓存
[root@nginx html]# vim /usr/local/nginx/conf/nginx.conf
子配置文件
[root@nginx html]# vim /usr/local/nginx/conf.d/vhosts.conf
proxy_cache_valid any 1m; ------其他数据缓存响应时间
测试
开启缓存前
开启缓存后
缓存的内容存放
反向代理:负载均衡
子配置文件(七层)
[root@nginx nginx]# vim /usr/local/nginx/conf.d/vhosts.conf
测试 (默认轮询)
hash
ip hash
测试
uri hash
测试
cookie hash
测试 (不写cookie,将以轮询方式调度)
down强制下线
测试
四层
以dns服务器为例
下载bind (两台server主机都要做)
yum install -y bind
修改配置文件
server1
[root@server1 ~]# vim /etc/named.conf
[root@server1 ~]# vim /etc/named.rfc1912.zones
[root@server1 ~]# cd /var/named/
[root@server1 named]# cp named.localhost li.org.zone -p
[root@server1 named]# vim li.org.zone
[root@server1 named]# systemctl restart named
[root@server1 named]# dig www.li.org @172.25.119.110
server2
主配置文件
[root@server2 ~]# vim /etc/named.rfc1912.zones
[root@server2 ~]# cd /var/named/
[root@server2 named]# cp named.localhost li.com.zone -p
[root@server2 named]# vim li.org.zone
[root@server2 named]# systemctl restart named
[root@server2 named]# dig www.li.org @172.25.119.12
nginx
定义全局的子配置文件
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
[root@nginx ~]# mkdir /usr/local/nginx/tcpconf.d/
测试
FastCGI实现
对Nginx重新编译
先删除掉
编译需要新加入的两个包
将他们从win拖入并解压
添加功能模块
全部的,对Nginx的重新编译
环境变量
[root@CGI ~]# vim ~/.bash_profile
[root@CGI ~]# source ~/.bash_profile
创建nginx用户
LINUX+Nginx+MySQL+PHP
CGI,当来来活啦的时候,开一个PHP,结束再关,来啦再开,效率很低
FastCGI就是解决这个问题
源码安装PHP
安装PHP包,从win拖入
然后解压
先安装依赖包
[root@Nginx ~]# yum install -y bzip2 systemd-devel libxml2-devel sqlite-devellibpng-devel libcurl-devel oniguruma-devel
安装PHP,源码编译
./configure \--prefix=/usr/local/php \ #安装路径
--with-config-file-path=/usr/local/php/etc \ #指定配置路径
--enable-fpm \ #用cgi方式启动程序
--with-fpm-user=nginx \ #指定运行用户身份
--with-fpm-group=nginx \
--with-curl \ #打开curl浏览器支持
--with-iconv \ #启用iconv函数,转换字符编码
--with-mhash \ #mhash加密方式扩展库
--with-zlib \ #支持zlib库,用于压缩http压缩传输
--with-openssl \ #支持ssl加密
--enable-mysqlnd \ #mysql数据库
--with-mysqli \ php相关配置优化准备php测试页面
--with-pdo-mysql \
--disable-debug \ #关闭debug功能
--enable-sockets \ #支持套接字访问
--enable-soap \ #支持soap扩展协议
--enable-xml \ #支持xml
--enable-ftp \ #支持ftp
--enable-gd \ #支持gd库
--enable-exif \ #支持图片元数据
--enable-mbstring \ #支持多字节字符串
--enable-bcmath \ #打开图片大小调整,用到zabbix监控的时候用到了这个模块
--with-fpm-systemd #支持systemctl 管理cgi
和当时安装nginx差不
[root@CGI php-8.3.9]# ./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
装完后,如果出错,那即是少啦一些依赖
我们需要单独下载依赖
有几个依赖包需要我们去阿里云用wget下载安装
oniguruma-devel包的下载
yum install 包名安装
可以使用查询下载的包
dnf whatprovides */包名*
可以使用查询下载的包,也可以
dnf search sqlite3
安装
手动启动服务
[root@CGI etc]# vim php.fpm.conf
进入配置文件更改时区
生成启动脚本
找到启动文件
试一下可以直接启动嘛,启动不了
启动不了
报错日志显示他是只读,不是因为没有权限
因为配置文件中有这个
注释掉启动成功,去注释
vim /lib/systemd/system/php-fpm.service
启动php
[root@CGI ~]# systemctl daemon-reload
[root@CGI ~]# systemctl start php-fpm
查看启动成功没
netstat -antlupe | grep php
准备php的测试页
将php指令添加环境变量,就可以用啦
写一个子配置文件
[root@CGI php]# vim /usr/local/nginx/conf.d/vhosts.conf
重启PHP服务
systemctl restart php-fpm
进入配置文件更改监听端口
vim /usr/local/php/etc/php-fpm.d/www.conf
不能用*.
可以这样写0.0.0.0
安装memcache模块
从win传上来
解压
tar zxf memcache-8.2.tgz
cd memcache-8.2
yum install autoconf -y
是一个用于准备 PHP 扩展构建环境的工具
phpize
进行编译安装
./configure && make && make install
[root@CGI ~]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20230831/
如果我们安装软件编译时--with-config-file-path没有指定安装位置
他会默认放在/usr/local/php/etc/下
但是我们的文件应该指定在/usr/local/php/lib/下
[root@CGI memcache-8.2]# cp example.php memcache.php /data/web/php
进入配置文件更改memcache页面配置
[root@CGI php]# vim memcache.php
压力测试
[root@CGI php]# ab -n1000 -c10 http://www.qiqi.org/index.php
1000个包会丢失90-120左右
Nginx不能与数据库交互,所以中间加一个PHP来与数据库进行交互
memcache前置
memcache绕过PHP直接到Nginx
这两个服务包就是实现这个的
进入Nginx的子配置目录
vim /usr/local/nginx/conf.d/vhosts.conf
重启
nginx -s reload
再次进行压力测试,查看丢包情况
ab -n1000 -c10 http://vhosts.qiqi.org/index.php
1000个包一个不丢nb