企业高性能web服务器Nginx
一、Nginx的源码编译
1、在官网选择稳定版的nginx下载,完成后解压。
2、检测安装环境,安装必要的依赖。
3、再根据自身需求安装模块并编译Nginx。

4、创建nginx用户及启动文件


5、编写启动文件

首先通过nginx -s stop停止服务,否则会显示端口占用。

二、Nginx的平滑升级和回滚
1、下载高版本nginx
2、编写高版本nginx版本信息配置文件

3、源码编译并启动
1)不运行make install
2)将objs下的nginx拷贝到原先的启动文件下
[root@Nginx sbin]# \cp -f /root/nginx-1.29.4/objs/nginx /usr/local/nginx/sbin/nginx
-f为强制覆盖。\表示绕过可能的别名
3)查看nginx日志文件夹
4)结束nginx的master进程

5)再查看日志文件夹及运行版本与之前修改的配置文件内容一致

4、回收旧版本的子进程

5、版本回退
1)重新将旧版本的nginx启动脚本复制至启动文件夹
2)重新加载旧版本nginx主进程
3)查看版本信息

三、Nginx配置文件管理及优化参数
1、增加用户为Nginx、worker进程个数增加


2、更改核心数量并绑定CPU


3、增加nginx并发量

测试

四、Nginx下构建PC站点
1、location下的root字段
用子配置文件的方式编写
1)新建子配置文件目录
2)编写主配置文件
include "/usr/local/nginx/conf/conf.d/*.conf";
3)编写子配置文件并新建测试访问内容
[root@Nginx ~]# mkdir -p /webdata/nginx/timinglee.org/lee/html
[root@Nginx ~]# echo lee.timinglee.org > /webdata/nginx/timinglee.org/lee/html/index.html
mkdir -p /webdata/nginx/timinglee.org/lee/html/lee
[root@Nginx conf.d]# echo lee > /webdata/nginx/timinglee.org/lee/html/lee/index.html

#lee标识location中的root值+location 后面指定的值代表目录的路径
4)效果测试

2、location中的alias字段
1)修改子配置文件

2)测试
建立/mnt/下默认发布文件
echo passwd > /mnt/index.html

五、KeepAlived长链接优化
1、设定长链接时间

五秒后自动断开

2、设定长链接次数

访问三次后自动断开

六、Location字符匹配详解
#匹配优先级从高到低:=, ^~, ~/~*, 不带符号
1、后面不加符号
表示区分大小写,严格访问该目录,不可包含


2、location后+“=”
表示精确匹配,必须完全一致


3、location后+"^~"
表示由该目录开头,里面可以包含其他目录但必须是根目录下的该目录


4、location后+"~"
表示访问的文件夹包含该名称由该字母开头的,后面可以跟其他字符,且区分大小写。


5、location后+"~*"
表示访问文件包含该内容,不区分大小写,只要包含即可被选中。但是同样改文件名前面必须一致。


6、location后+"\"
为转义字符,通过此做法进行动静分离。


七、服务访问的用户认证
1、非交互建立用户admin

2、编辑配置文件启用密码登录功能

3、建立访问文件
[root@Nginx conf.d]# mkdir -p /usr/local/nginx/html/admin
[root@Nginx conf.d]# echo amdin >/usr/local/nginx/html/admin/index.html
4、测试

八、自定义错误页面
1、新建错误页面内容

2、编辑配置文件

3、重启后测试
没有新建该访问内容,错误代码为404转换到错误页面内容上。

九、自定义错误日志
1、新建错误日志存放目录
[root@Nginx ~]# mkdir -p /usr/local/nginx/logs/timinglee.org/
2、修改配置文件内容

3、重启并测试

十、Nginx中建立下载服务器
1、新建普通文件及大文件做测试

2、编辑配置文件

3、客户端端拉取内容

4、下载控速
1)实际下载速度太快影响服务器性能

2)修改配置文件限制下载速度

3)测试

5、显示文件大小优化
通过配置文件中的参数进行显示优化


6、时间显示调整


7、设定页面风格
通过autoindex_format参数后面跟不同的页面类型达到设定页面风格的目的

十一、Nginx的文件检测
try_files会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误。
1、设定测试文件

2、编辑配置文件

3、访问测试

十二、Nginx的状态页
1、修改配置文件
只能usr/local/nginx/conf/.htpasswd文件中的用户才能查看

2、访问测试

十三、Nginx的压缩功能
1、新建测试文件
一个文件大小较大一个较小
2、修改主配置文件

3、子配置文件中指定路径

4、访问测试文件测试

十四、Nginx变量
1、增加Nginx的echo模块

删除原先的nginx启动文件,完成后将最新的启动文件拷贝到启动文件夹下。
2、内建变量

3、测试

4、内建变量


十五、网页从写
1、网页重写指令
1)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


2)set指令


3)return指令
返回一个值


4)break值
直接中断


2、flag
1)临时重定向redirect
将网页临时重写到百度


2)永久重定向permanent


3、break和last的区别
1)新建测试文件

2)break:修改配置文件

3)break:测试
访问break/index.html时从写到text1/index.html,遇到break直接中断。

4)last:配置文件修改

5)last测试
遇到last时继续向下读取,重写到location /test1字段

十六、Nginx利用网页重写实现全站加密
1、制作公私密钥
[root@Nginx ~]# 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
2、编辑加密配置文件

3、测试

十七、防盗链
1、新建主机编辑配置文件
图片是从nginx服务器上获得的

2、修改nginx服务器配置文件防止盗链
访问时直接跳转到另外一个图片

3、测试

十八、Nginx的反向代理
1、简单的代理
[root@RS2 ~]# mkdir /var/www/html/web
[root@RS2 ~]# echo 172.25.254.20 web > /var/www/html/web/index.html


2、proxy_hide_header filed参数
隐藏头部信息



3、proxy_pass_header
默认访问不透传server信息



4、透传信息proxy_set_header
1)修改后端服务器日志信息配置
[root@RS1 ~]# vim /etc/httpd/conf/httpd.conf
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-For}i\"" combined
[root@RS1 ~]# systemctl restart httpd
2)Nginx修改配置文件

3)访问后查看日志

十九、利用反向代理实现动静分离
1、实验环境配置
在RS1中下载php软件。
2、修改配置文件

3、测试


二十、缓存加速
1、高并发访问

2、设定缓存加速
1)主配置文件修改

2)子配置文件修改

3、测试


二十一、反向代理负载均衡
1、编辑主配置文件

2、编辑子配置文件

sorry页面设置
[root@Nginx ~]# mkdir /webdir/timinglee.org/error/html -p
[root@Nginx ~]# echo error > /webdir/timinglee.org/error/html/index.html
[root@Nginx ~]# vim /usr/local/nginx/conf/conf.d/vhosts.conf
server {
listen 8888;
root /webdir/timinglee.org/error/html;
}
3、测试

后端服务停止后

二十二、负载均衡算法


二十三、PHP源码编译
1、下载安装包
2、下载依赖
3、选择模块编译
[root@Nginx ~]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --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、配置PHP
1)指定pid文件存放位置


2)编辑主配置文件www.conf
设置监听端口

3)修改时区配置文件
[root@Nginx php-fpm.d]# cp /root/php-8.3.30/php.ini-production /usr/local/php/etc/php.ini
[root@Nginx php-fpm.d]# vim /usr/local/php/etc/php.ini

4)生成启动文件
[root@Nginx ~]# cp /root/php-8.3.30/sapi/fpm/php-fpm.service /lib/systemd/system/
[root@Nginx ~]# vim /lib/systemd/system/php-fpm.service

将其注释掉这些文件的只读权限,重新加载启动文件后启动php

5、PHP设置环境变量
[root@Nginx ~]# vim ~/.bash_profile
export PATH=$PATH:/usr/local/nginx/sbin:/usr/local/php/sbin:/usr/local/php/bin

二十四、Nginx整合PHP
1、准备测试页面
php页面及静态页面

2、编辑配置文件

3、测试


二十五、利用memcache实现php的缓存加速

1、下载安装memcache
2、配置memcache


3、升级php对于memcache的支持
1)下载memcache-8.2.tgz插件
下载configure脚本工具


2)修改配置文件使其支持memcache



4、测试性能


二十六、nginx+memcache实现高速缓存

1、重新编译nginx
增加memcache高速缓存模块

2、整合memcache

测试:ab -n 10000 -c500 http://php.baobao.org/example.php
二十七、Nginx的四层负载均衡代理
1、后端服务器安装mariadb并新建账户

2、dns服务
1)修改主配置文件

2)修改子配置文件

3)配置解析记录

4)测试

3、TCP四层负载
1)修改主配置文件
导入子配置文件位置在http字段之外

2)编辑子配置文件
stream模块

3)测试
另外的客户端测试

4、UDP四层负载
1)修改子配置文件
仅能有一个stream模块文件

2)测试


二十八、Nginx的二次开发版本OpenResty编译安装
OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
[root@Nginx ]#wget https://openresty.org/download/openresty-1.27.1.2.tar.gz
[root@Nginx ~]#dnf -yq install gcc pcre-devel openssl-devel perl zlib-devel
[root@Nginx ~]#useradd -r -s /sbin/nologin nginx
[root@Nginx ~]#tar zxf openresty-1.27.1.2
[root@webserver ~]# cd openresty-1.27.1.2/
[root@Nginx openresty-1.17.8.2]#./configure \
--prefix=/usr/local/openresty \
--user=nginx --group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_gzip_static_module
--with-pcre --with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
[root@Nginx openresty-1.17.8.2]#gmake && gmake install
[root@webserver openresty]# vim ~/.bash_profile
export PATH=$PATH:/usr/local/openresty/bin
source ~/.bash_profile
