• nginx的使用,以及反向代理,负载均衡,从安装到使用,全部步骤。


    先总结nginx实现负载均衡的原理,在这之前先的知道反向代理,因为nginx的负载均衡是在反向代理的基础上实现的:
    1.反向代理:通过在nginx的配置文件
    (vim /opt/nginx196/conf/nginx.conf 文件位置因人而异,但conf和nginx.conf是一样的)
    中的location代码块下添加一行数据:proxy_pass http://192.168.12.200;
    http://192.168.12.200是真正的服务器,或者说是代理服务器所代理的服务器,不理解的话下面有详细的图介绍,依据自己的服务器地址进行修改)
    使得用户在访问代理服务器时,反代理服务器再跳转到真正的目标地址(上面的http://192.168.12.200),为服务端代理的这一过程就是反向代理(为客户端代理则是正向代理)。
    2.负载均衡:当访问的用户量非常大,而代理服务器所代理的目标服务器只有一台时,会导致服务器崩溃,所以的在服务端多添加几台服务器,然后由代理服务器将大量的请求分给服务端的几个服务器,而不是只分给一个服务器。这样就实现了负载均衡,下面会介绍到权重,大家可以根据自己公司后台服务器的强弱来配置权重,达到能者多劳的局面。
    负载均衡的设置相当于设置了一个服务器池(qishi_upstream),然后根据权重来将请求分给不同的服务器。
    配置如下:
    # 在http代码块里面,添加配置
    #配置负载均衡
    upstream qishi_upstream {
    server 192.168.12.200;
    server 192.168.12.253;}

    在location代码块内,添加
    location / {
    proxy_pass http://qishi_upstream;
    }

    1 nginx入门

    1.1 WEB框架

    django 大而全, 功能特别多 form表单 , ORM, 中间件 笨重,臃肿 600/s

    flask 轻量级的,小而精, 它使用的都是第三方模块进行拼接起来的 4988/s

    tornado 支持异步, 处理用户请求过来数据不用等待,类似于协程 2138/s

    sanic python3.5+uvloop 33342/s

    WEB服务器和web框架的关系

    WEB框架: 主要是用来处理用户的请求

    WEB服务器: 接收HTTP请求(例如www.pythonav.cn/xiaocang.jpg)并返回数据, web服务器不和数据库打交道

    1.2 WEB服务器

    nginx 开源的,支持高性能,高并发的

    apache nginx他父亲

    IIS(windows下面的WEB Server)

    1.3 查看WEB服务器信息

    使用curl -I 命令查看taobao和JD的WEB服务器

    1.4 nginx的优点:

    1.4.1 占有内存少,并发能力强
    1.4.2 处理静态文件

    静态文件与动态文件的区别

    静态文件: css js jpg png mp4
    动态数据: 网站会请求后端的数据库接口,获取最新的数据,这些数据就是动态数据
    
    1.4.3 百度、京东、新浪、网易、腾讯、淘宝都在用nginx
    1.4.4 一台机器只有一个80端口,假如我们想要跑多个WEB服务器呢?

    2 安装nginx步骤

    2.1 安装nginx需要的依赖库
    yum install -y gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
    
    2.2 下载安装nginx源码包
    cd /opt
    wget -c https://nginx.org/download/nginx-1.9.6.tar.gz
    
    2.3.解压缩源码(还是在/opt目录下)
    tar -zxvf nginx-1.9.6.tar.gz 
    
    2.4.释放编译文件 开启nginx状态监测功能
    cd /opt/nginx-1.9.6
    ./configure --prefix=/opt/nginx196 --with-http_ssl_module --with-http_stub_status_module
    
    2.5 编译安装
    make && make install
    
    2.6.启动nginx,进入sbin目录,找到nginx启动命令
    cd /opt/nginx196/sbin
    ./nginx #启动
    ./nginx -s stop #关闭
    ./nginx -s reload  # 平滑重启 ,修改了nginx.conf之后,可以不重启服务,加载新的配置
    
    2.7 查看nginx运行状态
    查看端口是否运行: netstat -tunlp
    查看进程是否运行: ps -ef | grep nginx
    
    2.8 nginx目录下的文件
    conf 存放nginx所有配置文件的目录,主要nginx.conf
    html 存放nginx默认站点的目录,如index.html、error.html等
    logs 存放nginx默认日志的目录,如error.log access.log
    sbin 存放nginx主命令的目录,sbin/nginx
    
    2.9 nginx.conf配置文件解析

    注意: 在修改配置文件之前,最好是把配置文件备份一份!!!!!

    注意: 在修改配置文件之前,最好是把配置文件备份一份!!!!!

    注意: 在修改配置文件之前,最好是把配置文件备份一份!!!!!

    #定义nginx工作进程数
    worker_processes  5;
    #错误日志
    #error_log  logs/error.log;
    #http定义代码主区域
    http {
        include       mime.types;
        default_type  application/octet-stream;
        #定义nginx的访问日志功能
        #nginx会有一个accses.log功能,查看用户访问的记录
        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;
        keepalive_timeout  65;
        #开启gzip压缩传输
        gzip  on;
        #虚拟主机1  定义一个 斗鱼网站 
        server {
            #定义nginx的访问入口端口,访问地址是  192.168.11.37:80
            listen       80;
            #定义网站的域名www.woshidouyu.tv
            #如果没有域名,就填写服务器的ip地址  192.168.11.37
            server_name  www.woshidouyu.tv;
            #nginx的url域名匹配
            #只要请求来自于www.woshidouyu.tv/111111111
            #只要请求来自于www.woshidouyu.tv/qweqwewqe
            #最低级的匹配,只要来自于www.woshidouyu.tv这个域名,都会走到这个location
            location / {
                #这个root参数,也是关键字,定义网页的根目录
                #以nginx安装的目录为相对路径  /opt/nginx112/html 
                #可以自由修改这个root定义的网页根目录
                root   html;
                #index参数定义网站的首页文件名,默认的文件名
                index  index.html index.htm;
            }
            #错误页面的优化(只要是遇到前面4系列的错误,就会直接跳转到相对目录下的40x.html页面)
            error_page  400 401  402  403  404   /40x.html;
        }
    }
    
    2.10 nginx启动出现错误的情况

    如果你在平滑重启nginx时出现以下情况的话,说明你的nginx没有启动

    解决方案:

    # 只需要将nginx启动起来即可
    /opt/nginx196/sbin/nginx
    

    3 nginx错误页面

    3.1 配置nginx错误页面

    vim /opt/nginx112/conf/nginx.conf
    修改server代码块
        server {
            listen       80;
            server_name  www.qishihuya.com;
    
            location / {
                root   /opt/www/qishihuya;
                index  index.html index.htm;
            }
            #error_page   500 502 503 504  /50x.html;
            error_page   400 402 403 404  /40x.html;
            location = /40x.html {
                root   html;
            }
        }
    
    平滑重启nginx
    /opt/nginx196/sbin/nginx -s reload
    

    4 nginx错误页面优化

    打开百度或其他网站,随便输入一个不存在的链接,就可以访问到错误页面
    右键点击页面空白处,查看网页源代码
    拷贝源代码,粘贴到/opt/nginx112/html/40x.html下面去
    再访问我们的网站,随便输入一个不存在的链接, 就可以访问到这个错误页面
    http://192.168.1.40/asldfjasd
    

    5 nginx访问日志功能

    6 nginx限制网站来源IP访问


    如果想要在本地访问一个域名, 可以更改本机hosts文件

    用域名代替刚才的本地IP访问

    windows下

    c:\windowssystem32driversetchosts

    linux下

    /etc/hosts

    nginx状态检测功能

    1 在虎牙或者其他server代码块添加以下配置
    location /status {
        # 开启nginx状态检测功能
        stub_status on;
    }
    

    2 平滑重启nginx
    /opt/nginx196/sbin/nginx -s reload
    

    7 配置nginx多虚拟主机

    7.1 效果:

    (1) 访问三个不同的域名,显示三个不同的网站

    (2) 三个网站互不影响

    7.2 修改配置文件

       worker_processes  5;
    
    #error_log  logs/error.log;
    
    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;
        keepalive_timeout  65;
        #gzip  on;
        server {
            listen       80;
            server_name  www.qishi5douyu.com;
            
            location / {
                root   /opt/web_server/douyu;
                index  index.html index.htm;
            }
            #error_page  404              /404.html;
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }   
        }   
        server {
            listen 80;
            server_name www.qishi5huya.com;
            location /{ 
                root /opt/web_server/huya;
                index index.html;
            }   
        }   
        server {
            listen 80;
            server_name www.qishi5zhanqi.com;
            location /{ 
                root /opt/web_server/zhanqi;
                index index.html;
            }   
        }   
    
    }
    
    

    7.3 在服务器上创建三个目录

    cd /opt
    rm -rf web_server
    mkdir -p www/huya
    mkdir -p www/douyu
    mkdir -p www/qie
    touch www/douyu/index.html
    touch www/huya/index.html
    touch www/qie/index.html
    分别打开这三个index.html文件
    vim index.html
    分别添加三个直播网站的源代码内容
    然后保存退出
    

    7.4 修改本机hosts文件

    c:\windowssystem32driversetchosts
    

    添加以下三行解析记录

    192.168.1.197	www.qishi5douyu.com
    192.168.1.197	www.qishi5huya.com
    192.168.1.197	www.qishi5zhanqi.com
    

    7.5 平滑重启nginx

    /opt/nginx196/sbin/nginx -s reload
    

    8 Nginx代理功能

    8.1 生活中的代理有哪些

    租客租房 ————> 中介(Q房网,链家, 家家顺,中原地产, 泊寓, 自如, 蛋壳, 贝壳) ————> 房东

    买家 ————> 代购(微商, 服务器代理商, 等等) ————> 店铺(香港的店铺, 供应商, 老宝)

    8.2 实现一个反向代理

    8.2.1 实验效果:

    在windows中访问代理服务器,然后让代理服务器去拿web服务器的数据

    请求数据: windows ——> 192.168.12.139 ——> 192.168.12.200
    返回数据: windows <—— 192.168.12.139 <—— 192.168.12.200

    机器准备,两台服务器

    斗鱼服务器 192.168.12.200
    反向代理服务器 192.168.12.139

    8.2.2 修改代理服务器192.168.12.139的配置文件
    vim /opt/nginx196/conf/nginx.conf
    在location代码块下添加一行数据
    proxy_pass http://192.168.12.200;
    

    8.2.3 重启代理服务器的nginx
    /opt/nginx196/sbin/nginx -s reload
    
    8.2.4 访问代理服务器的IP: 192.168.12.139
    访问的结果是192.168.12.200返回的数据即可
    
    8.2.5 分别在代理服务器和斗鱼服务器上查看日志

    在代理服务器上查看

    在斗鱼服务器上查看

    9 Nginx负载均衡

    9.1 负载均衡原理



    9.2 配置负载均衡服务器

    9.2.1 实验背景
    有三台机器 一台为nginx代理服务器(负载均衡调度器), 另外两台为WEB服务器
    192.168.12.139    # 负载均衡调度器
    192.168.12.200    # WEB服务器1
    192.168.12.253    # WEB服务器2
    # WEB服务器3
    
    9.2.2 完成效果

    用户访问192.168.12.139,由nginx代理服务器通过负载均衡调度器分别分配到两个WEB服务器,实现负载均衡

    9.2.3 准备三台机器
    192.168.12.139    # 负载均衡调度器(本机)
    192.168.12.200    # WEB服务器1
    192.168.12.253    # WEB服务器2
    
    9.2.4 两个WEB服务器可以正常访问
    访问web服务器1返回“代噶好,我系帅帅刘 我真的是1.40这台机器”
    访问web服务器2返回“MMP 我TM是文龙”
    
    9.2.5 在nginx代理服务器(负载均衡调度器)上面做如下配置:
    # 在http代码块里面,添加配置
    #配置负载均衡
    upstream qishi_upstream {
        server 192.168.12.200;
        server 192.168.12.253;
    }
    
    在location代码块内,添加
    location / {
        proxy_pass http://qishi_upstream;
        root   html;
        index  index.html index.htm;
    }
    
    

    1573445160294

    9.2.6 分别平滑重启三台机器的nginx服务
    /opt/nginx196/sbin/nginx -s reload
    
    9.2.7 访问192.168.1.231就可以看到,WEB1和WEB2交替返回数据
    9.2.8 配置权重

    在upstream里面配置weight的数值,可以调整服务器的请求权重

    可以通过以下几种方式进行权重的配置

    调度算法      概述
    轮询        按时间顺序逐一分配到不同的后端服务器(默认)
    weight       加权轮询,weight值越大,分配到的访问几率越高
    ip_hash      每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
    url_hash      按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
    least_conn    最少链接数,那个机器链接数少就分发
    
  • 相关阅读:
    操作系统的磁盘结构、磁盘管理、磁盘调度算法
    ArrayList源码解析--值得深读
    深入理解static、volatile关键字
    7:高阶张量操作
    6:统计属性
    5:张量的基本运算
    4.1张量的操作(broadcasting维度自动扩张,拼接与拆分)
    4:张量操作
    3:索引与切片
    2:pytorch的基本数据类型以及张量的创建
  • 原文地址:https://www.cnblogs.com/caiwenjun/p/11838543.html
Copyright © 2020-2023  润新知