Nginx(你总以为机会无限,所以从不珍惜眼前人)

文章详细介绍了Nginx的安装过程,包括环境变量配置,并阐述了反向代理的概念,区分了正向代理与反向代理的区别。接着,文章讲解了如何通过Nginx实现负载均衡,包括简单配置和不同负载均衡策略。此外,还介绍了动静分离的基本概念和配置方法,以及如何利用keepalived实现Nginx的高可用性,确保服务的稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1 简介

2 安装

2.1 环境变量

3 反向代理

3.1 正向代理

3.2 反向代理

3.3 简单实现

3.4 区别

4 负载均衡

4.1 简单实现

4.2 负载均衡策略

5 动静分离

5.1 基本介绍

5.2 动静分离目的

5.3 配置

5.4 location

6 高可用

6.1 keepalived

6.2 安装


1 简介

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。

2 安装

(1)必须先安装nginx需要的依赖环境 

yum -y install gcc-c++ pcre-devel zlib-devel openssl openssl-devel

2)官网下载nginx压缩包 nginx-1.18.0.tar.gz

nginx: download

(3)把下载的nginx上传到linux系统

(4)创建一个目录作为nginx的安装目录

mkdir /usr/soft/nginx

(5)解压nginx源码文件

tar -zxvf nginx-1.18.0.tar.gz 

(6)进入解压后的目录nginx-1.18.0 去指定nginx安装的目录

./configure --prefix=/usr/soft/nginx

(7)编译并执行安装

make                # 编译
make install        # 安装

(8)启动nginx

/usr/soft/nginx/sbin/nginx    # 启动nginx
/usr/soft/nginx/sbin/nginx -s stop   # 关闭nginx
/usr/soft/nginx/sbin/nginx -s reload  # 重新加载nginx配置 修改了配置文件,就需要重新加载。
/usr/soft/nginx/sbin/nginx -s quit  #安全退出

(9)访问 虚拟机ip:80

192.168.187.165:80

出现此界面说明nginx启动成功

2.1 环境变量

①编辑配置文件

vim /etc/profile

②最后一行加入

export NGINX_HOME=/usr/soft/nginx/
export PATH=$PATH:$NGINX_HOME/sbin

③重新加载配置文件

source /etc/profile

④查看是否配置成功

nginx -v

出现 nginx version: nginx/1.18.0 版本信息就是配置成功了

3 反向代理

3.1 正向代理

如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

3.2 反向代理

其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

3.3 简单实现

(1)准备一台服务器

(2)启动项目

1.编辑nginx.conf配置文件

vim nginx.conf

2. 添加下面内容

  server {
        listen       82;
        server_name  localhost;
        location /{
            #反向代理的服务器ip和端口号
           proxy_pass   http://192.168.187.165:8080;
        }
    }

此时访问nginx的82端口就会被反向代理到 http://192.168.187.165:8080;

3.4 区别

正向代理和反向代理的区别,一句话就是:如果我们客户端自己用,就是正向代理。如果实在服务器用,我们用户无感知,就是反向代理。

4 负载均衡

4.1 简单实现

(1)准备两台或以上服务器 (ip地址各不相同)

(2)部署并启动相同的项目

(3)编辑 nginx.conf 配置文件

    # 负载均衡配置  集群服务器的ip和端口  weight=2 设置为权重策略
    upstream wjq{
        server 192.168.187.165:8080 weight=4;  
        server 192.168.187.100:8080 weight=1;
        server 192.168.187.101:8080 weight=2;
    }
    server {
        listen       83;
        server_name  localhost;
        location /{
            #反向代理的服务器ip和端口号
           proxy_pass   http://wjq;
        }
    }

(4)此时访问nginx的 83 端口并添加项目的访问路径就能实现负载均衡

4.2 负载均衡策略

  • 轮询

    • 在轮询中,如果服务器down掉了,会自动剔除该服务器。

    • 缺省配置就是轮询策略。

    • 此策略适合服务器配置相当,无状态且短平快的服务使用。

  • 权重

    • 权重越高分配到需要处理的请求越多。

    • 此策略比较适合服务器的硬件配置差别比较大的情况。

  • ip_hash

    • 依据发出请求的客户端 IP 的 hash 值来分配服务器

5 动静分离

5.1 基本介绍

Nginx动静分离,简单来说,就是动态请求和静态请求分开,也可以理解成使用Nginx处理静态页面,Tomcat处理动态页面,动静分离从目前实现角度来讲大致分为两种:

  • 纯粹把静态文件独立成单独的域名,放在独立的服务器上(主流推崇的方案)

  • 动态跟静态文件混合在一起发布,通过Nginx来分开

5.2 动静分离目的

为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,来加快解析速度,提高请求的访问效率,降低原来单个服务器的压力。

5.3 配置

找到Nginx安装目录,打开/conf/nginx.conf配置文件

http {
	……

	server {
		listen       80;
		server_name  192.168.17.129;

		location /www/ {
			root	/data/;
			index	index.html index.htm;
		}
		
		location /image/ {
			root	/data/;
			autoindex	on; // 列出访问目录
		}
	}
}

上面的配置,就是当请求是以/www/开始的,则进入/www/data/目录下找资源,如果是以/image/开始的,则进入/image/data/目录下找资源,同时该路径下配置了一个autoindex on,当访问/image/目录时,会列出该目录下的所有文件

5.4 location

location前缀可以使用正则表达式

  • /通用匹配,任何请求都会匹配到

  • =精准匹配,不是以指定模式开头

  • ~正则匹配,区分大小写

  • ~*正则匹配,不区分大小写

  • ^~非正则匹配,匹配以指定模式开头的location

location前缀可以使用正则表达式:

/通用匹配,任何请求都会匹配到
=精准匹配,不是以指定模式开头
~正则匹配,区分大小写
~*正则匹配,不区分大小写
^~非正则匹配,匹配以指定模式开头的location

location匹配顺序:

  1. 多个正则,location直接按书写顺序匹配,成功后就不会继续往后面匹配

  2. 普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)

  3. 当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配

  4. 所有类型location存在时,=匹配 > ^~匹配 > 正则匹配 > 普通(最大前缀匹配)

location ~*/(css|img|js) {
    root /usr/local/nginx/static;
    index index.html index.htm;
}

6 高可用

思考:如果nginx服务器突然宕机了怎么办?备用服务器就不失为一个很好的解决办法

在使用 Nginx 做反向代理或者负载均衡的时候,都是以 Nginx 为入口,如果 Nginx 宕机了,那么所有的服务都无法正常提供,影响非常严重。所有我们需要保证 nginx 高可用,就是配置备份机,前一个挂了,还有后一个。

6.1 keepalived

我们可以通过 keepalived 来实现 Nginx 的高可用,keepalived 是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。Keepalived的作用是检测 web 服务器的状态,如果有一台 web 服务器死机或工作出现故障,Keepalived 将能检测到,并将有故障的 web 服务器从系统中剔除,当web服务器工作正常后 Keepalived 会自动将该 web 服务器加入到服务器群中。这些工作全部都会自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。keepalived 可以理解为一个健康检查的软件。

高可用至少需要 2 台服务器,主备都得装上keepalived,当请求访问主服务器时,备份服务器会一直检查主服务器的状态。

6.2 安装

(1)在线安装

yum install -y keepalived

(2)进入根目录

cd /etc/keepaliced/

vi keepaliced.conf

(3)主服务器和备份服务器的 keepalived 配置文件有一点不同。

下面是主服务器的 keepalived.conf 文件内容,直接替代默认的 keepalived.conf 配置文件即可。

global_defs {
	notification_email {
	  acassen@firewall.loc
	  failover@firewall.loc
	  sysadmin@firewall.loc
	}
	notification_email_from Alexandre.Cassen@firewall.loc
	smtp_ server 192.168.187.165  	#代理的ip地址  主服务器的ip地址。邮件服务器地址
	smtp_connect_timeout 30			#超时时间
	router_id 192.168.187.165		#代理的ip地址
}

vrrp_script chk_http_port {
	script "/usr/local/src/nginx_check.sh"    #检测脚本存放的路径
	interval 2  							  # 检测脚本执行的间隔,即检测脚本每隔2s会自动执行一次
    weight 2   								  # 权重,如果这个脚本检测为真,服务器权重+2
}

vrrp_instance VI_1 {
	state MASTER    	# 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将 MASTER 改为BACKUP
	interface ens33 	# 通信端口 通过ip addr可以看到,根据自己的机器配置
	virtual_router_id 51
	priority 100  		#优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小
	advert_int 1		#心跳间隔,默认为1s。keepalived多机器集群 通过心跳检测当前服务器是否还正常工作,如果发送心跳没反应,备份服务器就会立刻接管
	authentication {  	#服务器之间通信密码
		auth type PASS 	#设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
		auth pass 1111
        }
	virtual_ipaddress { 	# 自定义虚拟IP。自定义的虚拟ip得根据真实ip设置。比如真实ip是192.168.91.138,那么虚拟ip可以设置为192.168.91.139~255,前面三个数得一致
		192.168.187.50   	# 定义虚拟ip(VIP),可多设,每行一个
	}
}

两台nginx服务器都要安装keepalived 并分别配置ip 和 state SLAVE | MASTER

备份服务器的 keepalived 配置文件:

global_defs {
    notification_email {
      acassen@firewall.loc
      failover@firewall.loc
      sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_ server 192.168.187.166    #备份服务器的ip地址
    smtp_connect_timeout 30
    router_id 192.168.187.166		#代理的ip地址    			
}
vrrp_script chk_http_port {
    script "/usr/local/src/nginx_check.sh"   #检测脚本
    interval 2   # (检测脚本执行的间隔)2s
    weight 2  	#权重,如果这个脚本检测为真,服务器权重+2
}
vrrp_instance VI_1 {
    state BACKUP    		# 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将MASTER 改为BACKUP
    interface ens33	 		# 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 51 	# 虚拟路由编号,主、备机的virtual_router_id必须相同
    priority 90         	#优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1    		# 检查间隔,默认为1s(vrrp组播周期秒数),每隔1s发送一次心跳
    authentication {     	# 校验方式, 类型是密码,密码1111
        auth type PASS   	#设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth pass 1111
    }
    virtual_ipaddress { # 虛拟ip
        192.168.187.50 # 定义虚拟ip(VIP),可多设,每行一个
    }
}

创建nginx_check.sh 脚本文件放入 /usr/local/src/

#! /bin/bash
#检测nginx是否启动了
A=`ps -C nginx -no-header | wc - 1`
if [ $A -eq 0];then    #如果nginx没有启动就启动nginx 
    /usr/soft/nginx/sbin/nginx    #通过Nginx的启动脚本来重启nginx
    sleep 2
    if [`ps -C nginx --no-header| wc -1` -eq 0 ];then   #如果nginx重启失败,则下面就会停掉keepalived服务,进行VIP转移
        killall keepalived
    fi
fi

(4)两台nginx服务器都启动nginxkeepalived.service

nginx #启动nginx
systemctl start keepalived.service

(5)访问keepalived的虚拟ip地址192.168.187.50可以看到MASTER节点的欢迎信息

(6)测试MASTER服务器宕机

关闭MASTER节点中的nginx和keepalived

nginx -s stop
systemctl stop keepalived.service

再次访问192.168.187.50地址可以看到SLAVE节点的欢迎信息 说明配置成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值