文章目录
- Nginx的作用
- 学习Nginx之前需要了解的东西
-
- 正向代理
- 反向代理
- 负载均衡
- 动静分离
- Nginx的安装
- Nginx的常用命令
- Nginx的配置文件
- 反向代理的实现实例一
-
- 要实现的效果是
- 准备工作
- 访问的过程是
- nginx的请求转发配置(反向代理)
- 反向代理的实现实例二
-
- 要实现的效果
- 准备工作
- 负载均衡
-
- 实现效果
- 准备工作
- 在 nginx 的配置文件中进行负载均衡的配置
- nginx分配服务器策略
-
- 第一种 轮询(默认)
- 第二种 weight
- 第三种 ip_hash
- 第四种 fair(第三方)
- 动静分离配置
-
- 什么是动静分离?
- 准备工作
- 配置nginx.cof
- 高可用
-
- 什么是高可用
- 参考指令
- 停掉主服务器
Nginx的作用 Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。
学习Nginx之前需要了解的东西 正向代理 假如说我们访问我们学校的内网 但是我们直接访问不到我们就需要一个代理服务
我们通过
1.配置代理服务器
2.通过访问代理服务器
3.代理服务器再去访问我们学校的内网
这样我们就能访问到我们学校的内网
正向代理的最大特点是
需要在客户端配置代理服务器进行指定网站访问
文章图片
反向代理 反向代理是我们访问服务器的9001端口
然后服务器再去找tomcat的8001端口
这样对用户来说我们并不知道tomcat的端口
在我们使用的时候反向代理服务器和tomcat是一体的
反向代理的特点是
暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
文章图片
负载均衡 增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
假如说有九百个请求到了nginx服务器 nginx服务器会给这三个端口每个端口三百个请求让他们一起干活 干的数量也一样
文章图片
动静分离 我们之前学习的普通方式是这样的 动态资源和静态资源放在一起
文章图片
为了减少tomcat的负担 nginx把动态资源和静态资源给分开了
文章图片
Nginx的安装 https://segmentfault.com/a/1190000040125857
Nginx的常用命令 首先要进入 nginx 目录中 我是安装到了这里
文章图片
1、查看 nginx 版本号
./nginx -v
2、启动 nginx
./nginx
3、停止 nginx
./nginx -s stop
4、重新加载 nginx
./nginx -s reload
Nginx的配置文件
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
# 第一部分 全局块:配置服务器整体运行的配置指令
# 处理并发数,越大处理越多
worker_processes1;
# 第二部分 events块:设置nginx服务器和用户的网络连接
events {
# 支持最大连接数为1024
worker_connections1024;
}# 第三部分 http块:代理、缓存、日志等
# http块中还分为2个块:
# http全局块
# http 全局块配置的指令包括文件引入
# server块
# 配置一个主机信息
http {
# 设定mime类型,类型由mime.type文件定义
includemime.types;
default_typeapplication/octet-stream;
sendfileon;
keepalive_timeout65;
server {
# 端口
listen80;
# 域名
server_namelocalhost;
# /目录下
location / {
# html文件
roothtml;
}}
反向代理的实现实例一 要实现的效果是 打开浏览器,在浏览器地址栏输入地址 www.123.com(我自己使用的是我购买配置好的域名),跳转到 liunx 系统 tomcat 主页面中
准备工作 在 liunx 系统安装 tomcat,使用默认端口 8080
* tomcat 安装文件放到 liunx 系统中,解压
* 进入 tomcat 的 bin 目录中,./startup.sh 启动 tomcat 服务器
对外开放访问的端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd –reload
查看已经开放的端口号
firewall-cmd --list-all
访问的过程是
文章图片
浏览器通过域名访问到nginx 然后nginx再转发到tomcat中
nginx的请求转发配置(反向代理)
文章图片
监听本机的80端口 如果有访问就转发到107.0.0.1:8080 也就是tomcat的主页
结果
修改之后要重启nginx才能生效
文章图片
反向代理的实现实例二 要实现的效果 使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001
访问 http://192.168.17.129:9001/edu/ 直接跳转到 127.0.0.1:8080
访问 http:// 192.168.17.129:9001/vod/ 直接跳转到 127.0.0.1:8081
准备工作 (1)准备两个 tomcat 服务器,一个 8080 端口,一个 8081 端口
(2)创建文件夹和测试页面
文章图片
文章图片
文章图片
参考指令:
# 创建2个文件
mkdir tomcat8080 tomcat8081
# 复制tomcat到2个文件中
cp apache-tomcat-7.0.70.tar.gz tomcat8080
cp apache-tomcat-7.0.70.tar.gz tomcat8081
# 关闭以前的tomcat
apache-tomcat-7.0.70/bin/shutdown.sh
# 进入第一个tomcat
cd tomcat8080
# 解压tomcat
tar -zxvf apache-tomcat-7.0.70.tar.gz
# 添加网页
mkdir /root/tomcat8080/apache-tomcat-7.0.70/webapps/aaa
vi /root/tomcat8080/apache-tomcat-7.0.70/webapps/aaa/aaa.html
this is 8080!!!
# 启动tomcat
apache-tomcat-7.0.70/bin/startup.sh# 进入第二个tomcat
cd tomcat8081
# 解压文件
tar -zxvf apache-tomcat-7.0.70.tar.gz
# 修改端口
vi apache-tomcat-7.0.70/conf/server.xml
# 22行改为8015# 71行改为8081
# 退出配置文件
:wq
mkdir /root/tomcat8081/apache-tomcat-7.0.70/webapps/aaa
vi /root/tomcat8081/apache-tomcat-7.0.70/webapps/bbb/aaa.html
this is 8081!!!
# 启动tomcat
apache-tomcat-7.0.70/bin/startup.sh
# 查看端口号
netstat -nultp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local AddressForeign AddressStatePID/Program name
tcp00 0.0.0.0:800.0.0.0:*LISTEN31853/nginx: master
tcp00 0.0.0.0:220.0.0.0:*LISTEN988/sshd
tcp00 127.0.0.1:250.0.0.0:*LISTEN1250/master
tcp600 127.0.0.1:8015:::*LISTEN32369/java
tcp600 :::8080:::*LISTEN32274/java
tcp600 :::8081:::*LISTEN32369/java
tcp600 :::22:::*LISTEN988/sshd
tcp600 ::1:25:::*LISTEN1250/master
tcp600 127.0.0.1:8005:::*LISTEN32274/java
tcp600 :::8009:::*LISTEN32274/java
udp00 127.0.0.1:3230.0.0.0:*673/chronyd
udp600 ::1:323:::*673/chronyd
# nginx的配置文件设置
# 在http中添加一个server
server {
# 监听9001
listen9001;
server_namelocalhost;
# 链接中有aaa就跳转8080
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
# 链接中含有bbb跳转8081
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
#####################################################
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location块中的正则 uri 和请求字符串做匹配。注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
#####################################################
# 重新加载nginx
/usr/local/nginx/sbin/nginx -s reload
负载均衡 实现效果 (1)浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均 8080和 8081 端口中
准备工作 (1)准备两台 tomcat 服务器,一台 8080,一台 8081
(2)在两台 tomcat 里面 webapps 目录中,创建名称是 edu 文件夹,在 edu 文件夹中创建页面 a.html,用于测试
在 nginx 的配置文件中进行负载均衡的配置
文章图片
文章图片
这个的意思是如果我访问我的主机地址的话而且是用/开头 那么我就转发到myserver里面配置的那两个地址
参考指令
# 创建2个文件
mkdir tomcat8080 tomcat8081
# 复制tomcat到2个文件中
cp apache-tomcat-7.0.70.tar.gz tomcat8080
cp apache-tomcat-7.0.70.tar.gz tomcat8081
# 关闭以前的tomcat
apache-tomcat-7.0.70/bin/shutdown.sh
# 进入第一个tomcat
cd tomcat8080
# 解压tomcat
tar -zxvf apache-tomcat-7.0.70.tar.gz
# 添加网页
mkdir /root/tomcat8080/apache-tomcat-7.0.70/webapps/aaa
vi /root/tomcat8080/apache-tomcat-7.0.70/webapps/aaa/aaa.html
this is 8080!!!
# 启动tomcat
apache-tomcat-7.0.70/bin/startup.sh# 进入第二个tomcat
cd tomcat8081
# 解压文件
tar -zxvf apache-tomcat-7.0.70.tar.gz
# 修改端口
vi apache-tomcat-7.0.70/conf/server.xml
# 22行改为8015# 71行改为8081
# 退出配置文件
:wq
mkdir /root/tomcat8081/apache-tomcat-7.0.70/webapps/aaa
vi /root/tomcat8081/apache-tomcat-7.0.70/webapps/bbb/aaa.html
this is 8081!!!
# 启动tomcat
apache-tomcat-7.0.70/bin/startup.sh
# 查看端口号
netstat -nultp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local AddressForeign AddressStatePID/Program name
tcp00 0.0.0.0:800.0.0.0:*LISTEN31853/nginx: master
tcp00 0.0.0.0:220.0.0.0:*LISTEN988/sshd
tcp00 127.0.0.1:250.0.0.0:*LISTEN1250/master
tcp600 127.0.0.1:8015:::*LISTEN32369/java
tcp600 :::8080:::*LISTEN32274/java
tcp600 :::8081:::*LISTEN32369/java
tcp600 :::22:::*LISTEN988/sshd
tcp600 ::1:25:::*LISTEN1250/master
tcp600 127.0.0.1:8005:::*LISTEN32274/java
tcp600 :::8009:::*LISTEN32274/java
udp00 127.0.0.1:3230.0.0.0:*673/chronyd
udp600 ::1:323:::*673/chronyd
# nginx配置文件设置
vi /usr/local/nginx/conf/nginx.conf
http {
includemime.types;
default_typeapplication/octet-stream;
sendfileon;
keepalive_timeout65;
##################################
upstream myserver{
server 192.168.2.177:8080;
server 192.168.2.177:8081;
}
##################################
server {
listen80;
server_namelocalhost;
location / {
roothtml;
##################################
proxy_pass http://myserver;
##################################
indexindex.html index.htm;
}
error_page500 502 503 504/50x.html;
location = /50x.html {
roothtml;
}
}
}
:wq
# 重新加载服务器
./nginx -s reload
nginx分配服务器策略 第一种 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
第二种 weight weight 代表权重默认为 1,权重越高被分配的客户端越多
server 192.168.2.177:8080 weight=5
server192.168.2.177:8081 weight=10
第三种 ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
upstream server_pool{
ip_hash;
server 192.168.5.21:8080;
server 192.168.5.22:8081;
}
第四种 fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool{
server 192.168.5.21:80;
server 192.168.5.22:80;
fair;
}
动静分离配置 什么是动静分离?
文章图片
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。
简单来说是 动态的资源放到tomcat里面 静态的资源单独放一起 从而减少tomcat的工作量
准备工作 在 liunx 系统中准备静态资源,用于进行访问
文章图片
配置nginx.cof
文章图片
autoindex on实现的效果是这样的
文章图片
文章图片
文章图片
高可用 什么是高可用 高可用就是一台主服务器寄了之后从服务器能替主服务器干活
文章图片
实现就是俩服务器 对外展示同一个虚拟的ip地址 然后用户一般访问主服务器 主服务器寄了就访问备用的 这样的话即使是主服务器寄了用户也不会感受到
参考指令
# 主服务器
vi /etc/keepalived/keepalived.conf
gbal_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.2.177
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 {
# 主服务器 MASTER 备份服务器 BACKUP
state MASTER
# 网卡名
interface ens33
# 主、备机的virtual_router_id 必须相同
virtual_router_id 51
# 主、备机取不同的优先级,主机值较大,备份机值较小
priority 100
# 一秒检测一次心跳
advert_int 1
# 验证方式为密码密码1111
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# 虚拟ip为192.168.2.50
192.168.2.50
}
}
:wq
# 备份服务器
vi /etc/keepalived/keepalived.conf
gbal_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.2.177
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 {
# 主服务器 MASTER 备份服务器 BACKUP
state BACKUP
# 网卡名
interface ens33
# 主、备机的virtual_router_id 必须相同
virtual_router_id 51
# 主、备机取不同的优先级,主机值较大,备份机值较小
priority 90
# 一秒检测一次心跳
advert_int 1
# 验证方式为密码密码1111
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# 虚拟ip为192.168.2.50
192.168.2.50
}
}
:wq
# 编写脚本文件放入2台服务器的/usr/local/src下
vi /usr/local/src/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
:wq
# 2台服务器启动nginx和keepalived
systemctl restart keepalived
/usr/local/nginx/sbin/nginx
停掉主服务器
systemctl stop keepalived
[root@localhost ~]# netstat -nultp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local AddressForeign AddressStatePID/Program name
tcp00 0.0.0.0:220.0.0.0:*LISTEN1003/sshd
tcp00 127.0.0.1:250.0.0.0:*LISTEN1220/master
tcp600 :::22:::*LISTEN1003/sshd
tcp600 ::1:25:::*LISTEN1220/master
udp00 127.0.0.1:3230.0.0.0:*661/chronyd
udp600 ::1:323:::*661/chronyd
【微服务学习|Nginx学习笔记】然后再次访问
推荐阅读
- 微服务学习|Redis6学习笔记(上)
- Java基础的查漏补缺|Java基础查漏补缺之你可能不知道的final关键字的知识点
- 实践过程中遇到的问题|CentOS 8 下载东西Error: yum Failed to download metadata for repo ‘AppStream‘错误
- 微服务学习|Docker学习笔记
- 路由|一图搞懂网络NAT映射
- 学习|喜欢Dollar,不喜欢$符
- 学习|大学入坑Python,靠接单3天赚了1000块,方法让人钦佩
- springboot|SpringBoot集成Minio搭建自己的分布式文件服务器(Minio集成篇)
- 微服务学习|Redis6学习笔记(下)