Nginx学习笔记(下载、安装、反向代理、负载均衡、高可用集群配置、原理)

一、nginx基本概念

(1)nginx是什么,做什么事情
Nginx是一个高性能的HTTP和反向代理服务器
特点:1.占用内存少,并发能力强,有报告声明最高达5万个连接数
2.具有很高的稳定性,其他的HTTP服务器遇到访问的峰值时,可能会导致服务器物理内存耗尽频繁切换,失去响应,只能重启服务器,但是Nginx采用了分阶段资源分配技术,使得它的CPU和内存占用率非常低,所以类似DOS这样的攻击对nginx来说基本上毫无用处。
3.无缓存的反向代理加速,简单的负载均衡和容错
4.模块化的架构
5.支持热部署,运行稳定
(2)反向代理
客户端访问的不是真实的服务器,而是到反向代理服务器,再由反向代理服务器转发到真正的服务器
(3)负载均衡
将请求通过一些规则转发到不同的服务器上
(4)动静分离
为了加快网站的解析速度,将一些静态资源部署到nginx上,来降低原来的服务器的压力

二、nginx安装和命令

(1)在linux系统中安装nginx
方式一:下载tar包
下载地址:http://nginx.org/en/download.html
在这里插入图片描述1.下载好后,将tar包放到opt目录下
在这里插入图片描述
2.解压
tar -zxvf nginx-1.20.2.tar.gz

3.安装前置依赖,gcc ,openssl
yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel

4.进入解压后的目录,编译配置
./configure
在这里插入图片描述
注意:这里可能会出错
在这里插入图片描述
解决办法:
执行后再执行 ./configure
yum -y install gcc gcc-c++ autoconf automake make

5.执行
make & make install

6.启动
cd /usr/local/sbin
./nginx
关闭 ./nginx -s stop
重启 ./nginx -s reload
在这里插入图片描述
7.测试
在网页输入ip 回车可以看到
在这里插入图片描述

注意:可能有的人不能访问是因为没有关闭防火墙或者开放相应端口
解决办法:
firewall-cmd --add-service=http -permanent
sudo firewall-cmd --add-port=80/tcp --permanent
firewall-cmd-reload

三、配置文件详解

位置: /usr/local/nginx/conf/nginx.conf
(1)nginx配置文件由三部分组成

第一部分 全局块
 从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令,可以

配置运行Nginx服务器的用户,允许生成的worker proess数,进程PID存放路径,日志存放路径等

例如: worker_processes 1;
这是Nginx服务器并发处理服务的关键配置,值越大,可以支持的并发处理量也越多,但会收到应急、软件等设备的制约

第二部分 events块
events块涉及的指令主要影响Nginx服务器与用户的网络连接.

例如: worker_connections 1024; 支持最大的连接数

第三部分 http块

这算是Nginx服务器配置中最频繁的一部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这
http块又分为http全局块、server块

四、nginx配置实例 反向代理

这里写个例子用于学习,请先安装jdk环境和 tomcat
实例1:
这个例子是 我们访问 www.123.com 通过nginx 访问 tomcat页面
在这里插入图片描述

1.本地host文件进行域名和ip对应关系的配置

C:\Windows\System32\drivers\etc
在这里插入图片描述
测试一下:可以正常访问
在这里插入图片描述

2. 在nginx的nginx.conf中进行反向代理的配置

增加内容:
在这里插入图片描述

3.测试访问

www.123.com
www.123.com:81
均转发到了tomcat页面
(www.123.com 等价于 192.168.188.112)

实例2
根据不同的路径访问到相应的地址

  1. = :严格匹配
  2. ~:用于表示url包含正则表达式,并且区分大小写
  3. ~*:用于表示url包含正则表达式,并且不区分大小写

在这里插入图片描述
访问 www.123.com:9001/demo

五、nginx配置实例 负载均衡

(1) 基础配置

作用:通过规则转发到不同服务器
写法:
1.
upstreat 起个名称{
实际服务器地址
}
2.
location中
proxy_pass http://上面的名字

例:

upstreat myserver {
	server 192.168.188.112:8080;
	server 192.168.188.112:8081;
}

server{
	listen   80;
	server_name 192.168.188.112;

	location /{
		proxy_pass  http://myserver;
		root  html;
		index  index.html  index.htm;
	}
}

这样外界访问 192.168.188.112:80 就会再负载均衡到具体的IP地址

(2) 策略

1.轮询(默认)
2.weight (权重)
weight代表权重,默认为1,权重越高被分配的客户端越多
例:

upstreat myserver {
	server 192.168.188.112:8080 weight=5;
	server 192.168.188.112:8081 weight =10;
}

3.ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题

upstreat myserver {
	ip_hash
	server 192.168.188.112:8080;
	server 192.168.188.112:8081;
}

4.fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配
例:

upstreat myserver {
	server 192.168.188.112:8080;
	server 192.168.188.112:8081;
	fair
}

六 、nginx配置实例 动静分离

概念:静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则静态资源的请求全部请求nginx服务器,达到动静分离的目标。
例:将静态资源放到 data目录中

server{
	listen   80;
	server_name 192.168.188.112;

	location /www/{
		root  /data/;
		index index.html index.htm;
	}
}

nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了下,方便大家在应用过程中,快速响应。root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
root实例:

location ^~ /t/ {
     root /www/root/html/;
}

如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。
alias实例:

location ^~ /t/ {
 alias /www/root/html/new_t/;
}

如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/new_t/a.html的文件。注意这里是new_t,因为alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。

注意:

  1. 使用alias时,目录名后面一定要加"/"。
  2. alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
  3. alias只能位于location块中。(root可以不放在location中)

七、nginx配置高可用集群

在这里插入图片描述
配置高可用的准备工作

(1)准备两台服务器,并安装nginx

我这里
第一台IP:192.168.188.112
第二台IP:192.168.188.110
在这里插入图片描述
在这里插入图片描述

(2)在两台服务器安装Keepalived

使用yum命令进行安装
yum install keepalived -y
检查是否安装成功
rpm -q -a keepalived
在这里插入图片描述

安装之后会在 /etc 中生成一个文件夹 keepalived
在这里插入图片描述

(3)主从配置

在第一台服务器上192.168.188.112
(1)准备一个脚本nginx_check.sh,放到/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

(2)修改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.188.112   #这个是主服务器的IP
   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 MASTER  # 备份服务器上将MASTER 改为 BACKUP
    interface ens33  # 网卡
    virtual_router_id 51   #主从机的virtual_router_id  必须相同
    priority 100      #主从机取不同的优先级,主机值较大,备份机较小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.188.50   //VRRP H 虚拟地址
    }
}

在第二台服务器上192.168.188.110
(1)同上面,准备一个脚本nginx_check.sh,放到/usr/local/src,内容与上面的一致
(2)修改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.188.110   #这个是从服务器的IP
   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 100      #主从机取不同的优先级,主机值较大,备份机较小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.188.50   //VRRP H 虚拟地址
    }
}

(3)重启nginx 启动keepalived
cd /usr/local/nginx/sbin
./nginx -s stop
./nginx

systemctl start keepalived.service

(4)终极测试
在浏览器访问虚拟IP
192.168.188.50
可以发现正常访问
在这里插入图片描述
将第一台服务器停了
./nginx -s stop
systemctl stop keepalived.service

然后再次访问,发现还可以正常访问

到这主从配置就结束了

八、nginx原理

master-worker机制
在这里插入图片描述
好处:
1.利于nginx做热部署操作。比如worker1争抢到了去进行处理,这时候修改了配置进行热部署,worker2,worker3进行更新并继续争抢新的信号,而worker会先做完原来的操作后才会去更新然后再继续去争抢新的信号
2.每个worker都是独立的进程,这样就不需要加锁,省去了锁带来的开销。并且他们是独立的进程,互不影响,当一个进程退出后,其他进程还在工作,服务不会中断

worker数量的设置
worker数量和服务器CPU数量相等最为适宜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小轩爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值