Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx的特点是占用内存少,并发能力强.
Niginx转为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能够经受高负载的考验.
用户在客户端中配置代理服务器,通过代理服务器间接访问某服务器,这个过程就是正向代理.
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只
需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返
回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器
地址,隐藏了真实服务器 IP 地址。
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速
度。降低原来单个服务器的压力。
可以通过多种方法安装Nginx,不同操作系统安装的方法不同,在Manjaro中,可以直接使用pacman从仓库进行一键安装,命令是sudo pacman -S nginx
.
在Nginx安装的主目录下,有一个nignx.conf
是它的配置文件,在这个文件中,可以看到Niginx默认端口号是80
,因此直接访问http://localhosr
就可以访问到Nginx的主页.
以下说的命令是针对上述操作系统和上述安装方式安装Nginx
nginx -v
systemctl start nginx
systemctl stop nginx
ps -ef | grep nginx
首先了解以下nginx的配置文件nginx.conf
配置文件共分为三大块: 全局块
events块
http块
全局块: 从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等.
events块: events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 wordprocess 可以同时支持的最大连接数等.
http块: 这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里.http块之中又分为两块: http全局块
server块
http全局块: http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等.
server块: http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等.
每个 http 块可以包括多个 server 块
,而每个 server 块就相当于一个虚拟主机
.
而每个 server 块也分为全局 server 块
,以及可以同时包含多个 locaton 块
.
在配置文件nginx.conf
进行如下配置
在
lcaotino
中配置proxy_pass
就可以配置目标服务器的url,当访问这个nginx时会跳转到目标服务器.需要注意的是
root
需要删除或者注释,否则还是会进到原始的欢迎页面
location后面可以跟uri的正则表达式,来判断应该访问哪一个服务器
表达式规则如下:
- = :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。- ~:用于表示 uri 包含正则表达式,并且
区分大小写
。- ~*:用于表示 uri 包含正则表达式,并且
不区分大小写
。- ^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
块中的正则 uri 和请求字符串做匹配。如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
upstream中可以选择多种负载均衡策略
轮询(默认): 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
ip_hash: 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
动静分离就是当访问静态资源时跳转到纯粹存放静态资源的服务器中
autoindex
设置是否显示目录结构,默认不显示
expires
设置资源过期时间,浏览器会对访问的这个资源缓存,在设置的这段时间内,当再次访问这个资源时,浏览器会对比服务器中该资源修改时间是否发生过改变,如果没有改变,就不会重复从服务器下载这个资源,而是返回状态码304,给用户浏览器缓存的资源.如果发生改变,就重新下载,并返回状态码200.
高可用是指Nginx的高可用,当一个Nginx服务器宕机,另一个Nginx服务器会代替那个服务器继续工作.
主从模式高可用集群的配置
所有服务器中都需要安装Nginx和Keepalived
修改/etc/keepalived/keepalivec.conf
配置文件
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔)
weight 2 # 权重
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
interface ens33 //网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H 虚拟地址
}
}
在/usr/local/src
添加检测脚本
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
每个Nginx服务根据需求进行配置后,启动Keepalived和Nginx
主从式高可用的Nginx集群配置完成
一个Nginx中有一个Master(管理者)和多个Worker(工作者),当Nginx接收到任务时,Master会将任务分发给Worker执行.这里的任务分配采用争抢机制
,出现任务时,每一个空闲的worker都会争抢这个任务,由优先争抢到的worker执行.
worker的数量是可以设置的.由于每一个worker会最大限度的使用CPU,因此worker的最合适的数量是服务器上CPU的数量.