五、配置实例

郁子大约 6 分钟约 1726 字笔记Nginx尚硅谷

(一)反向代理实例一

1. 实现效果

  • 打开浏览器,输入地址 www.123.com
  • 跳转到 Linux 系统的 Tomcat 主页面

2. 准备工作

  • Linux 系统安装 Tomcat ,使用默认端口 8080
    • Tomcat 安装文件放到 Linux 系统中,解压
    • 进入 Tomcatbin 目录中, ./startup.sh 启动 Tomcat 服务器
  • 对外开放访问的端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
  • 查看已开放的端口号
firewall-cmd --list-all
  • Windows 系统中通过浏览器访问 Tomcat 服务器

3. 访问过程的解析

4. 具体配置

1)在 windows 系统的 hosts 文件中进行域名和 ip 对应关系的配置:【ip 地址 域名】

192.168.17.129	www.123.com
  • 配置完可以通过 http://www.123.com:8080/ 访问到 Tomcat 首页

2)在 Nginx 配置文件中进行请求转发的配置(反向代理)

cd /usr/local/nginx/
vi nginx.conf
i
server {
  listen		80;
  server_name	192.168.17.129; #修改此行

  location / {
    root		html;
    proxy_pass	http://127.0.0.1:8080; #增加此行
    index		index.html index.htm;
  }
}
:wq

5.最终测试

cd /usr/local/nginx/
./nginx
  • 配置完可以通过 http://www.123.com/ 访问到 Tomcat 首页

(二)反向代理实例二

1.实现效果

  • 使用 Nginx 反向代理,根据访问的路径跳转到不同端口的服务中
    • Nginx 监听端口为 9001
    • 访问 http://127.0.0.1:9001/edu/ 直接跳转到 12.0.0.1:8080
    • 访问 http://127.0.0.1:9001/vod/ 直接跳转到 12.0.0.1:8081

2.准备工作

  • 准备两台 Tomcat 服务器,一台 8080 ,一台 8081
  • 创建文件夹和两个测试页面,一个 /edu/a.html ,一个 /vod/a.html

3.具体配置

  • 找到 Nginx 配置文件
server {
	listen		9001;
	server_name	192.168.17.129;

    # ~表示开启路径正则表达式匹配形式
    location ~ /edu/ {
      proxy_pass	http://127.0.0.1:8080;
    }

    location ~ /vod/ {
      proxy_pass	http://127.0.0.1:8081;
    }
}
  • 开放对外访问的端口号: 900180808081

4.最终测试

  • 访问 http://127.0.0.1:9001/edu/a.html 显示页面内容
  • 访问 http://127.0.0.1:9001/vod/a.html 显示页面内容

(三)负载均衡

1.实现效果

  • 浏览器地址栏输入地址: http://192.168.17.129/edu/a.html ,实现负载均衡效果,将多次请求平均到 80808081 端口中

2.准备工作

  • 准备两台 Tomcat 服务器,一台 8080 ,一台 8081
  • 在两台 Tomcatwebapps 目录中,创建 edu 文件夹,在 edu 文件中创建页面 a.html ,用于测试

3.具体配置

upstream myserver {
  server	192.168.17.129:8080;
  server	192.168.17.129:8081;
} #

server {
	listen		80;
    server_name	 192.168.17.129; #

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

4.最终测试

  • 访问 http://192.168.17.129/edu/a.html ,每次刷新都随机返回 8080/8081 的页面内容

(四)动静分离

1.实现效果

  • 访问 http://192.168.17.129/image/01.jpghttp://192.168.17.129/www/a.html 可以请求到相应的静态资源

2.准备工作

  • Linux 系统中准备静态资源,用于进行访问: /data/image/01.jpg/data/www/a.html

3.具体配置

server {
  listen		80;
  server_name	192.168.17.129;

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

  location /image/ {
    root		/data/;
    autoindex	on;
  }
}

4.最终测试

  • 浏览器中输入地址 http://192.168.17.129/image/01.jpg ,因为配置了 autoindex on ,所以访问后会显示当前目录,点击图片后可以看到图片
  • 浏览器中输入地址 http://192.168.17.129/www/a.html ,可以看到页面内容

(五)高可用集群

1.高可用

  • 问题: Nginx 服务器可能宕机

  • 解决:再增加一台备份的 Nginx 服务器

  • 需要两台 Nginx 服务器
  • 需要 keepalived 插件库
  • 需要虚拟 IP 地址

2.准备工作

  • 需要两台服务器: 192.168.17.129192.168.17.131
  • 在两台服务器中安装 Nginx
  • 在两台服务器中安装 keepalived
# 安装
yum install keepalived -y
# 查看
rpm -q -a keepalived
  • 安装后在 etc 里面生成目录 keepalived ,有文件 keepalived.conf

3.完成高可用配置(主从配置)

1)修改 /etc/keepalived/keepalived.conf 配置文件

  • 主服务器和备份服务器不同
vrrp_instance VI_1 {
	state MASTER # 主服务器
	instance ens33	# 网卡
	virtual_router_id 51 # 主、备机的virtual_router_id必须相同
	priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		192.168.17.50 # VRRP H虚拟地址
	}
}

vrrp_instance VI_1 {
	state BACKUP # 备份服务器
	instance 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虚拟地址
	}
}

2)keepalived 检测 Nginx 是否宕机的脚本

  • 本地创建 nginx_check.sh
#!/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
  • 放到服务器 /usr/local/src/ 目录下

3)查找网卡

  • usr 目录下输入 ifconfig ,第一个冒号前的就是

4)启动服务器:Nginx、129 服务器、131 服务器

# 启动Nginx
./nginx
# 启动keepalived
systemctl start keepalived.service

4.最终测试

  • 地址栏输入虚拟 IP: 192.168.17.50 ,可以看到 Nginx 启动页面,且在 129 服务器输入 ip a 可以看到 ens33 的进程
  • 把主服务器 Nginxkeepalived 停止,再访问 192.168.17.50 ,可以看到 Nginx 启动页面,且在 131 服务器输入 ip a 可以看到 ens33 的进程

(六)高可用配置文件详解

1.global_defs:全局配置

  • ​router_id LVS_DEVELBACK :配置访问到哪一台主机
  • 在主机服务器中查看
vi /etc/hosts
127.0.0.1	LVS_DEVEL # 新增

2.vrrp_script chk_http_port:脚本配置

  • interval 1 :配置脚本执行的间隔
  • weight -20 :配置当前服务器的权重

3.vrrp_instance VI_1 :虚拟 IP 配置

vrrp_instance VI_1 {
	state BACKUP # 备份服务器
	instance 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虚拟地址
	}
}

(七)Nginx 原理

1. 争抢机制

2. 一个 master 和多个 worker 的好处

  • 可以使用 nginx -s reload 热部署,利用 Nginx 进行热部署操作
  • 每个 worker 是独立的进程,如果有其中一个 worker 出现问题,由于其他 worker 是独立的,所以可以继续进行争抢,实现请求过程,不会造成服务中断

3. 设置多少个 worker 合适

  • NginxRedis 类似,都采用了 I/O 多路复用机制, Windows 中不采用此机制,所以一般部署到 Linux 中能把性能发挥到最大
  • worker 数和服务器的 cpu 数量相等是最合适的

4. worker_connection 连接数

1)发送一个请求,占用了 worker 的几个连接数?

  • 2 个或 4 个
  • 访问静态资源时占用 2 个,如果需要使用 Tomcat 访问服务器资源则需要 4 个

2)Nginx 有一个 master,有四个(worker_processes)worker,每个 work 支持最大的连接数(worker_connections)是 1024,支持的最大并发数是多少?

worker 最大支持的连接数:4*1024

(4*1024)/2

(4*1024)/4

  • 普通的静态访问最大并发数是: worker_connections * worker_processes / 2
  • HTTP 作为反向代理的最大并发数是: worker_connections * worker_processes / 4
上次编辑于: