Nginx

為{幸葍}努か 提交于 2019-12-15 01:50:40

Nginx

1.

nginx的简介俺也就不总结了,只知道它可以作为反向代理服务器,

2.

反向代理
了解反向代理前,要知道什么是正向代理,以及他们之间的区别。
代理:A访问B,中间多了个C,如:商场老板想找明星剪彩,得通过经纪人。,经纪人就是那个代理
正向代理:通过浏览器访问谷歌资源,是不可以的,就可以配置代理服务器,通过代理服务器去访问谷歌的资源,谷歌将资源返回给代理服务器,代理服务器再将资源返回给浏览器,正向代理是客户端的代理,服务端不知道真正发出请求的客户端
反向代理:正向代理既然是代理客户端,那反向代理就很好理解了,代理服务端,通常是为了网络环境安全,同时可以实现负载均衡。此时代理服务器对外就是一个服务器,客户端会向配置好的代理服务器进行访问,在由代理服务器转发给内网上的服务器实现访问,客户端不知道实际作出响应的服务端
如还不懂,请看这篇(转载)

负载均衡
如客户端并发访问量大,就会对服务器造成很大的压力,这个时候需要另一台服务器来实现负载均衡(ps:并发量这么大的话,再买一台服务器就应该不成问题了吧),可让nginx按照你所配置的去访问服务器(配置方式会在下面详细介绍)

动静分离
在了解动静分离之前,我们应该先知道什么是静态资源,什么是动态资源。一般我们把后端文件放在tomcat中,前端文件(如:html,js,png等)放到自己建立的静态资源文件夹。

高可用
这个时候我们就来思考一个问题,如果是nginx宕机了呢,谁也无法保证软件能一直运行下去,那怎么办呢,keepalived可以帮助我们检查软件是否在运行,若宕机了,立马切换nginx

实例

1.下载nginx,官网下载
在这里插入图片描述
这里我们选的是稳定版,介绍linux版的安方式及配置,将下载的nginx-1.16.1.tar.gz通过连接工具传到服务器

 **安装依赖**
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
**解压缩**
将nginx-1.16.1.tar.gz传输到/usr/local/中
解压:tar -zxvf linux-nginx-1.16.1.tar.gz
cd nginx-1.16.1/
**执行配置**
./configure
**编译安装(默认安装在/usr/local/nginx)**
make && make install

注意nginx的默认监听端口为80,启动nginx后无法访问,可检查防火墙配置,是否开启80端口的访问!!!
nginx文件目录如下
conf:放配置文件的文件夹
html:访问nginx后,会弹出一个页面,就是此文件下html页面
logs:存放日志记录的文件夹
sbin:nginx在此目录下运行

nginx常用命令
cd nginx的安装路径
cd sbin
启动命令:./nginx
停止命令:./nginx -s stop
加载配置:./nginx -s reload 使修改后的配置文件生效
查看版本:./nginx -v

成功界面
配置反向代理:

#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;

    #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 {
    #默认监听80端口
        listen       80;
    #访问当前服务器的ip地址
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
    #proxy_pass 后面为代理的服务器名
    #location指令说明,用于匹配url
    #~:正则表达式匹配uri,区分大小写
    #~*:正则表达式匹配uri,不区分大小写
    #=:用于不含正则表达式uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止搜索,并立即处理该请求
    #^~:用于不含正则表达式uri前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即用此location处理请求,不再使用location块中的正则uri和请求字符串做匹配
    #例
        location / {
            proxy_pass www.baidu.com
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html

配置负载均衡(共四种方式):
在这里插入图片描述
第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down了,会自动剔除

upstream myserver(ps:名字可自定义){
server 192.168.3.110:80
server 192.168.3.111:80
}

第二种 weight
weight代表权重,默认为1,数值越大,分配的客户端越多

upstream myserver(ps:名字可自定义){
server 192.168.3.110:80  weight =10
server 192.168.3.111:80 weight = 5
}

第三种 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客都可固定访问一个后端服务器,可以解决session的问题

upstream myserver(ps:名字可自定义){
ip_hash
server 192.168.3.110:80  
server 192.168.3.111:80 

第四种 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配

upstream myserver(ps:名字可自定义){
ip_hash
server 192.168.3.110:80  
server 192.168.3.111:80 
fair

配置动静分离(有两种实现角度):
第一种 把静态文件放在独立的服务器上
第二种 把静态文件和动态文件混合一起发布,通过nginx将它们区分
通过location可实现不同的请求转发,通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之间的请求
Expires参数定义是给一个资源设定一个过期时间,无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量,但此种方法不适合经常经常变动的资源,若我设置为3d,表示3天之内访问这个url,发送一个请求,对比服务器该文件最后更新时间有没有变化,如果没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200
autoindex on会把访问目录下的资源列举出来

实例
nginx配置
资源文件目录
配置高可用:
两台服务器,部署两次nginx和keepalived(若本机的nginx宕机了,自动切换到备份服务器),配置一个共同的虚拟ip。keepalived安装成功后,配置文件在/etc/keepalived
Keepalived的所有配置都在一个配置文件里面,主要分为三类:
1.全局配置

global_defs {
   notification_email {         #设置 keepalived 在发生事件(比如切换)的时候,需要发送到的email地址,可以设置多个,每行一个。
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc    #设置通知邮件发送来自于哪里,如果本地开启了sendmail的话,可以使用上面的默认值。
   smtp_server 192.168.200.1    #指定发送邮件的smtp服务器。
   smtp_connect_timeout 30      #设置smtp连接超时时间,单位为秒。
   router_id LVS_DEVEL          #是运行keepalived的一个表示,多个集群设置不同。
}

2.VRRPD配置
VRRPD 的配置是 Keepalived 比较重要的配置,主要分为两个部分 VRRP 同步组和 VRRP实例,也就是想要使用 VRRP 进行高可用选举,那么就一定需要配置一个VRRP实例,在实例中来定义 VIP、服务器角色等。

VRRP Sync Groups

不使用Sync Group的话,如果机器(或者说router)有两个网段,一个内网一个外网,每个网段开启一个VRRP实例,假设VRRP配置为检查内网,那么当外网出现问题时,VRRPD认为自己仍然健康,那么不会发生Master和Backup的切换,从而导致了问题。Sync group就是为了解决这个问题,可以把两个实例都放进一个Sync Group,这样的话,group里面任何一个实例出现问题都会发生切换。

vrrp_sync_group VG_1{ #监控多个网段的实例
group {
    VI_1 #实例名
    VI_2
    ......
}
notify_master /path/xx.sh     #指定当切换到master时,执行的脚本
netify_backup /path/xx.sh     #指定当切换到backup时,执行的脚本
notify_fault "path/xx.sh VG_1"   #故障时执行的脚本
notify /path/xx.sh 
smtp_alert   #使用global_defs中提供的邮件地址和smtp服务器发送邮件通知
}

VRRP实例就表示在上面开启了VRRP协议,这个实例说明了VRRP的一些特征,比如主从,VRID等,可以在每个interface上开启一个实例

vrrp_instance VI_1 {    
    state MASTER         #指定实例初始状态,实际的MASTER和BACKUP是选举决定的。
    interface eth0       #指定实例绑定的网卡
    virtual_router_id 51 #设置VRID标记,多个集群不能重复(0..255)
    priority 100         #设置优先级,优先级高的会被竞选为Master,Master要高于BACKUP至少50
    advert_int 1         #检查的时间间隔,默认1s
    nopreempt            #设置为不抢占,说明:这个配置只能在BACKUP主机上面设置
    preempt_delay        #抢占延迟,默认5分钟
    debug                #debug级别
    authentication {     #设置认证
        auth_type PASS    #认证方式,支持PASS和AH,官方建议使用PASS
        auth_pass 1111    #认证的密码
    }
    virtual_ipaddress {     #设置VIP,可以设置多个,用于切换时的地址绑定。格式:#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABE
        192.168.200.16/24 dev eth0 label eth0:1
        192.168.200.17/24 dev eth1 label eth1:1
        192.168.200.18
    }
}

3.LVS 配置
虚拟服务器virtual_server定义块 ,虚拟服务器定义是keepalived框架最重要的项目了,是keepalived.conf必不可少的部分。 该部分是用来管理LVS的,是实现keepalive和LVS相结合的模块。ipvsadm命令可以实现的管理在这里都可以通过参数配置实现,注意:real_server是被包含在viyual_server模块中的,是子模块。

virtual_server 192.168.202.200 23 {        //VIP地址,要和vrrp_instance模块中的virtual_ipaddress地址一致
    delay_loop 6   #健康检查时间间隔 
    lb_algo rr   #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh 
    lb_kind DR    #负载均衡转发规则NAT|DR|RUN 
    persistence_timeout 5 #会话保持时间 
    protocol TCP    #使用的协议 
    persistence_granularity <NETMASK> #lvs会话保持粒度 
    virtualhost <string>    #检查的web服务器的虚拟主机(host:头) 
    sorry_server<IPADDR> <port> #备用机,所有realserver失效后启用


real_server 192.168.200.5 23 {             //RS的真实IP地址
            weight 1 #默认为1,0为失效
            inhibit_on_failure #在服务器健康检查失效时,将其设为0,而不是直接从ipvs中删除 
            notify_up <string> | <quoted-string> #在检测到server up后执行脚本
            notify_down <string> | <quoted-string> #在检测到server down后执行脚本
            
TCP_CHECK {                    //常用
            connect_timeout 3 #连接超时时间
            nb_get_retry 3 #重连次数
            delay_before_retry 3 #重连间隔时间
            connect_port 23  #健康检查的端口的端口
            bindto <ip>   
          }

HTTP_GET | SSL_GET{          //不常用
    url{ #检查url,可以指定多个
         path /
         digest <string> #检查后的摘要信息
         status_code 200 #检查的返回状态码
        }
    connect_port <port> 
    bindto <IPADD>
    connect_timeout 5
    nb_get_retry 3
    delay_before_retry 2
    }

SMTP_CHECK{                 //不常用
    host{
    connect_ip <IP ADDRESS>
    connect_port <port> #默认检查25端口
    bindto <IP ADDRESS>
         }
    connect_timeout 5
    retry 3
    delay_before_retry 2
    helo_name <string> | <quoted-string> #smtp helo请求命令参数,可选
    }
 
MISC_CHECK{                 //不常用
    misc_path <string> | <quoted-string> #外部脚本路径
    misc_timeout #脚本执行超时时间
    misc_dynamic #如设置该项,则退出状态码会用来动态调整服务器的权重,返回0 正常,不修改;返回1,

  检查失败,权重改为0;返回2-255,正常,权重设置为:返回状态码-2
    }
}

配置文件是以配置块的形式存在,每个配置块都在一个闭合的{}范围内,所以编辑的时候需要注意大括号的闭合问题。#和!开头都是注释。配置文件中可配置脚本,来执行检查nginx程序是否down掉

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!