最近在腾讯云租了个小霸王服务器,本来想把自己写的博客传上去,奈何我太菜搞不了,所以为了不让服务器发霉 ,正好学一下Nginx
一、简介
1、反向代理
(1)正向代理
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。
(2)反向代理
2、负载均衡
(1)单一服务器
缺点:随着信息增长、访问量和数据量的提升以及系统业务的复杂度增加,会造成服务器响应客户端的请求缓慢,并发量大时可能会造成服务器直接崩溃
(2)负载均衡
增加服务器的数量,将请求分发到各个服务器上,将原来请求集中到单个服务器上的情况改为分发到多个服务器上,将负载分发到不同的服务器
3、动静分离
二、Nginx的常用命令
使用nginx操作命令前提条件:必须进入nginx的目录中==(/usr/local/nginx/sbin)==
命令:
-
查看nginx版本号
./nginx -v -
启动nginx
./nginx -
关闭nginx
./nginx -s stop -
重新加载nginx
./nginx -s reload
修改nginx.conf文件后,需要重新加载nginx,配置文件才会生效
三、Nginx的配置文件
1、配置文件位置:/usr/local/nginx/conf/nginx.conf
2、nginx配置文件组成
#去掉注释的精简版本,原版中有许多注释
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
nginx配置文件由三部分组成
-
第一部分:全局块
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器真题运行的配置指令,主要包括配置运行Nginx服务器的用户(组)、允许生成的worker process数、进程PID存放路径、日志存放路径和类型以及配置文件的引入等,大部分默认被注释掉
#这是Nginx服务器并发处理服务的关键,worker process的值越大,可以支持的并发数量也越多,但是会受到硬件、软件等设备的制约
worker_processes 1;
-
第二部分:events块
涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多worker press下的网络连接进行序列化,是否允许同时接受多个网络连接,选取哪种事件驱动模型来处理连接请求,每个worker press可以同时支持的最大连接数等
这部分配置对Nginx的性能影响较大,应根据不同情况采取不同配置
#这个例子表示每个worker press支持的最大连接数为1024
events {
worker_connections 1024;
}
-
第三部分:HTTP块
这算是Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里
需要注意:http块也可以包括http全局块、server块
①http全局块
http全局块配置的指令包括文件引入、MIME-TYPE的定义、日志自定义、连接超时时间、单链接请求数上限等
②server块
这块和虚拟主机有密切关系每个http块可以包括多个server块,每个server块相当于一个虚拟主机
每个server块也可以分为全局server块,以及可以同时包含多个的location块
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80; #监听端口号
server_name localhost; #主机名称
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
四、配置反向代理
实例一
实现效果:代开浏览器,在地址栏中输入www.123.com,跳转到Linux系统tomcat主页面
1、准备工作
(1)安装tomcat,使用默认端口8080
(2)对外开放访问端口
firewall-cmd --add-port=8080/tcp --permanent
重新加载防火墙设置
firewall-cmd -reload
查看已经开放的端口号
firewall-cmd --list-all
(3)地址栏输入 ip地址:8080 测试是否能进入tomcat主页
访问过程分析:
2、具体配置
-
在Windows系统的host文件进行域名和ip对应关系的配置(不要问我为什么是Windows,因为我买不起别的系统的电脑)
在host文件中添加一行:ip地址 域名
例如:129.204.18.121 www.123.com -
在nginx进行请求转发的配置(反向代理配置)
注:进入之后按先按a,之后才能进行编辑,退出时先按esc,之后使用 :wq 命令保存并退出 -
最终测试
启动nginx,输出www.123.com,正常情况下跳转到tomcat主页面
实例二
实现效果:使用nginx反向代理,根据访问的路径跳转到不同端口的服务中
nginx监听端口为9001
访问http://129.204.18.121:9001/edu/直接跳转到127.0.0.1:8080
访问http://129.204.18.121:9001/vod/直接跳转到127.0.0.1:8081
1、准备工作
-
准备两个tomcat服务器,端口为8080、8081
在端口为8081的tomcat中修改默认端口为8081 -
创建文件夹和测试页面
8080同理
2、具体配置
-
找到nginx的配置文件,在里面进行反向代理的配置
注:修改完配置文件不要忘记重启或者重新加载nginx服务器 -
开放对外端口号9001,8080,8081
-
最终测试
location指令说明
注:如果uri包含正则表达式,则必须要有
五、配置负载均衡
实现效果:
(1)浏览器地址栏输入地址http://129.204.18.121/due/a.html,将请求平均分配到8080和8081端口,负载均衡效果
1、准备工作
(1)准备两台tomcat服务器,一台8080,一台8081
(2)在两台tomcat里面的webapps目录中,创建名称是edu文件夹,在edu文件夹中创建页面a.html,用于测试
2、具体配置
-
在nginx.conf配置文件中进行修改
-
重启nginx
-
最终测试
将我们的请求平均分配到了每个页面
注:第一次进入时,随机进入这两个页面中的一个,之后每次刷新都会进入另一个页面
3、Nginx中的负载均衡分配方式(策略)
- 轮询(默认配置)
每次请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除 - weight
weight代表权重,默认为1,权重越高分配的客户越多
- ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题(比如保存到session的用户名密码)
如果你第一次访问到8080,那么以后都会访问8080,8081同
- fair(第三方)
按照后端服务器的响应时间来分配请求,响应时间短的优先分配
六、配置动静分离
1、准备工作
在Linux系统中准备静态资源,用于进行访问
在www放一个html页面,在image中放一张图片
2、具体配置
-
在nginx.conf文件中进行配置
-
重启nginx
-
最终测试
七、配置高可用的集群
1、什么是Nginx的高可用
问题:nginx服务器宕机导致请求无法转发
高可用:准备两个nginx服务器,当主服务器宕机时,切换到备份nginx服务器作为主服务器继续工作。还需要对外设置一个虚拟ip,同时将虚拟ip绑定到两台nginx服务器中,通过keepalived进行检测,访问时都是通过虚拟ip进行访问
keepalived:相当于一个路由,里面会有脚本检测当前nginx服务器是否还活着,如果活着就进行访问,如果宕机了就切换到备份服务器
2、配置高可用的准备工作
(1)需要两个nginx服务器
(2)在两台服务器上安装keepalived,可使用yum命令进行安装
yum install keepalived -y
3、配置高可用
- 修改主服务器和备份服务器的keepalived.conf配置文件
#全局配置
global_defs {
notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
XXX@XXX.com
}
notification_email_from miaoruntu@itcast.cn #指定发件人
#smtp_server XXX.smtp.com #指定smtp服务器地址
#smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_script check_nginx {
script "/usr/local/src/nginx_check.sh" ##监控脚本,需要自己配置
interval 2 ##检测脚本执行的时间间隔,2秒
weight 2 ##权重+2,脚本执行成功后,使备份服务器权重大于主服务器权重
}
vrrp_instance VI_1 {
state MASTER #标示状态 主机为为MASTER 备份机为BACKUP
interface docker0 #设置实例绑定的网卡
virtual_router_id 51 #同一实例下virtual_router_id必须相同
priority 100 #优先级,MASTER权重要高于BACKUP 比如BACKUP为99
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置认证
auth_type PASS #主从服务器验证方式
auth_pass 8888
}
track_script {
check_nginx #监控脚本
}
virtual_ipaddress { #设置vip
192.168.17.50 #可以多个虚拟IP,换行即可
}
}
- 在/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 # nginx的路径
sleep 2
if[`ps -c nginx --no-header |wc -l` -eq 0];then
killall keepalived
fi
fi
-
把两台服务器上的nginx和keepalived启动
启动nginx:./nginx
启动keepalived:systemctl start keepalived.service -
最终测试
(1)浏览器地址栏输入虚拟ip地址 192.168.17.50 进行访问
(2)把主服务器的nginx和keepalived停止,再输入虚拟ip地址 192.168.17.50 进行访问
停止keepalived:stop keepalived.service