Nginx反向代理,负载均衡,动静分离

Nginx

基本概念:
(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

Nginx反向代理,负载均衡,动静分离_第1张图片

在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反向代理,负载均衡,动静分离_第2张图片
反向代理实例二
使用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
Nginx反向代理,负载均衡,动静分离_第3张图片
Nginx反向代理,负载均衡,动静分离_第4张图片
location配置说明:
1.= 用于b不含正则表达式的uri前,严格匹配
2. ~ 用于表示uri的正则表达式,并且区分大小写
3. ~* 用于表示uri的正则表达式,不区分大小写
4. ^~ 用于不包含正则的uri

负载均衡配置
通过浏览器输入http://192.168.1.107/edu/a.html平均分配到不同的tomcat中

Nginx反向代理,负载均衡,动静分离_第5张图片
Nginx反向代理,负载均衡,动静分离_第6张图片
负载均衡策略
1轮询 默认
2 weight 权重,按权重比例轮询
3 ip_hash 每个请求访问ip的hash结果分配,这样访客固定访问一个后端服务器。可以解决session问题。
Nginx反向代理,负载均衡,动静分离_第7张图片
4 fail 按后端的响应时间来分配请求,响应时间最短先分配
Nginx反向代理,负载均衡,动静分离_第8张图片
Nginx实例,动静分离

使用nginx处理静态页面,使用tomcat处理动态页面
静态资源部署到单独的服务器

nginx进行配置
Nginx反向代理,负载均衡,动静分离_第9张图片

Nginx高可用集群

Nginx反向代理,负载均衡,动静分离_第10张图片
准备两台服务器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还可以正常访问,证明切换到从服务器

你可能感兴趣的:(nginx)