欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

萌新的nginx学习

程序员文章站 2022-03-09 16:12:31
...

什么是NGINX:

Nginx是一个高性能的HTTP反向代理服务器,特点是占用的内存小,并发能力强 ,事实上 nginx的并发能力是同类服务器中表现较好的。

Ngixn专为性能优化而开发,性能是最大的考量,实现上非常注重效率,能经受住高并发的考验,最大可以50000的并发连接数

反向代理

正向代理:意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

反向代理:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

开始测试:修改hosts文件设置域名,C:\Windows\System32\drivers\etc\hosts

修改usr/local/nginx/conf/nginx.conf文件中修改

单服务器反向代理

server {
listen 80;
server. name 47.95.199.236; (改成反向代理的服务器ip)
#charset koi8-r;
#access_ Log logs/host . access.log main;
Location / {
root
html ;
praxy_ pass http://127 .0.0.1:8080; (服务器的ip和端口)
index index. html index . htm;D
}

多服务器反向代理

配置:server {

    listen    9001;
    server_name     47.95.199.236;  (代理端口和ip地址)

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location ~ /ent/ {
        proxy_pass  http://127.0.0.1:8081; (跳转的ip地址和文件路径(ent))
    }

    location ~ /vst/ {
        proxy_pass  http://127.0.0.1:8080; (跳转的ip地址和文件路径(vst))
    }

配置两个tomcat

1.正常安装两个tomcat在不同的文件夹下 参考网站:https://blog.csdn.net/sutongxuevip/article/details/105118734 (记住开放两个tomcat端口)

负载均衡

将一个服务器请求(负载分发)到多个服务器上就叫做负载均衡

配置:先在http中配置

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;

upstream myserver{       (先在http中配置加上这个)
    server 47.95.199.236:8080;  (负载均衡的负载服务器)
    server 47.95.199.236:8081;  (负载均衡的负载服务器)
}

server {

    listen    80;
    server_name     47.95.199.236;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {           (配置指定http中的配置)
            proxy_pass http://myserver;
    }

Nginx负载均衡的测略:

轮询 默认方式
weight 权重方式
ip_hash 依据ip分配方式
least_conn 最少连接方式
fair(第三方) 响应时间方式
url_hash(第三方) 依据URL分配方式

轮询

最基本的配置方法,上面的例子就是轮询的方式,它是upstream模块默认的负载均衡默认策略。每个请求会按时间顺序逐一分配到不同的后端服务器。

有如下参数:

fail_timeout 与max_fails结合使用。
max_fails 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了,
fail_time 服务器会被认为停机的时间长度,默认为10s。
backup 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
down 标记服务器永久停机了。

注意:

  • 在轮询中,如果服务器down掉了,会自动剔除该服务器。
  • 缺省配置就是轮询策略。
  • 此策略适合服务器配置相当,无状态且短平快的服务使用。

weight:

权重方式,在轮询策略的基础上指定轮询的几率。例子如下:

[萌新的nginx学习](javascript:void(0)????

    #动态服务器组
    upstream dynamic_zuoyu {
        server localhost:8080   weight=2;  #tomcat 7.0
        server localhost:8081;  #tomcat 8.0
        server localhost:8082   backup;  #tomcat 8.5
        server localhost:8083   max_fails=3 fail_timeout=20s;  #tomcat 9.0
    }

[萌新的nginx学习](javascript:void(0)????

在该例子中,weight参数用于指定轮询几率,weight的默认值为1,;weight的数值与访问比率成正比,比如Tomcat 7.0被访问的几率为其他服务器的两倍。

注意:

  • 权重越高分配到需要处理的请求越多。

  • 此策略可以与least_conn和ip_hash结合使用。

  • 此策略比较适合服务器的硬件配置差别比较大的情况

ip_hash:

指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。

[萌新的nginx学习](javascript:void(0)????

#动态服务器组
    upstream dynamic_zuoyu {
        ip_hash;    #保证每个访客固定访问一个后端服务器
        server localhost:8080   weight=2;  #tomcat 7.0
        server localhost:8081;  #tomcat 8.0
        server localhost:8082;  #tomcat 8.5
        server localhost:8083   max_fails=3 fail_timeout=20s;  #tomcat 9.0
    }

[萌新的nginx学习](javascript:void(0)????

注意:

  • 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
  • ip_hash不能与backup同时使用。
  • 此策略适合有状态服务,比如session。
  • 当有服务器需要剔除,必须手动down掉。

least_conn

把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

[萌新的nginx学习](javascript:void(0)????

    #动态服务器组
    upstream dynamic_zuoyu {
        least_conn;    #把请求转发给连接数较少的后端服务器
        server localhost:8080   weight=2;  #tomcat 7.0
        server localhost:8081;  #tomcat 8.0
        server localhost:8082 backup;  #tomcat 8.5
        server localhost:8083   max_fails=3 fail_timeout=20s;  #tomcat 9.0
    }

[萌新的nginx学习](javascript:void(0)????

注意:

  • 此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。

fair:

按照服务器端的响应时间来分配请求,响应时间短的优先分配。

[萌新的nginx学习](javascript:void(0)????

    #动态服务器组
    upstream dynamic_zuoyu {
        server localhost:8080;  #tomcat 7.0
        server localhost:8081;  #tomcat 8.0
        server localhost:8082;  #tomcat 8.5
        server localhost:8083;  #tomcat 9.0
        fair;    #实现响应时间短的优先分配
    }

[萌新的nginx学习](javascript:void(0)????

动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原本单个服务器的压力

动态请求:访问编程语言制作的请求就是动态请求

静态请求:访问html,图片,css的就是静态请求

步骤:

​ 1.进入usr/local/nginx/conf/nginx.conf文件中修改

server {

    listen    80;   
    server_name     47.95.199.236; (服务器的ip)

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location /html/ {
            root /date/; (本地服务器的静态资源访问路径)
    }

    location /image/ {
            root /date/; (本地服务器的静态资源访问路径二)
            autoindex on; (访问时列出你文件夹的路径)
    }

nginx高可用配置:

高可用:就是ngnix服务器宕机了,会自动切换nginx服务器,访问依然可以访问

高可用需要:

​ 1.多台nginx

​ 2.keepalived 来确认nginx是否宕机,如果宕机就进行切换nginx

​ 3.keepalived需要一个对外开放的ip

安装keepalived:

yum install keepalived -y

​ 查看是否安装成功:rpm -q -a keepalived

​ keepalived的配置文件在:/etc/keepaliced/keepaliced.conf

keepalived配置文件解析:

keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,分别是global_defs、static_ipaddress、

vrrp_script、vrrp_instance和virtual_server.

1、global_defs区域

主要是配置故障发生时的通知对象以v及机器标志

global_defs {
   notification_email {
     aaa@qq.com
     aaa@qq.com
     aaa@qq.com
   }
   notification_email_from aaa@qq.com
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id 192.168.224.206
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
  • notification_email 故障发生时给谁发邮件通知
  • notification_email_from 通知邮件从哪个地址发出
  • smtp_server 通知邮件的smtp地址
  • smtp_connect_timeout 连接smtp服务器的超时时间
  • enable_traps开启SNMP(Simple Network Management Protocol)陷阱
  • router_id 标志本节点的字符串,通常为ip地址,故障发生时邮件会通知到

2、vrrp_script区域

用来做健康检查的,当检查失败时会将vrrp_instance的priority减少相应的值,

vrrp_script chk_nginx {
       script "/usr/local/keepalived-1.3.4/nginx_check.sh"
       interval 2 
       weight -20
}

script:自己写的监测脚本。

interval 2:每2s监测一次

weight -20:监测失败,则相应的vrrp_instance的优先级会减少20个点

3、vrrp_instance

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    mcast_src_ip 192.168.224.206
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.224.208
    }
    track_script{
    chk_nginx
  }
}

state:只有BACKUP和MASTER。MASTER为工作状态,BACKUP是备用状态

interface:为网卡接口:可通过ip addr查看自己的网卡接口

萌新的nginx学习

virtual_router_id:虚拟路由标志。同组的virtual_router_id应该保持一致。它将决定多播的MAC地址。

priority:设置本节点的优先级,优先级高的为master

advert_int:MASTER与BACKUP同步检查的时间间隔

virtual_ipaddress:这就是传说中的虚拟ip

Nginx安装:

​ 1.下载安装包:Linux下载Nginx地址:https://blog.csdn.net/akaks0/article/details/81876109

​ 2.安装对应的依赖:

​ 下载pcre:https://sourceforge.net/projects/pcre/files/pcre/

​ 下载完成后:tar -xvf pcre-8.44.tar.gz 解压

​ ./configure 查看解压文件是否有问题

​ make && make install 进行安装

​ pcre-config --version 查看安装版本

​ 安装:openssl,zlib.

​ yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devle

3.安装Nginx

​ 下载完成后:tar -xvf nginx-1.16.1.tar.gz 解压

​ ./configure 查看解压文件是否有问题

​ make && make install 进行安装

全部安装完成后在主目录usr文件中会出现一个local/nginx,在nginx有sbin文件中执行 ./nginx命令就会运行Nginx

ps -ef | grep nginx 查看启动

去nginx文件下的conf文件下执行 vi nginx.conf 查看端口

Nginx的配置信息

配置文件在:/usr/local/nginx/conf/ nginx.conf文件

2、nginx 配置文件组成
(1) nginx配置文件有三部分组成
第一部分全局块
从配置文件开始到events 块之间的内容,主要会设置些影响nginx服务器整体运行的配置指令。
比如worker processes 1; worker processes值越大,可以支持的并发处理量也越多。
第二部分events块
events块涉及的指令主要影响Nginx 服务器与用户的网络连接
比如worker connections 1024; 支持的最大连接数
第三部分http 块
Nginx服务器配置中最频繁的部分
http块也可以包括http全局块server 块

语法规则: location [=||*|^~] /uri/ { … }`

  • = 开头表示精确匹配
  • ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。以xx开头
  • ~ 开头表示区分大小写的正则匹配 以xx结尾
  • ~* 开头表示不区分大小写的正则匹配 以xx结尾
  • !~!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
  • / 通用匹配,任何请求都会匹配到。

Nginx底层原理解析:

nginx服务开启会有:master和worker两个进程。master管理员一个,worker工人可以有多个

发送请求过来然后给master管理员,然后worker通过争抢机制去获取master的请求,后worker通过反向代理完成反向代理操作

首先要明白,Nginx 采用的是多进程(单线程) & 多路IO复用模型。使用了 I/O 多路复用技术的 Nginx,就成了”并发事件驱动“的服务器。

I/O多路复用:I/O就是指的我们网络I/O,多路指多个TCP连接(或多个Channel),复用指复用一个或少量线程。串起来理解就是很多个网络I/O复用一个或少量的线程来处理这些连接。

萌新的nginx学习

2. 多进程的工作模式

  • 1、Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。
  • 2、接收来自外界的信号,向各worker进程发送信号,每个进程都有可能来处理这个连接。
  • 3、 master 进程能监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动启动新的 worker 进程。

3.注意:

worker 进程数,一般会设置成机器 cpu 核数。因为更多的worker 数,只会导致进程相互竞争 cpu,从而带来不必要的上下文切换。

使用多进程模式,不仅能提高并发率,而且进程之间相互独立,一个 worker 进程挂了不会影响到其他 worker 进程。

这样做带来的好处:

  • 1、节省锁带来的开销。每个 worker 进程都是独立的进程,不共享资源,不需要加锁。同时在编程以及问题查上时,也会方便很多。
  • 2、独立进程,减少风险。采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快重新启动新的 worker 进程。当然,worker 进程的也能发生意外退出。