Nginx
Nginx是一个 高性能 的HTTP和 反向代理 服务器,特点是
占有内存少
、并发能力强
。Nginx通常被用来实现正向代理
、反向代理
、负载均衡
、动静分离
等功能。
基本概念
正向代理
用户知道目标服务器地址,但受限于网络条件,无法直接访问。这个时候就需要先连接代理服务器,由代理服务器去访问目标服务器,再把响应信息返回给用户。
反向代理
用户不知道目标服务器的地址,用户访问的是反向代理服务器的IP地址。代理服务器和目标服务器对外就是一个 整体,暴露的是代理服务器,而真正的目标服务器被隐藏了。
负载均衡
增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
动静分离
简单来说就是把动态和静态请求分开来,例如Nginx处理静态页面,Tomcat处理动态页面。
把静态资源独立成单独的域名,放在独立的服务器上去,主流做法。
把动态和静态文件混合一起发布,通过Nginx分开处理。
基本操作
Nginx启动
1 | nginx //启动Nginx |
暂停Nginx
1 | nginx -s stop //直接停止所有操作,退出Nginx |
重启Nginx
1 | nginx -s reload //当我们修改了配置文件时,就需要重启Nginx |
其他小命令
1 | nginx -t //检查配置文件是否正确 |
Nginx配置文件
一般按照功能划分,我们将Nginx的配置文件分为三大块,分别是 全局块,events块,http块
全局块
1 | user nginx; //Nginx用户及组,在window下不指定 |
全局块主要会设置一些影响Nginx服务器整体运行的配置指令,例如工作进程数目,错误日志存放地址等
events块
1 | events { |
events块主要影响Nginx服务器与用户的网络连接,常用的设置包括是否允许同时接受多个网络连接,选取那种事件驱动模型,每个工作进程的最大连接数量等.
http块
1 | http { |
http块的内容太多了,同时也是配置文件的重点,http块可以分为全局块和server块等
全局块
全局块复制配置文件引入,MIME-TYPE定义,日志自定义,连接超时,单连接请求数上线等.
全局块中常见的配置是 upstream
,用来负载均衡
1 | ##自定义我们的服务列表 |
在Nginx中提供了三种方式的负载均衡策略给我们选择.分别是轮询(默认方式),权重,ip_hash
轮询:每个请求按照时间顺序逐一分配到不同的后端服务器上去,就算服务器宕机,也能够自动剔除.(正常使用,不需要额外配置)
权重:
weigh
t代表权重,默认为1,权重越高的服务器分配到的客户端也就越多.1
2
3
4upstream myserver{
server 127.0.0.1:8080 weight =1;
server 127.0.0.1:8090 weight =2;
}
ip_hash:每个请求按访问的IP地址进行
hash
运算后,分配到所对应的后端服务器,这样的负载均衡策略能够解决session共享的问题.1
2
3
4
5upstream myserver{
ip_hash;#可与weight配合使用
server 127.0.0.1:8080 weight =1;
server 127.0.0.1:8090 weight =2;
}
server块
server中可以分为全局块和location块.
其中全局块主要包括了本虚拟机的监听配置和本虚拟主机的名称或者IP配置
location块则用来对虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理,地址定向,数据缓存和应答控制功能等.下面将通过配置server块来实现反向代理,负载均衡,动静分离.
location指令
- = :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
- ~:用于表示 uri 包含正则表达式,并且区分大小写。
- ~*:用于表示 uri 包含正则表达式,并且不区分大小写。
- ^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
反向代理
1 | server { |
负载均衡
1 | http { |
动静分离
1 | server { |