Nginx入门
Nginx入门
一、业务瓶颈
业务小,一个服务器足够
并发量增大,一台不能满足需求
横向扩展,又增加了服务器。这个时候几个项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器了,通过代理服务器来帮我们转发和处理请求。
我们希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。这个过程用户是无感知的,用户并不知道是哪个服务器返回的结果,我们还希望他可以按照服务器的性能提供不同的权重选择。保证最佳体验!所以我们使用了Nginx。
二、Nginx 简介
Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
正向代理
反向代理?
反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
负载均衡?
Nginx的负载均衡是指通过分发来自客户端的请求到多个后端服务器(也称为上游服务器)来平衡服务器负载的机制。它旨在提高系统的性能、可靠性和可扩展性。
负载均衡在客户端和后端服务器之间引入了一个中间层,其中Nginx充当负载均衡器。当客户端发送请求时,负载均衡器接收到请求,并根据特定的负载均衡算法将请求转发到后端服务器。
轮询
加权轮询
IP Hash
iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
动静分离
Nginx充当前端服务器,它根据请求的类型将请求转发到适当的后端服务器或处理程序。
具体而言,它将静态资源的请求(如HTML、CSS、JavaScript、图像文件等)直接服务于客户端,而动态内容(如PHP、Java、Python脚本生成的页面)则由后端应用服务器处理。
动静分离的一般工作流程:
- 当客户端发送请求时,Nginx首先检查请求的文件类型。
- 如果请求的是静态资源(如图像、CSS文件等),Nginx会直接从磁盘上的指定位置返回该文件,而无需转发给后端服务器。
- 如果请求的是动态内容(如需要应用程序处理的页面),Nginx将转发该请求给后端应用服务器(如Tomcat、Node.js服务器等),并将响应返回给客户端。
三、Nginx实战
1. HTTP服务器
(1) 首先在文档根目录Docroot(/usr/local/var/www)
下创建html目录, 然后在html中放一个index.html;
(2)配置nginx.conf
中的server
1 |
|
(3)访问测试
http://localhost/
指向/usr/local/var/www/index.html
, index.html是安装nginx自带的html
(4)指令简介
- server : 用于定义服务,http中可以有多个server块
- listen : 指定服务器侦听请求的IP地址和端口,如果省略地址,服务器将侦听所有地址,如果省略端口,则使用标准端口
- server_name : 服务名称,用于配置域名
- location : 用于配置映射路径uri对应的配置,一个server中可以有多个location, location后面跟一个uri,可以是一个正则表达式, / 表示匹配任意路径, 当客户端访问的路径满足这个uri时就会执行location块里面的代码
- root : 根路径,当访问
http://localhost/test.html
,“/test.html”会匹配到”/”uri, 找到root为/usr/local/var/www/html
,用户访问的资源物理地址=root + uri = /usr/local/var/www/html + /test.html=/usr/local/var/www/html/test.html
- index : 设置首页,当只访问
server_name
时后面不跟任何路径是不走root直接走index指令的;如果访问路径中没有指定具体的文件,则返回index设置的资源,如果访问http://localhost/html/
则默认返回index.html
(5)location uri正则表达式
.
:匹配除换行符以外的任意字符?
:重复0次或1次+
:重复1次或更多次*
:重复0次或更多次\d
:匹配数字^
:匹配字符串的开始$
:匹配字符串的结束{n}
:重复n次{n,}
:重复n次或更多次[c]
:匹配单个字符c[a-z]
:匹配a-z小写字母的任意一个(a|b|c)
: 属线表示匹配任意一种情况,每种情况使用竖线分隔,一般使用小括号括括住,匹配符合a字符 或是b字符 或是c字符的字符串\
反斜杠:用于转义特殊字符
小括号()之间匹配的内容,可以在后面通过$1
来引用,$2
表示的是前面第二个()里的内容。正则里面容易让人困惑的是\转义特殊字符。
2.常用命令
1 |
|