【Nginx】部署-实例化-高可用集群配置-系统总结

经常使用nginx,一直没有好好的拿出个时间来整理,为了以后更换环境后部署方便一些,同时也希望为nginx初学者提供一些帮助,这里系统的总结了nginx的部署,实例化,高可用集群配置。

0x01.Nginx概述

1.什么是Nginx?

  • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
  • Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
  • 以上内容来自百度百科。
  • 用我自己的和话来说,Nginx就是一个高性能的HTTP和反向代理web服务器,本身是一款运行于服务器端的软件,专为服务器端性能优化而开发的,具有很强的并发能力,而且占用内存非常之少。(不知道反向代理请看第二,三点)

2.正向代理

  • 栗子:你不能直接访问谷歌,需要个梯子,间接的来访问谷歌,走的这种模式,就叫做正向代理。
  • 标准的解释:正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
  • 简而言之:需要在客户端配置代理服务器进行指定网站访问,就是正向代理。

【Nginx】部署-实例化-高可用集群配置-系统总结_第1张图片

3.反向代理

  • 栗子:你要访问某个网页,请求发送给了反向代理服务器,由反向代理服务器去选择真正的服务器提供资源,这种方式,叫反向代理。
  • 标准的解释:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
  • 简而言之:我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
    【Nginx】部署-实例化-高可用集群配置-系统总结_第2张图片

4.正反向代理的理解

  • 正向代理隐藏客户端ip,反向代理隐藏真实服务器ip。
  • 正向代理可以:突破访问限制,提高访问速度。
  • 反向代理可以:负载均衡,提供安全保障,提高访问速度。
  • 正向代理其实是客户端的代理,反向代理则是服务器的代理。

5.负载均衡

  • 增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,就是我们所说的负载均衡

6.动静分离

  • 为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

0x02.Linux下部署Nginx(Ubuntu)

1.安装依赖

  • 安装pcre库:

    • 百度pcre官网下载最新安装包。
    • 到linux中运行命令:
tar -zxvf [压缩包名]
cd [解压后的pcre文件夹]
./configure
make
make install
  • 安装zlib,openssl,gcc,方法类似。
  • 没有报错就是安装成功了。

2.Nginx安装

  • 到官网下载最新版本安装包。
  • 重复上述流程进行安装。
  • 启动:
/usr/local/nginx/sbin/nginx
  • 若没有报错,可以查看是否启动成功:
 ps -ef | grep nginx
  • 如下图,由两个nginx进程就是启动成功了:

在这里插入图片描述

3.Nginx启动过程中的问题

  • 若你成功安装了上述的依赖库但却出现如下错误:
error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
  • 那么恭喜你,你虽然没有启动成功,但是你遇到的问题是最经典的一个nginx启动问题,原因就是pcre库虽然成功安装了,但却没有成功链接到lib目录下,你可以先查看nginx启动需要的依赖:
ldd $(which /usr/local/nginx/sbin/nginx)
  • 若发现只有libcpcre.so.1未找到,那么首先去/usr/local/lib下查看:
cd /usr/local/lib
  • 若发现有libcpcre.so.1,那么你需要将其链接到/lib目录或者/lib64目录下(可以两个都尝试一下):
ln -s libpcre.so.1 /lib
ln -s libpcre.so.1 /lib64
  • 若在/usr/local/lib下没有发现libpcre.so.1,但却发现了libpcre.so.0.0.1,那么你可以现将licpcre.so.0.0.1链接为libpcre.so.1:
ln -s libpcre.so.0.0.1 libpcre.so.1
  • 然后再重复上述的操作。
  • 如果不属于以上的情况,可以先百度是否有类似的问题,实在不行,进入pcre的安装目录,执行make uninstall,完全卸载pcre,下载其它版本进行尝试。

4.访问Nginx

  • nginx的默认端口是80,而一般会习惯将tomcat的端口改为80,这样就会起冲突,需要修改nginx的端口号。
  • 如果使用的是云服务器,还需要配置相关的安全组,开放修改后的端口。
  • 进入nginx的配置文件:
 cd /usr/local/nginx/conf/
  • 修改端口号:
vi nginx.conf

【Nginx】部署-实例化-高可用集群配置-系统总结_第3张图片

  • 浏览器访问ip:port,就能出现以下页面,代表nginx成功部署!
    【Nginx】部署-实例化-高可用集群配置-系统总结_第4张图片

5.nginx常用命令

# 查看nginx的版本号
./nginx -v
# 停止nginx
./nginx -s stop
# 重新加载nginx
./nginx -s reload

6.niginx配置文件解读

1.全局块
  • 从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
  • 如:worker_processes是Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
    【Nginx】部署-实例化-高可用集群配置-系统总结_第5张图片
2.events块
  • events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。 这部分的配置对 Nginx 的性能影响较大。
  • 如下每个 work process 支持的最大连接数为 1024。

在这里插入图片描述

3.http块
  • 代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

  • http 块也可以包括 http 全局块、server 块。

  • http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

  • server 块和虚拟主机有密切关系,该技术的产生是为了节省互联网服务器硬件成本。

  • 每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。

  • 而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

    • 1、全局 server 块
      最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
    • 2、location 块
      一个 server 块可以配置多个 location 块。
      这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

【Nginx】部署-实例化-高可用集群配置-系统总结_第6张图片

0x03.Nginx的简单实例化

1.Nginx实现反向代理

  • 拟实现的功能:nginx根据访问路径的不同,将请求转发到不同的服务器上。
  • 例如:访问ip:port/a,转发至服务器ip:9001,访问ip:port/b,转发至服务器ip:9002。
  • 配置过程:在http块中添加一个server配置规则:
server{
	listen [port];
	server_name [ip];
	location ~ /a/ {
		proxy_pass http://[ip]:9001;
	}
	location ~ /b/ {
		proxy_pass http://[ip]:9002;
	}
}
  • 其中location指令用于匹配 URL。
location [ = | ~ | ~* | ^~ ] uri {

}
  • 1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
  • 2、~:用于表示 uri 包含正则表达式,并且区分大小写。
  • 3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
  • 4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
  • 如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。

2.Nginx实现负载均衡

  • 拟实现的效果:访问指定路径后,nginx实现负载均衡,将请求均衡的转发至多个服务器。
  • 配置过程:先添加upstream块:
upstream myserver{
	ip_hash;
	server [ip]:9001 weight=1;
	server [ip]:9002 weight=1;
}
  • 再在server中修改location:(只修改proxy_pass)
location / {
	...
	proxy_pass http://myserver;
	...
}

3.Nginx实现动静分离

  • 拟实现的效果:根据不同的后缀名实现不同的请求转发,将动态资源和静态资源分离开来。
  • 例子:访问login转发至动态资源,访问img转发至静态资源。
  • 配置过程:server中添加location(整体思路就是反向代理)
location /login/ {
	root /file/;
	index index.html index.htm;
}
location /img/ {
	root /img/;
	autoindex on;
}

0x04.Nginx高可用集群配置

  • nginx高可用集群理解:简而言之就是当一台nginx服务器宕机后,备份nginx服务器能继续进行工作。
  • 实现nginx高可用集群,需要使用到软件keepalived。

1.keepalived安装

  • 首先安装依赖:
sudo apt-get install libssl-dev
sudo apt-get install openssl
sudo apt-get install libpopt-dev
  • 安装keepalived:
sudo apt-get install keepalived
  • 以上安装过程,主从服务器相同。

2.keepalived配置文件修改

  • 编辑keepalived的配置文件:
 vi /etc/keepalived/keepalived.conf
  • 在主服务器的keepalived配置文件中加入如下内容:
global_defs { 
	   notification_email { 
	   		[email protected] 
	   		[email protected]
	   	 	[email protected] 
	   	}
	   	notification_email_from [email protected]
	   	smtp_server 192.168.17.129 #邮件服务ip
   		smtp_connect_timeout 30 #超时时间
   		router_id LVS_DEVEL 
}
vrrp_script chk_http_port { 
		   script "/usr/local/src/nginx_check.sh"  #脚本所在路径
		   interval 2 #(检测脚本执行的间隔) 
		   weight -10 #权值设置
}
vrrp_instance VI_1 { 
		 state MASTER  #状态 - 主服务器
		 interface ens33  #网卡
		 virtual_router_id 33  #主、备机的 virtual_router_id 必须相同
		 priority 130 #服务器的优先级
		 advert_int 1  
		 authentication { 
		 		 auth_type PASS  
		 		 auth_pass 1111 
		 }
		 virtual_ipaddress { 
 				192.168.1.110/24 dev ens33 label ens33:1  #VRRP H 虚拟地址
 		} 
}	 
  • 在从服务器上添加如下配置:
global_defs { 
	   notification_email { 
	   		[email protected] 
	   		[email protected]
	   	 	[email protected] 
	   	}
	   	notification_email_from [email protected]
	   	smtp_server 192.168.17.129 #邮件服务ip
   		smtp_connect_timeout 30 #超时时间
   		router_id LVS_DEVEL 
}
vrrp_script chk_http_port { 
		   script "/usr/local/src/nginx_check.sh"  #脚本所在路径
		   interval 2 #(检测脚本执行的间隔) 
		   weight -5 #权值设置
}
vrrp_instance VI_1 { 
		 state BACKUP  #状态 - 备份服务器
		 interface ens33  #网卡
		 virtual_router_id 33  #主、备机的 virtual_router_id 必须相同
		 priority 80 #服务器的优先级
		 advert_int 1  
		 authentication { 
		 		 auth_type PASS  
		 		 auth_pass 1111 
		 }
		 virtual_ipaddress { 
 				192.168.1.110/24 dev ens33 label ens33:1  #VRRP H 虚拟地址
 		} 
}	 

3.在主备服务器的/usr/local/src中添加检测脚本

  • 在/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

4.重启nginx,keepalived,进行测试

./nginx -s stop
./nginx
systemctl restart keepalived
  • 如果将主服务器的nginx和keepalived杀死后,仍然能访问到nginx,说明高可用集群部署成功!

附录:nginx提供的负载均衡的策略
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2、weight
weight 代表权,重默认为 1,权重越高被分配的客户端越多
3、ip_hash
每个请求按访问ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决session 的问题。
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

你可能感兴趣的:(Nginx,nginx,nginx部署,nginx高可用集群,nginx总结,nginx实例化)