企业高性能web服务器 Nginx

目录

编码下载Nginx

删除Nginx方法

平滑升级和回退

改名字

生成启动文件

配置主文件,和子配置文件

错误写法实例

错误示范找错误

别名

 location 的详细使用

location 的详细使用

怎么创建默认认证文件

自定义错误页面

自定义错误日志

长连接

Nginx 高级配置

压缩功能

Nginx变量使用

$remote_addr

$args

$is_args

$document_root

$document_uri

$host

$remote_port

$remote_user

$request_method

$request_filename

$request_uri

$scheme

$server_addr

$server_name

$server_port

$http_user_agent

网页重启功能内置四个指令

if

break

return

rewrite指令

redirect

https加密

防盗链

nginx的反向代理

动静分离

访问测试

反向代理:缓存功能

反向代理:负载均衡

子配置文件(七层)

hash

ip hash

uri hash 

cookie hash

down强制下线

四层

server1

server2

nginx

FastCGI实现

对Nginx重新编译

安装PHP包,从win拖入

安装memcache模块

memcache前置

编码下载Nginx

安装nginx的功能

安装nginx的依赖包

dnf install gcc pcre-devel zlib-devel openssl-devel -y

下载1.24版本的nginx的压缩包

wget http://nginx.org/download/nginx-1.24.0.tar.gz

解压

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

wget http://nginx.org/download/nginx-1.26.2.tar.gz

解压出来

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

测试

指定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包的下载

wget https://repo.almalinux.org/almalinux/9/CRB/x86_64/os/Packages/oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值