基本概念:
(1)nginx是什么做什么事情
(2)反向代理
(3)负载均衡
(4)动静分离
2 nginx安装和命令,配置文件
linux系统安装
nginx常用命令
nginx配置文件
3 nginx配置实例
反向代理
4 nginx 配置实例
负载均衡
5 nginx 配置实例
动静分离
6 nginx高可用集群
7nginx原理
Nginx简介
什么是nginx?
是一个高性能的http服务器和反向代理web服务器
占有内存小,并发能力强
5w并发
做什么?
静态文件
反向代理
负载均衡
(1)正向代理:代理客户端发送请求,需要在客户端设置代理服务器,通过代理服务器访问
(2)反向代理:客户端对代理无感知,将请求发送到反向代理服务器,隐藏了真实服务器。
负载均衡:把负载分发到不同的服务器
动静分离:加快解析速度,把动态和静态资源放在不同的服务器。
Nginx安装
远程连接工具连接到192.168.1.106
相关素材安装,
安装pcre: wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
进入解压之后的目录,执行命令 ./configure
使用make && make install 编译并安装
pcre-config --version 查看版本号
安装其他依赖
yum -y install make zlib zlib-devvel gcc-c++ libtool openssl openssl-devel
安装nginx
解压tar.gz文件tar -zxvf
进入nginx文件,./configure检查
make && make install编译安装
启动服务
cd /usr/local/nginx/sbin
启动脚本./nginx
查看开放的端口号: firewall-cmd --list-all
设置开放的端口号:firewall-cmd --add-service=http -permanent
firewall-cmd --add-port=80/tcp --permanent
重启防火墙:firewall-cmd --reload
Nginx 常用命令
进入nginx目录才能使用命令
cd /usr/local/nginx/sbin
1 查看nginx版本号 ./nginx -v
2 启动nginx ./nginx
3 停止nginx ./nginx -s stop
4 重新加载nginx ./nginx -s reload
Nginx的配置文件nginx.conf
cd /usr/local/nginx/conf/
配置文件中的内容
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
1 全局块
配置服务器运行的配置指令
worker_processes并发数的配置
2 events块
影响Nginx服务器于用户的网络连接
worker_connections 1024;最大连接数1024
3 http 块
http全局块
http全局块配置的指令包括文件引入,MIME-TYPE定义,日志自定义,连接超时时间,但链接请求数上限
serverl块
这块于虚拟主机密切相关,每个http块可以分为多个server块
server块分为全局server块和location块
一个server块可以包含多个location块
这块主要基于http请求的url来进行匹配,对特定的请求进行处理
Nginx配置实例,反向代理
访问www.123.com 直接跳转到127.0.0.1:8080
实现代码:
安装启动tomat
解压tomcat,进入bin目录允许命令 ./startup.sh
打开对外开放端口8080
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
在windows中配置hosts文件www.123.com转发到nginx,nginx转发到tomcat
第一步:host文件配置域名和ip对应
C:\Windows\System32\drivers\etc\hosts
加入 192.168.1.107 www.123.com
第二步:反向代理配置,找到nginx配置文件
/usr/local/nginx/conf
vim nginx.conf
server {
listen 80;
server_name 192.168.1.107;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://192.168.1.107:8080;
index index.html index.htm;
}
需要重新启动nginx,./nginx -s reload
反向代理实例二
使用nginx反向代理,根据访问路径跳转到不同的服务中,nginx监听端口为9001
访问192.168.1.107:9001/edu/ 直接跳转127.0.0.1:8080
访问192.168.1.107:9001/vod/ 直接跳转127.0.0.1:8081
准备两个tomcat,一个8080端口,一个8081端口
启动两个tomcat
修改一个tomcat端口号
创建文件夹和测试页面
8080文件下在webapps下面创建edu文件夹,创建a.html页面
8081文件下webapps下面创建vod文件夹,创建a.html
配置nginx
server{
listen 9091;
server_name 192.168.1.107;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/{
proxy_pass http://127.0.0.1:8081;
}
}
重新启动nginx
location配置说明:
1.= 用于b不含正则表达式的uri前,严格匹配
2. ~ 用于表示uri的正则表达式,并且区分大小写
3. ~* 用于表示uri的正则表达式,不区分大小写
4. ^~ 用于不包含正则的uri
负载均衡配置
通过浏览器输入http://192.168.1.107/edu/a.html平均分配到不同的tomcat中
负载均衡策略
1轮询 默认
2 weight 权重,按权重比例轮询
3 ip_hash 每个请求访问ip的hash结果分配,这样访客固定访问一个后端服务器。可以解决session问题。
4 fail 按后端的响应时间来分配请求,响应时间最短先分配
Nginx实例,动静分离
使用nginx处理静态页面,使用tomcat处理动态页面
静态资源部署到单独的服务器
准备两台服务器192.168.1.107和192.168.1.108都安装nginx,安装keepalived
使用yum安装keepalived
yum install keepalived -y
查看keppalived是否安装成功rpm -qa |grep keepalived
cd /etc/keepalived里面有一个配置文件keepalived.conf
完成高可用配置(主从配置)
更改keepalived.conf文件
! Configuration File for keepalived #全局定义
global_defs {
notification_email { #指定keepalived在发生事件时(比如切换)发送通知邮件的邮箱
ops@wangshibo.cn #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务
tech@wangshibo.cn
}
notification_email_from ops@wangshibo.cn #keepalived在发生诸如切换操作时需要发送email通知地址
smtp_server 127.0.0.1 #指定发送email的smtp服务器
smtp_connect_timeout 30 #设置连接smtp server的超时时间
router_id master-node #运行keepalived的机器的一个标识,通常可设为hostname。故障发生时,发邮件时显示在邮件主题中的信息。
}
vrrp_script chk_http_port { #检测nginx服务是否在运行。有很多方式,比如进程,用脚本检测等等
script "/opt/chk_nginx.sh" #这里通过脚本监测
interval 2 #脚本执行间隔,每2s检测一次
weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 #检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 { #keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管
state MASTER #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER
interface em1 #指定HA监测网络的接口。实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的
mcast_src_ip 103.110.98.14 # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
priority 101 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
advert_int 1 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码。主从必须一样
auth_type PASS #设置vrrp验证类型,主要有PASS和AH两种
auth_pass 1111 #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
}
virtual_ipaddress { #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写
192.168.17.20
}
track_script { #执行监控的服务。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!
chk_http_port #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
}
}
在/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
启动两台服务器的nginx和keepalived
启动keepalived systemctl start keepalived.service
查看是否启动 ps -ef | grep keepalived
使用虚拟主机ip访问192.168.17.20
停掉主服务的nginx和keepalived
停止keepalived服务systemctl stop keepalived.service
停止nginx:./nginx -s stop
在访问192.168.17.20还可以正常访问,证明切换到从服务器