Nginx 啦啦啦啦啦啦啦啦

编译器介绍

源码安装需要提前准备标准的编译器,GCC的全称是(GNU Compiler collection),其有GNU开发,并以 GPL即LGPL许可,是自由的类UNIX即苹果电脑Mac OS X操作系统的标准编译器,因为GCC原本只能处理C语 言,所以原名为GNU C语言编译器,后来得到快速发展,可以处理C++,Fortran,pascal,objective C, java以及Ada等其他语言,此外还需要Automake工具,以完成自动创建Makefile的工作,Nginx的一些模块 需要依赖第三方库,比如: pcre(支持rewrite),zlib(支持gzip模块)和openssl(支持ssl模块) 等

官方源码包下载地址: https://nginx.org/en/download.htm

编译安装示例:wget  https://nginx.org/download/nginx-1.24.2.tar.gz
解压 tar zxf nginx-1.24.0.tar.gz

下载gcc pcre-devel zlib-devel openssl-devel

添加用户

makefile和objs是新加的

之后执行./configure

然后make && makeinstall

然后查看主要目录

验证版本及编译参数(把nginx软件的命令执行路陷阱添加到环境变量中)

进入 vim ~/.bash_profile添加export PATH=$PATH:/usr/local/nginx/sbin

进入 vim auto/cc/gcc关闭debug功能,将debug那栏注释掉

2.平滑升级和回滚

有时候我们需要对Nginx版本进行升级以满足对其功能的需求,例如添加新模块,需要新功能,而此时 Nginx又在跑着业务无法停掉,这时我们就可能选择平滑升级

平滑升级和回滚案例

 下载 压缩包   wget https://nginx.org/download/nginx-1.26.2.tar.gz

ls查看并且解压

进入1.26.2查看

./configure

接着make就行(不用makeinstall)

查看

进入objs/查看

#把之前的旧版的nginx命令备份

#把新版本的nginx命令复制过

检测一下有没有问题 [root@Nginx sbin]# nginx -t

查看进程

#USR2 平滑升级可执行程序,将存储有旧版本主进程PID的文件重命名为nginx.pid.oldbin,并启动新的 nginx #此时两个master的进程都在运行,只是旧的master不在监听,由新的master监听80 #此时Nginx开启一个新的master进程,这个master进程会生成新的worker进程,这就是升级后的Nginx进 程,此时老的进程不会自动退出,但是当接收到新的请求不作处理而是交给新的进程处理。

回收

版本成了1.26

之后回滚,回收新进程

nginx命令参数

nginx开机自启动,jiaoben

vim/lib/systemd/system/nginx.service

写入

之后systemc daemon-reload

nginx -s stop

ps aux | grep nginx

systemctl enable --now nginx

ps aux | grep nginx

实现 nginx 的高并发配置

查看内核

修改内核(vim下方文件)

之后

vim /usr/local/nginx/conf/nginx.conf改

 nginx -s reload

下载
 

然后执行

新建一个 PC web 站点

定义子配置文件路径

#创建虚拟主机网站配置

之后

root 与 alias

root:指定web的家目录,在定义location的时候,文件的绝对路径等于 root+location

alias:定义路径别名,会把访问的路径重新定义到其指定的路径,文档映射的另一种机制;仅能用于 location上下文,此指令使用较少

进入  vim /usr/local/nginx/conf.d/vhost.conf

之后nginx -t,nginx-s reload

有错误的话查看日志tail /usr/local/nginx/logs/error.log

在浏览器上访问

alias

访问成功

4.3 location 的详细使用

在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射; ngnix会根据用户请求的URI来检查定义的所有location,按一定的优先级找出一个最佳匹配, 而后应用其配置在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最 高的一个uri uri是用户请求的字符串,即域名后面的web文件路径 然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理 此请求。

#语法规则:

(不带符号)    vim /usr/local/nginx/conf.d/vhost.conf

之后创建目录并且写入 testpage

然后在浏览器访问ok

=====等号

重新载入并访问

不加任何符号的优先级高

…^以t开头的

lee找不到,他不是以t开头的

~  以html结尾

不区分大小写

之后

最优先匹配波浪号

注释掉它

访问到五

之后将两个换个位置先访问到5

两个优先级一样高

接下来注释掉它们两个先访问到1(跟顺序没关系)

注释1访问到3(跟顺序没关系)

#用户认证

先创建两个默认文件

之后创建目录 /data/web/lee

echo lee > /data/web/lee/index.html

进入配置文件

重载之后访问

然后添加用户认证

访问变成这样

#自定义错误页面

fangwen

#自定义错误日志,,,,添加这两行

然后重载访问

#nginx文件检测

配置

成功

#长连接配置

之后测一下效果

发送了两次

连接断开

#下载服务器的设定及优化

ngx_http_autoindex_module 模块处理以斜杠字符 "/" 结尾的请求,并生成目录列表,可以做为下载服务 配置使

访问禁止

之后添加

访问出它的大小和时间

改时间

访问

计算文件确切大小

访问

下载太快给限速

#Nginx 状态页

 cd /usr/local/nginx/conf.d/

 vim status.conf

windows中配置解析地址

完了访问(刷新一次请求变一次)

之后再进入配置文件添加(allow,deny)

重载之后在vim/etc/hosts中添加网址status.timinglee.org之后访问

#Nginx 压缩功能

Nginx支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文 件大小将比源文件显著变小,样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相 应的CPU资源。 Nginx对文件的压缩功能是依赖于模块 ngx_http_gzip_module,默认是内置模块 配置指令如下

进入配置文件打开压缩功能

#启用压缩功能时,协议的最小版本,默认HTTP/1.1

#如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”,一般建议打开

重启之后建造一个目录

然后

最后测试

##########nginx中的变量详解#########

nginx的变量可以在配置文件中引用,作为功能判断或者日志等场景使用 变量可以分为内置变量和自定义变量 内置变量是由nginx模块自带,通过变量可以获取到众多的与客户端访问相关的值。

1 内置变量

常用内置变量

$remote_addr;#存放了客户端的地址,注意是客户端的公网IP

$args; #变量中存放了URL中的所有参数 #例如:https://search.jd.com/Search?keyword=手机&enc=utf-8 #返回结果为: keyword=手机&enc=utf-8 $is_args #如果有参数为? 否则为空 $document_root; #保存了针对当前资源的请求的系统根目录,例如:/webdata/nginx/timinglee.org/lee。

$document_uri; #保存了当前请求中不包含参数的URI,注意是不包含请求的指令 #比如:http://lee.timinglee.org/var?\id=11111会被定义为/var #返回结果为:/var $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请求生成的文件绝对路径, #如:webdata/nginx/timinglee.org/lee/var/index.html

$request_uri; #包含请求参数的原始URI,不包含主机名,相当于:$document_uri?

$args, #例如:/main/index.do?id=20190221&partner=search $scheme; #请求的协议,例如:http,https,ftp等 $server_protocol; #保存了客户端请求资源使用的协议的版本,例如:HTTP/1.0,HTTP/1.1,HTTP/2.0等

$server_addr; #保存了服务器的IP地址

$server_name; #虚拟主机的主机名 $server_port; #虚拟主机的端口号

$http_user_agent; #客户端浏览器的详细信息

$http_cookie; #客户端的所有cookie信息

$cookie_ #name为任意请求报文首部字部cookie的key名 #示例: echo

$http_user_agent; echo $http_host; $http_ #name为任意请求报文首部字段,表示记录请求报文的首部字段,ame的对应的首部字段名需要为小写,如果有 横线需要替换为下划线

实验

vim /usr/local/nginx/conf.d/vhosts.conf

重载之后开始curl

访问结果

2 自定义变量

假如需要自定义变量名称和值,使用指令set $variable value;

语法格式: Syntax: set $variable value; Default: — Context: server, location, if

示例: set $name timinglee;

echo $name;

set $my_port $server_port;

echo $my_port;

echo "$server_name:$server_port";

实验配置:

访问

##################Nginx Rewrite 相关功能

/Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求.

/此功能依靠 PCRE(perl compatible regular expression),因此编译之前要安装PCRE库

/rewrite是nginx服务器的重要功能之一,用于实现URL的重写,URL的重写是非常有用的功能

/比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为访问

/另外还可以在一定程度上提高网站的安全性

1.1 if 指令

用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进行 配置,Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断,用法如下:

使用正则表达式对变量进行匹配,匹配成功时if指令认为条件为true,否则认为false,变量与表达式之间 使用以下符号链接:

实验

vim /usr/local/nginx/conf.d/vhost.conf

重载之后访问(文件不存在时)

(文件存在时)

      1.2 set 指令

指定key并给其定义一个变量,变量可以调用Nginx内置变量赋值给key 另外set定义格式为set $key value,value可以是text, variables和两者的组合。

.1.3 break 指令

用于中断当前相同作用域(location)中的其他Nginx配置

与该指令处于同一作用域的Nginx配置中,位于它前面的配置生效

位于后面的 ngx_http_rewrite_module 模块中指令就不再执行

Nginx服务器在根据配置处理请求的过程中遇到该指令的时候,回到上一层作用域继续向下读取配置

该指令可以在server块和locationif块中使用

注意: 如果break指令在location块中后续指令还会继续执行,只是不执行 ngx_http_rewrite_module 模块的指令,其它指令还会执行

实验

访问结果

在中间加break

访问结果

加if语句

访问结果

指定谷歌fangwen

   1.4 return 指令

return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重 定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置,return可以在server、if 和 location块进行配置

语法格式

实验

存在的话输出exist ,不存在的话返回到百度

创建目录就ok

./2 rewrite 指令

通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配, rewrite主要是针对用户请求的URL或者是URI做具体处理

语法格式 :rewrite regex replacement [flag];

rewrite将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为表达式指定的新的URI.

注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成 后,会重新一轮的替换检查,隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的 标志位用于控制此循环机制

如果替换后的URL是以http://或https://开头,则替换结果会直接以重定向返回给客户端, 即永久重定向 301

.2.1 rewrite flag 使用介绍 利用nginx的rewrite的指令,可以实现url的重新跳转,rewrite有四种不同的flag,分别是redirect(临时 重定向302)、permanent(永久重定向301)、break和last。

其中前两种是跳转型的flag,后两种是代理型 跳转型指由客户端浏览器重新对新地址进行请求 代理型是在WEB服务器内部实现跳转

.2.2 rewrite案例: 域名永久与临时重定向

域名的临时的调整,后期可能会变,之前的域名或者URL可能还用、或者跳转的目的域名和URL还会跳 转,这种情况浏览器不会缓存跳转,临时重定向不会缓存域名解析记录(A记录),但是永久重定向会缓存。

示例: 因业务需要,将访问源域名 www.timinglee.org 的请求永久重定向到 www.timinglee.com

之后永久重定向

windows配置解析后浏览器访问

浏览器访问

临时重定向

i

浏览器访问

2.3 rewrite 案例: break 与 last

测试:

访问break请求被rewrite至test1,而访问test1转递请求再次被rewrite发送至test2,此测试last和break 分别有什么区别

.2.3.1 break和last区别案例

vim /usr/local/nginx/conf.d/vars.conf

浏览器访问

之后改成这样

浏览器访问

在这边访问

 加入last之后

2.4 rewrite案例: 自动跳转 https

案例:基于通信安全考虑公司网站要求全站 https,因此要求将在不影响用户请求的情况下将http请求全 部自动跳转至 https,另外也可以实现部分 location 跳转

实验

然后退出重载浏览器访问

之后(当访问的不是http时会触发动作)

改成这个

重载之后访问

2.5 rewrite 案例: 判断文件是否存在

案例:当用户访问到公司网站的时输入了一个错误的URL,可以将用户重定向至官网首页

访问ok

3.2 实现防盗链

基于访问安全考虑,nginx支持通过ngx_http_referer_module模块,检查访问请求的referer信息是否有效 实现防盗链功能

全站

在10的主机上

vim index.html

之后浏览器访问

点击之后

六 Nginx 反向代理功能

反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的 一种方式,这是用的比较多的一种方式。

Nginx 除了可以在企业提供高性能的web服务之外,另外还可以将 nginx 本身不具备的请求通过某种预 定义的协议转发至其它服务器处理,不同的协议就是Nginx服务器与其他服务器进行通信的一种规范,主 要在不同的场景使用以下模块实现不同的功能

逻辑调用关系:

访问逻辑图:

实验

需要100,10,20,三台主机

100里面

10里面

20里面

还可以做动静结合

100

10

之后浏览器访问

1.3.2 针对特定的资源实现代理

1.1.4 反向代理示例: 缓存功能

缓存功能默认关闭状态,需要先动配置才能启用

.1.4.1 非缓存场景压测

1.4.2 准备缓存配置

实验

vim /usr/local/nginx/conf/nginx.conf

加入缓存

接着vim hosts.conf

接着看压缩

1.2 http 反向代理负载均衡

在上一个节中Nginx可以将客户端的请求转发至单台后端服务器但是无法转发至特定的一组的服务器,而 且不能对后端服务器提供相应的服务器状态监测,Nginx 可以基于ngx_http_upstream_module模块提 供服务器分组转发、权重分配、状态监测、调度算法等高级功能

1.2.2 反向代理示例: 后端多台 web服务器

先搞测试环境

 

关闭缓存

配置100(vim  /usr/local/nginx/conf.d/vhosts.conf)

访问

之后加入算法

访问

hash .........consistent

访问

cookie

访问

#################2 实现 Nginx 四层负载均衡

Nginx在1.9.0版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载,udp主要用于 DNS的域名解析,其配置方式和指令和http 代理类似,其基于ngx_stream_proxy_module模块实现tcp 负载,另外基于模块ngx_stream_upstream_module实现后端服务器分组转发、权重分配、状态监测、 调度算法等高级功能

2.1 tcp负载均衡配置参数

100配置

6.2.2 负载均衡实例: MySQL

10和20安装mysql

第一步之后(之后跟着做)10和20一样

100配置(vim dns.conf)

之后

密码忘了!!!!!!!

#########################源码编译php

  

FastCGI实战案例 : Nginx与php-fpm在同一服务器

解压这两个

编译

安装

php相关配置优化

100里

浏览器访问

6.3.3 php的动态扩展模块(php的缓存模块)

安装memcache模块

100

浏览器访问

压力测试

清理memcache:systemctl restart memcached.service

6.3.4 php高速缓存

部署方法

在我们安装的nginx中默认不支持memc和srcache功能,需要借助第三方模块来让nginx支持此功能,所 以nginx需要重新编译

实验

100

之后压力测一下

ab -n500 -c10 http://php.timinglee.org/index.php

##########7 nginx 二次开发版本

7.2 编译安装 openresty

浏览器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值