美文网首页
Nginx+负载均衡

Nginx+负载均衡

作者: 空留灯半盏 | 来源:发表于2018-07-14 08:58 被阅读0次

    Nginx+负载均衡

    服务器介绍

    概念

    服务器: 就是没有显示器的主机

    WEB服务器: 就是一个软件(监听80端口,用于接受客户端请求)

    Nginx一般用来做什么

    反向/正向 代理
    负载均衡
    HTTP服务器(动静分离)
    
    常用的Wev服务器

    Apache

    1)是世界上用的最多的Web服务器,它的优势在开源代码开放,功能完善,历史悠久,模块支持非常丰富,跨平台;缺点在于比其他web服务器内存占用高;
    2)适用于动态网站。
    

    Nginx

    1)是一款轻量级的Web 服务器/反向代理服务器及电子邮件代理服务器,其特点是占有内存少,并发能力强,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等;
    2)适用于反向代理服务器和静态资源服务器(注:线上公司都使用Linux安装)
    

    IIS

    是windows系统上的服务器产品(微软公司提供)。主要是给.net和asp语言使用的,经过扩展也是可以支持PHP语言
    

    静态资源服务器

    传统的web项目,一般都将静态资源放在项目public目录下,这样做很方便获取静态资源,但是如果说web项目很大,用户很多.静态资源很多时,服务器性能明显下降,这种情况下一般都会需要一个静态资源的服务器

    解决

    通过Nginx搭建一个服务器专门用来存放静态资源

    大型项目分离的好处
    1、便于维护使用(举例:一个项目图片可以方便所有项目使用,如:jq等)
    2、动静分离有利于CDN加速 (注:动静分离指后端处理数据文件和静态文件分离)
    3、便于缓存    (举例:请求的是同一文件,就不用再下载了)
    4、静态资源的http请求中不会携带无用的cookie。
    5、优化浏览器对同一域名进行请求的最大并发连接数限制(注:不同浏览器限制不同)
    

    CDN服务器(大型项目加速使用)

    CDN服务: 加快访问速度

    用户请求网站 -> 检测用户所在城市是否有缓存 有直接响应 没有请求原服务器 并缓存到用户所在城市

    大型项目架构
    集群技术/冗余技术:多个服务实现相同的业务
    负载均衡技术:将用户的请求按照指定的策略分配给不同的服务器处理
    主从复制:当MySQL主服务器有insert/update/delete动作,MySQL从服务器自动同步
    动静分离:将静态资源单独放一个服务器上,PHP代码在另一个服务器上
    读写分离:项目insert/update/delete去操作主服务器,项目select去从服务器获取
    

    nginx服务器

    Nginx是一款轻量级、高性能的Web 服务器或反向代理服务器,因它的稳定性、丰富的功能集和低系统资源的消耗而闻名。

    nginx的特点

    占有内存少,并发能力强 支持同时并发50000

    Tengine

    Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求添加了很多高级功能和特性。成功案例:淘宝网,天猫商城等。

    官网:http://tengine.taobao.org/faq_cn.html

    Apache与ngin服务器区别

    Nginx相对 Apache的优点

    轻量级,同样起web 服务,比apache 占用更少的内存及资源;
    抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
    高度模块化的设计,编写模块相对简单;
    社区活跃,各种高性能模块出品迅速;
    

    Apache相对Nginx的优点

    rewrite ,比nginx 的rewrite 强大;
    模块超多,基本想到的都可以找到;
    少bug ,nginx 的bug 相对较多;
    超稳定;
    

    LNMP的安装与配置

    NGINX的安装

    依赖注意:

    模块依赖性:Nginx的一些模块需要其他第三方库的支持,例如gzip模块需要zlib 库,rewrite模块需要pcre库,ssl功能需要openssl库等。

    下载相关文件上传到服务器

    依赖安装->pcre
    shell>  cd /php/tools
    shell>  tar -zxvf pcre-8.34.tar.gz              #解压
    shell>  cd pcre-8.34                            #进入解压目录
    shell>  ./configure && make && make install  #配置、编译和安装 
    
    alib压缩库
    shell>  cd /php/tools
    shell>  tar -zxvf zlib-1.2.5.tar.gz
    shell>  cd zlib-1.2.5  
    shell>  ./configure                 # 这个配置编译命令不要加目录参数
    shell>  make && make install
    
    nginx的安装
    shell> cd /php/tools
    shell> tar -zxvf nginx-1.8.1.tar.gz
    shell> cd nginx-1.8.1
    shell> mkdir -p /php/server/nginx
    shell> ./configure  --prefix=/php/server/nginx
    shell> make && make install
    shell> /php/server/nginx/sbin/nginx  #启动
    

    注: 首次启动可能报错

    shell> ln -s /lib64/libpcre.so.0.0.1 /lib64/libpcre.so.1  #创建软链接 如果是32位系统请将前面64去掉即可
    shell> /php/server/nginx/sbin/nginx               #重新启动
    shell> ps -A | grep nginx                             #验证是否启用成功
    
    管理nginx

    启动nginx

    shell> ln -s /lib/libpcre.so.0.0.1 /lib/libpcre.so.1  #创建软连接
    shell> /php/server/nginx/sbin/nginx  #启动
    shell> /php/server/nginx/sbin/nginx -s stop #正常关闭
    shell> /php/server/nginx/sbin/nginx -s quiet  #快速关闭
    shell> /php/server/nginx/sbin/nginx -s reload  重启服务
    

    配置文件(nginx.conf)

    配置文件位置
    /php/service/nginx/conf
    
    user  用户  用户组;
    
    #有1个工作子进程,可以自行修改,但太大无益,因为争夺CPU,一般设置为CPU数*核数
    worker_processes 1; 
    
    events {
    #单个后台worker process进程的最大并发链接数
    #最大连接数 = worker_processes * worker_connections
        worker_connections  1024; #这里指一个子进程最大允许连接1024
    }
    
    http { #这是配置http服务器的主要段
    
    server { #虚拟主机段
    location {  #定位,把特殊的文件再次定位,如image目录单独处理或php单独处理
    }
    }
    
    server { #虚拟主机段
    location {  #定位,把特殊的文件再次定位,如image目录单独处理或php单独处理
    }
    }
    .......
    }
    #注:每新增一个server则添加一个虚拟主机(推荐:使用include方式引入外部虚拟主机配置文件)
    
    配置虚拟主机

    在nginx配置虚拟主机非常简单,只需在http{}中加个server即可新增一个虚拟主机

    server {
        # 监听端口
        listen 80;
        # 绑定域名(多个之间用空格隔开)
        server_name 待绑定的域名;
    
        location / {
            # 项目根目录
            root /php/wwwroot/web1;
            # 默认首页
            index index.html index.htm;
       }
    }
    

    例如:

       server {
            # 监听端口
            listen 80;
            # 绑定域名(多个之间用空格隔开)
            server_name n1.com;
    
            location / {
                # 项目根目录
                root /php/wwwroot/web1;
                # 默认首页
                index index.html index.htm;
            }
        }
    
        server {
            # 监听端口
            listen 80;
            # 绑定域名(多个之间用空格隔开)
            server_name n2.com;
    
            location / {
                # 项目根目录
                root /php/wwwroot/web2;
                # 默认首页
                index index.html index.htm;
            }
        }
    
    创建虚拟主机目录
    shell> mkdir -p /php/wwwroot/web1 /php/wwwroot/web2
    shell> echo 'this is n1.com' > /php/wwwroot/web1/index.html
    shell> echo 'this is n2.com' > /php/wwwroot/web2/index.html
    #重启服务即可
    shell> /php/server/nginx/sbin/nginx -s reload
    

    注: 要修改hosts文件

    PHP与nginx整合(php-fpm)

    php安装可以作为Apache模块存在,同时也可以单独的作为一个服务运行(端口是9000端口),这种单独运行的模式叫做php-fpm模式,在5.3.3+以后的版本都默认支持,以前的版本需要打补丁。

    安装libxml2(否则php报错)
    shell> cd /php/tools
    shell> tar zxvf libxml2-2.7.2.tar.gz
    shell> cd libxml2-2.7.2
    shell> ./configure  或 ./configure --without-zlib --prefix=/usr/local/libxml2
    shell> make && make install
    
    安装PHP
    shell> cd /php/tools
    shell> tar -zxvf php-5.6.31.tar.gz
    shell> cd php-5.6.31 
    shell> ./configure --prefix=/php/server/php2  --enable-fpm
    #注:--enable-fpm该选项是指,以独立进程的方式来安装PHP
    shell> make && make install
    
    \cp -rf  /php/tools/php-5.6.31/php.ini-development  /php/server/php2/lib/php.ini# 将php配置文件复制到指定目录 
    
    cp \
    /php/server/php2/etc/php-fpm.conf.default \
    /php/server/php2/etc/php-fpm.conf  #复制配置文件
    
    shell> /php/server/php2/sbin/php-fpm  # 启动服务
    
    管理PHP服务
    shell> /php/server/php2/sbin/php-fpm  # 启动服务
    shell> killall php-fpm                      # 关闭服务
    
    让nginx支持PHP

    打开nginx.conf在server大括号里添加

    location ~ \.php$ {  #检测到.php结尾的文件交给php处理
        root             虚拟主机路径;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  虚拟主机路径/$fastcgi_script_name;
        include        fastcgi_params;
    }
    shell> /php/server/nginx/sbin/nginx -s reload  #重启服务
    shell> echo '<?php echo phpinfo();' > /php/wwwroot/web1/test1.php #测试
    

    gzip压缩

    开启gzip压缩的好处
    开启后会将输出到用户浏览器的数据进行压缩处理,这样就会减小通过网络传输的数据量,提高网页浏览速度
    
    #步骤1:将tools的bg.jpg和test.html复制到站点目录并访问
    shell> cp -rf /php/tools/test.html /php/tools/bg.jpg  /php/wwwroot/web1
    #步骤2:在虚拟主机server中增加下属代码即可
    gzip on;                 #开启Gzip压缩
    gzip_min_length 1k;  #不压缩临界值,大于1K的才压缩
    gzip_comp_level 6;   #压缩级别(1-9)越大越慢,同时也最消耗CPU
    #声明压缩文件(MIME类型)
    gzip_types text/plain application/x-javascript text/css application/xml text/javascript image/jpeg;
    gzip_disable "MSIE [1-6]\."; #禁用IE1-6
    #步骤三: 重启nginx
    /php/server/nginx/sbin/nginx -s reload
    

    配置expires缓存功能

    expires缓存功能概述

    作用: 设置expires减少不必要的http请求

    将静态资源(css.js.img..)等缓存到客户端,减轻服务器压力

    配置
    #步骤1:在虚拟主机server中增加下属代码即可
    location ~ \.(gif|jpg|jpeg|png|bmp|ico|js|css)$ {
        root /php/wwwroot/web1;
        expires 1d;  #1d (天)  1h(时)  1m(分)  1s(秒)
    }
    #步骤2:重启nginx
    /php/server/nginx/sbin/nginx -s reload
    #步骤3:创建测试文件查看是否设置成功
    echo 'alert(1)' > /php/wwwroot/web1/test2.js
    echo  \
    '<script src=./test2.js></script>' > \
    /php/wwwroot/web1/test2.html
    
    linux设置电脑时间
    date -s '2018/7/13 15:11:25'
    clock -w #将时间写到磁盘中
    
    为什么开启expires速度快
    为什么304比200快?
    明确304和200都有发送http请求,但是304会进行检测,如果未修改则不响应数据,而是从浏览器返回
    为什么expire比304快?
    因为静态资源设置了expire直接从浏览器获取不发送http请求
    
    expires.png

    日志管理

    日志分析命令

    tail命令: 常用于分析日志

    tail -数字  路径及文件名    #查看后n行
    tail -f     路径及文件名    #实时监控文件更新内容
    
    日志类型

    nginx里默认会有两种日志 access.log 访问日志 error.log错误日志

    默认路径在nginx/logs/

    访问日志
    $remote_addr 客户端的ip地址(代理服务器,显示代理服务ip)
    $remote_user 用于记录远程客户端的用户名称(一般为“-”)
    $time_local 用于记录访问时间和时区
    $request 用于记录请求的url以及请求方法
    $status 响应状态码,例如:200成功、404页面找不到等。
    $body_bytes_sent 给客户端发送的文件主体内容字节数
    $http_user_agent 用户所使用的代理(一般为浏览器)
    $http_x_forwarded_for 可以记录客户端IP,通过代理服务器来记录客户端的ip地址
    $http_referer 可以记录用户是从哪个链接访问过来的
    错误日志

    记录配置启动错误信息(如:端口被占用,配置文件错误等)

    基于域名日志分割

    基于域名日志分割指: 多站点日志分开存放,便于后期分析

    在nginx.conf配置文件中

    复制log_format main 这行 并粘贴
    后面记录数据.分别客户端ip,客户请求,浏览器信息
    再在对应的server中添加
    access_log logs/日志文件名   main;
    重启后发现logs目录下多了对应日志文件名的文件即可;
    

    配置虚拟主机(方法2)

    在主配置文件中新增多个虚拟主机,导致配置文件越来越大,不便于管理.所以建议使用下述方案

    一个虚拟主机对应一个配置文件

    步骤1:打开Nginx主配置文件(nginx.conf)将刚新增的两个虚拟主机删除或注释

    步骤2:打开Nginx主配置文件(nginx.conf)引入外部虚拟主机配置文件

    vi /php/server/nginx/conf/nginx.conf #打开配置文件
     在http{}中加入:【include vhosts/*.conf;】
     #新建外部虚拟主机目录(vhosts)
     shell> mkdir -p /php/server/nginx/conf/vhosts 
     #新建虚拟主机
    shell> cd /php/server/nginx/conf/vhosts
    shell> vi nginx1.conf
    
    server {
        # 监听端口
        listen 80;
        # 绑定域名(多个之间用空格隔开)
        server_name n1.com;
    
        location / {
            # 项目根目录
            root /php/wwwroot/web1;
            # 默认首页
            index index.html index.htm;
       }
    }
    shell> /php/server/nginx/sbin/nginx -s reload #重启服务器即可
    

    注:后期需要增加虚拟主机,则在【/php/server/nginx/conf/vhosts】目录下新【xxx.conf】以conf结尾的文件然后填写server即可

    相关文章

      网友评论

          本文标题:Nginx+负载均衡

          本文链接:https://www.haomeiwen.com/subject/pipepftx.html