Nginx前端入门

Nginx
本文涉及知识点:

什么是 Nginx

正向/反向代理

Nginx 实战

介绍
NGINX(Engine X)是一款轻巧,高性能的 HTTP 和反向代理服务器,也可作为通用代理服务器(TCP/UDP/IMAP/POP3/SMTP),最初由俄罗斯Игорь Сысоев撰写。

NGINX 是高性能的 HTTP 和反向代理服务器,其特征是存储器使用率低和强大的并发能力。实际上,NGINX 的并发功能优于相同类型的 Web 服务器

NGINX 专门为性能优化而开发。最重要的要求是性能,它非常关注效率。据报道,NGINX 最多可以支持 50000 个并发连接

Forward proxy and reverse proxy
NGINX 是反向代理服务器,那么什么是反向代理?让我们首先看一下所谓的正向代理

正向代理:LAN 中的计算机用户直接访问网络是不可行的,并且只能通过代理服务器(服务器)访问。这项代理服务称为 forward 代理。

反向代理:客户端无法感知代理,因为客户端无需配置网络即可访问网络,只要请求发送到反向代理服务器,反向代理服务器就会选择目标服务器来获取数据,然后返回给客户端。反向代理服务器和目标服务器只是外部世界的服务器,它们公开了代理服务器地址并隐藏了真实的服务器 IP 地址

安装 Nginx
要安装 NGINX,您可以参考在线教程

在这里,我列出了一些常用命令:

View version: nginx -v

Start: nginx

Shutdown: nginx -s stop

Determine whether the configuration file is correct: nginx -t

Reload configuration: nginx -s reload

NGINX configuration file
配置文件分为三个模块:

Global 全局部分:从配置文件的开头到 Events 部分,主要是设置某些影响 NGINX 服务器整体操作的配置指令。(可以合理地说,在配置并发处理服务时,值越大,可以支持并发处理越多,但是此时它将受到硬件,软件和其他设备的限制)。

Events 部分:影响 NGINX 服务器和用户之间的网络连接。常见设置包括是否启用多个工作过程中的网络连接序列化,是否允许同时接收多个网络连接,等等。

HTTP 部分:此处配置了反向代理和负载均衡

Location 匹配规则
有以下四种方式配置:

location[ = | ~ | ~* | ^~ ] url {

}
其中,方括号中的四种标识符是可选项,用来改变请求字符串和 uri 的匹配方式。uri 是待匹配的请求字符串,可以是不包含正则的字符串,这种模式被称为“标准的 uri”;也可以包含正则,这种模式被称为”正则 uri”,如下:

location ~ .*\.(php|php5)?$ {

}

四种可选的标识符
标识符 描述
= 精确匹配,用于标准的 URL,需要严格匹配 URL,并且只有在完全相等的情况下,才能停止向下搜索和请求过程
^~ 非正则匹配 即在没有正则表达式的情况下用于 URL 之前,需要 NGINX 服务器来查找 URL 和字符串之间最高匹配度的位置,然后使用此位置立即处理请求而无需正则匹配
~ 正则匹配 最佳匹配,用于表明 URL 包含正则表达式, 对大小写敏感
~* 正则匹配 与 ~ 相同,但不区分大小写

备注:

如果 uri 里面包含正则表达式,就必须使用或*标识符;

针对和*匹配标识符,可以在前面加上!来取反,如下:

!~ 表示正则不匹配,区分大小写。

!~* 表示正则不匹配,不区分大小写。

案例
“=”精准匹配案例

location = /login {
# 精确匹配 /login ,匹配成功后,立即结束
}
“~”区分大小写正则匹配案例

location ~ /images/ {
#正则匹配,区分大小写,匹配成功后,立即结束
}
“~*”不区分大小写正则匹配案例

location ~* /images/ {
#正则匹配,不区分大小写,匹配成功后,立即结束
}
“^~” 不进行正则匹配的标准匹配

location ^~ /images/ {
# 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
}
普通匹配(最长字符匹配)

location /blog/ {
# 与 location 顺序无关
# 若完全匹配成功,就不在继续匹配,否则还会进行正则匹配
}
location 匹配顺序

在没有标识符的请求下,匹配规则如下:

nginx 服务器首先在 server 块的多个 location 块中搜索是否有标准的 uri 和请求字符串匹配。如果有多个标准 uri 可以匹配,就匹配其中匹配度最高的一个 location。

然后,nginx 在使用 location 块中,正则 uri 和请求字符串,进行匹配。如果正则匹配成功,则结束匹配,并使用这个 location 处理请求;如果正则匹配失败,则使用标准 uri 中,匹配度最高的 location。

备注:

如果有精确匹配,会先进行精确匹配,匹配成功,立刻返回结果。

普通匹配与顺序无关,因为按照匹配的长短来取匹配结果。

正则匹配与顺序有关,因为是从上往下匹配。(首先匹配,就结束解析过程)。

在 location 中,有一种通配的 location,所有的请求,都可以匹配,如下

location / {
# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
# 但是正则和最长字符串会优先匹配
}
结合标识符,匹配顺序如下:

图片

Example
location = / {
//精确匹配/ ,主机名后面不能带任何字符串
echo “规则 A”;
}

location = /login {
//精确匹配 /login 开头的地址,匹配符合以后,不在继续往下搜索
echo “规则 B”;
}

location ^~ /blog/ {
//非正则匹配,匹配/blog/后,停止往下搜索正则,采用这一条
echo “规则 C”;
}

location ~ \.(gif|jpg|png|js|css)$ {
//区分大小写的正则匹配 若匹配成功,停止往下搜索正则,采用这一条
echo “规则 D”;
}

location ~* \.png$ {
//区分大小写的正则匹配 ,停止往下搜索正则,采用这一条
echo “规则 E”;
}

location / {
//因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
//如果没任何规则匹配上,就采用这条规则
echo “规则 F”;
}

location /blog/detail {
//最长字符串匹配,若完全匹配成功,就不在继续匹配,否则还会进行正则匹配
echo “规则 G”;
}

location /images {
//最长字符串匹配,同上
echo “规则 Y”;
}

location ^~ /static/files {
//非正则匹配,若匹配成功,就不在继续匹配
echo “规则 X”;
}
当访问根路径/的时候,比如 http://www.xxx.com.cn/ ,会匹配规则 A。

http://www.xxx.com.cn/login 被访问时 ,会匹配规则 B。

http://www.xxx.com.cn/login.html 被访问时 ,会匹配规则 F。

http://www.xxx.com.cn/blog/detail/3.html 被访问时 ,会匹配规则 C。分析思路,首先看看,“精确匹配”是否可以匹配成功,显示不可以;然后,看看是否可以“普通匹配”是否可以完全匹配,显示也没有;接着在看看非正则匹配,是否可以匹配成功,发现同规则 C 匹配上了,所以采用了规则 C。

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...