Nginx反向代理、负载均衡、动静分离、高可用

目录

Nginx简介

Nginx的Docker安装

Nginx的配置

Nginx反向代理 

Nginx的负载均衡

Nginx的动静分离 

Nginx的高可用配置 

Nginx的原理 

Nginx简介

  • Nginx是一个高性能的HTTP和反向代理web服务器
  • 特点是占有内存少,并发能力强
  • Nginx专为性能优化而开发,能经受高负载的考验,有报告表明能支持高达50000个并发连接数

Nginx的Docker安装

  •  拉取镜像:$ docker pull nginx:latest
  • 查看本地镜像,看nginx是否安装成功弄 $ docker images
  • 运行nginx 容器 :$ docker run --name nginx-test -p 8080:80 -d nginx
    • --name nginx-test:容器名称。
    • -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
    • -d nginx: 设置容器在在后台一直运行。
  • 通过 ifconfig查看linux的ip

  • 然后进行访问

Nginx的配置

  • Nginx配置文件由三部分组成
    • 全局块:从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令。主要包括配置运行Nginx服务器的用户(组)、允许生成的worker process数、进程PID存放路径、日志存放路径和类型以及配置文件的引入等。
    • worker_processes = 1
      // 这是Nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量也就越多,但是会受到硬件、软件设备的制约
      
    • events块:涉及的指令主要影响Nginx服务器与用户的网络连接。
    • events {
          worker_connections 1024          // nginx服务器支持的最大连接数
      }
      
    •  http块:Nginx服务器中配置最频繁的部分。Http全局块指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。server块和虚拟主机有关系,又包括全局server块和location块
[root@bogon conf]#  cat /usr/local/webserver/nginx/conf/nginx.conf

user www www;
worker_processes 2; #设置值和CPU核心数一致
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志级别
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
  use epoll;
  worker_connections 65535;
}
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';
  
#charset gb2312;
     
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 8m;
     
  sendfile on;
  tcp_nopush on;
  keepalive_timeout 60;
  tcp_nodelay on;
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
  gzip on; 
  gzip_min_length 1k;
  gzip_buffers 4 16k;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types text/plain application/x-javascript text/css application/xml;
  gzip_vary on;
 
  #limit_zone crawler $binary_remote_addr 10m;
 #下面是server虚拟主机的配置
 server
  {
    listen 80;#监听端口
    server_name localhost;#域名
    index index.html index.htm index.php;
    root /usr/local/webserver/nginx/html;#站点目录
      location ~ .*\.(php|php5)?$
    {
      #fastcgi_pass unix:/tmp/php-cgi.sock;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fastcgi.conf;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
    {
      expires 30d;
  # access_log off;
    }
    location ~ .*\.(js|css)?$
    {
      expires 15d;
   # access_log off;
    }
    access_log off;
  }

}

 

Nginx反向代理 

 通过Nginx访问tomcat

 需要在Nginx的conf下面的nginx.conf文件中配置

 通过Nginx跳转到微服务的不同服务,这里用两个tomcat代替微服务一个8080,一个8081

nginx的配置为

必要时需要在linux中配置对外开放端口号

查看想开的端口是否已开:firewall-cmd --query-port=6379/tcp
添加指定需要开放的端口:firewall-cmd --add-port=123/tcp --permanent

Nginx的负载均衡

​ 单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。

两个toncat的目录下放入同一个页面,通过Nginx访问该页面,会交替的访问到tomcat8080和tomcat8081

Nginx配置

 Nginx提供的几种分配方式:

  • 轮询(默认):每个请求按时间顺序分配到后端服务器,如果down掉,自动剔除,就是轮流访问服务器
  • weight:weight代表权重,默认为1,权重越高分配的越多
  • ip_hash:每个请求按照ip的hash分配,这样每个访客固定访问后端一个服务器,解决了session的问题,加在第一红块server上一行,也就是客户端第一次访问的服务器是那个,以后该客户端一直访问该服务器。
  • fair(第三方):按后端服务器响应的时间来分配,响应时间短的优先分配。加在第一红块server最后一行。就是看那个服务器响应快

Nginx的动静分离 

  •   Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种,一种是纯粹把静态文件独立成单独的域名﹐放在独立的服务器上,也是目前主流推崇的方案处理静态页面。另外一种方法就是动态跟静态文件混合在一起发布,通过nginx来分开。其中静态请求存在2个连接,动态请求存在4个连接。
  • 通过location指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体Expires定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires来缓存),我这里设置3d,表示在这3天之内访问这个URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。
  1. 1在Linux系统中准备一些静态资源:www中放一个html页面,image中放个图片

        

  1. 2nginx的配置

        ​​​​

 输入http://192.168.200.128/image/01.jpg,因为配置了autoindex on,所以会列出来目录

输入http://192.168.200.128/www/a.html:

Nginx的高可用配置 

 

 我们需要有这么两台Nginx服务器,keepAlive,虚拟ip地址

  • 两台服务器192.168.200.128、192.168.200.129
  • 两台服务器上都安装nginx
  • 两台服务器上的usr文件夹下都安装keepalived:yum install keepalived -y ,安装完成后,在etc里面生成目录keepalived,有文件keepalived.conf
  • 高可用配置(主从配置)
  • 修改etc/keepalived/keepalived.conf

配置nginx主机的keepalived.conf:

! Configuration File for keepalived
#此处为全局定义
global_defs {
	#默认不修改
    notification_email {
        acassen@firewall.loc
        failover@firewall.loc
        sysadmin@firewall.loc
     }
        notification_email_from Alexandre.Cassen@firewall.loc
#修改此处的ip地址
        smtp_server 192.168.17.129

        smtp_connect_timeout 30

        router_id LVS_DEVEL # 主机名字
}

#检测脚本以及权重的参数(是否还活着)
vrrp_script chk_http_port {
		#脚本配置文件的路径,需要配置脚本
        script "/usr/local/src/nginx_check.sh"  //此处为配置脚本的位置
        interval 2 #(检测脚本执行的间隔)每隔两秒检测一次
        weight 2 # 权重
   }
   	#虚拟ip配置 包括状态 网卡 优先权 以及虚拟ip地址
        vrrp_instance VI_1 {
        state MASTER # 备份服务器上将 MASTER 改为 BACKUP
        interface eth33 # 网卡名字,可通过ifconfig查询网卡名字
        virtual_router_id 51  # 主、备机的 virtual_router_id 必须相同
        priority 100  # 主、备机取不同的优先级,主机值较大,备份机值较小
        advert_int 1 #检测是否还活着
        authentication {
                auth_type PASS
                auth_pass 1111
        }
        virtual_ipaddress {
             192.168.77.50 # VRRP H 虚拟地址
        }

}

配置nginx备用机的keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_http_port {
	script "/usr/local/src/nginx_check.sh" //此处为配置脚本的位置

	interval 2

	weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       192.168.77.50 # VRRP H 虚拟地址 主从机需要配置的一样
    }
}

 nginx主从机中keepalived中keepalived.conf文件中的脚本配置

#!/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的原理 

  •  两个进程(一个master多个worker)
  • 利于nginx -s reload热部署,即有个重启后,其他还可以进行
  • 每个worker独立占有进程,方便操作不用加锁
  • nginx与redis都是采用io多路复用机制,所以worker数和cpu数相等最合适
  • worker连接数,发送一个请求,连接数可能是2/4(静态是client和worker,动态还需要一个tomcat)
  • 支持最大并发数:动态worker_connections * worker_processes/4 ,静态worker_connections * worker_processes /2。即work个数*每台work连接发送数

                 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值