精华内容
下载资源
问答
  • Nginx - 主要作用(功能)

    万次阅读 多人点赞 2018-05-22 09:30:22
    主要功能反向代理 正向代理:某些情况下,代理我们用户去访问服务器,需要用户手动的设置代理服务器的ip和端口号。 反向代理:是用来代理服务器的,代理我们要访问的目标服务器。  代理服务器接受请求,然后将...

    关于Nginx

        Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。也是由于其的特性,其应用非常广。

    主要功能

    • 反向代理          

             正向代理:某些情况下,代理我们用户去访问服务器,需要用户手动的设置代理服务器的ip和端口号。
             反向代理:是用来代理服务器的,代理我们要访问的目标服务器。
      代理服务器接受请求,然后将请求转发给内部网络的服务器(集群化),
      并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器。

                    

                

                Nginx在反向代理上,提供灵活的功能,可以根据不同的正则采用不同的转发策略,如图设置好后不同的请求就可以走不同的服务器。


    • 负载均衡

                负载均衡:多在高并发情况下需要使用。其原理就是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,多台服务器(集群)共同完成工作任务,从而提高了数据的吞吐量。

                

                Nginx可使用的负载均衡策略有:轮询(默认)、权重、ip_hash、url_hash(第三方)、fair(第三方)


    • 动静分离

                Nginx提供的动静分离是指把动态请求和静态请求分离开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高。

                Nginx可以根据配置对不同的请求做不同转发,这是动态分离的基础。静态请求对应的静态资源可以直接放在Nginx上做缓冲,更好的做法是放在相应的缓冲服务器上。动态请求由相应的后端服务器处理。

        
    展开全文
  • 主要介绍了详解nginx upstream 配置和作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • header主要有如下: 代码如下:Cache-control:no-cache、no-store如果出现这值,nginx缓存服务器是绝对不会缓存的 代码如下:Expires:1980-01-01如果出现日期比当前时间早,也不会缓存。 2. 解决不缓存方案 2.1 ...
  • nginx

    万次阅读 多人点赞 2019-02-28 16:39:12
    nginx反向代理3.1 反向代理的作用3.2 正向代理和反向代理的区别4. nginx的安装与配置4.1 nginx的安装4.2 nginx安装后的配置 1. nginx简介 nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子...

    1. nginx简介

    nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。

    nginx的特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

    2. nginx的特性与优点

    2.1 nginx的特性

    • Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
    • 高度的模块化和自由软件许可证是的第三方模块层出不穷(这是个开源的时代啊~)
    • Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操作系统上
    • 这些优秀的设计带来的极大的稳定性

    2.2 nginx的优点

    • 高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2-3万并发连接数
    • 内存消耗少:在3万并发连接下,开启的10个nginx进程才消耗150M内存(15M*10=150M)
    • 配置文件非常简单:风格跟程序一样通俗易懂
    • 成本低廉:nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
    • 支持Rewrite重写规则:能够根据域名、URL的不同,将HTTP请求分到不同的后端服务器群组
    • 内置的健康检查功能:如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问
    • 节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头
    • 稳定性高:用于反向代理,宕机的概率微乎其微
    • 模块化设计:模块可以动态编译
    • 外围支持好:文档全,二次开发和模块较多
    • 支持热部署:可以不停机重载配置文件
    • 支持事件驱动、AIO(AsyncIO,异步IO)、mmap(Memory Map,内存映射)等性能优化

    3. nginx反向代理

    多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。

    客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

    反向代理,“它代理的是服务端”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

    3.1 反向代理的作用

    • 保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
    • 负载均衡,通过反向代理服务器来优化网站的负载

    3.2 正向代理和反向代理的区别

    • 在正向代理中,Proxy和Client同属于一个LAN(图中方框内),隐藏了客户端信息;
    • 在反向代理中,Proxy和Server同属于一个LAN(图中方框内),隐藏了服务端信息;

    4. nginx的安装与配置

    4.1 nginx的安装

    //创建系统用户nginx

    [root@xaii ~]# groupadd -r nginx
    [root@xaii ~]# useradd -r -M -s /sbin/nologin -g nginx nginx
    

    //安装依赖环境

    [root@xaii ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++
    暗转过程省略......
    [root@xaii ~]# yum -y groups mark install 'Development Tools'
    安装过程省略......
    

    //创建日志存放目录

    [root@xaii ~]# mkdir -p /var/log/nginx
    [root@xaii ~]# chown -R nginx.nginx /var/log/nginx/
    

    //下载nginx,下载过程省略,存放至/usr/src目录下

    [root@xaii src]# wget http://nginx.org/download/nginx-1.12.0.tar.gz
    [root@xaii ~]# ls /usr/src/ |grep nginx
    nginx-1.12.0.tar.gz
    

    //编译安装nginx

    [root@xaii src]# tar xf nginx-1.12.0.tar.gz 
    [root@xaii src]# cd nginx-1.12.0
    
    [root@xaii nginx-1.12.0]# ./configure \
     --prefix=/usr/local/nginx \
     --user=nginx \
     --group=nginx \
     --with-debug \
     --with-http_ssl_module \
     --with-http_realip_module \
     --with-http_image_filter_module \
     --with-http_gunzip_module \
     --with-http_gzip_static_module \
     --with-http_stub_status_module \
     --http-log-path=/var/log/nginx/access.log \
     --error-log-path=/var/log/nginx/error.log
    //安装过程省略....
    
    [root@xaii nginx-1.12.0]# make -j $(grep 'processor' /proc/cpuinfo | wc -l) && make install
    //-j是指定多少内核
    //过程省略......
    

    4.2 nginx安装后的配置

    //添加环境变量

    [root@xaii ~]# vim /etc/profile.d/nginx.sh
    [root@xaii ~]# cat /etc/profile.d/nginx.sh 
    export PATH=/usr/local/nginx/sbin:$PATH
    [root@xaii ~]# . /etc/profile.d/nginx.sh
    

    //服务控制方式,使用nginx命令

    -t  //检查配置文件语法
    [root@xaii ~]# nginx -t
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    
    
    -v  //输出nginx的版本
    root@xaii ~]# nginx -v
    nginx version: nginx/1.12.0
    
    -c  //指定配置文件的路径
    需要拷贝两个文件:nginx.conf和mime.type至新的路径
    [root@xaii conf]# cp -a nginx.conf /opt/nginx/
    [root@xaii conf]# cp -a mime.types /opt/nginx
    [root@xaii ~]# ps -ef |egrep -v 'grep'|grep nginx
    root       4040      1  0 00:03 ?        00:00:00 nginx: master process nginx -c /optnginx/nginx.conf
    nginx      4041   4040  0 00:03 ?        00:00:00 nginx: worker process
    可以看到,现在用的配置文件为/opt/nginx/nginx.conf
    
    -s  //发送服务控制信号,可选值有{stop|quit|reopen|reload}
    

    //nginx和apache不能同时开启

    //因为apache和nginx的端口都是80,当apache服务开启时,无法开始nginx服务
    
    [root@xaii ~]# ss -antlp|grep 80
    LISTEN     0      128         :::80                      :::*                   users:(("httpd",pid=4081,fd=4),("httpd",pid=4080,fd=4),("httpd",pid=4079,fd=4),("httpd",pid=4078,fd=4),("httpd",pid=4077,fd=4),("httpd",pid=4076,fd=4))
        
    [root@xaii ~]# nginx
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    ^C
    

    //关闭apache服务,再开启nginx服务

    [root@xaii ~]# apachectl stop
    [root@xaii ~]# nginx
    [root@xaii ~]# ss -antlp|grep 80
    LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=4069,fd=6),("nginx",pid=4068,fd=6))
    

    4.3利用脚本控制nginx服务的开启,重载,和关闭

    #! /bin/bash
    
    nginx=/usr/local/nginx/sbin/nginx
    conf_path=/opt/nginx/nginx.conf
    
    case $1 in
    start)
            $nginx -c $conf_path
    if [ $? -eq 0 ];then
            echo 'nginx start sucessful'
    else
            echo 'nginx start faild'
    fi
            ;;
    
    
    restart)
            $nginx -s stop
            $nginx -c $conf_path
    if [ $? -eq 0 ];then
            echo 'nginx restart sucessful'
    else
            echo 'nginx restart faild'
    fi
            ;;
    
    
    stop)
            $nginx -s stop 2>/dev/null
    if [ $? -eq 0 ];then
            echo 'nginx is off'
    else
            echo 'nginx error'
    fi
            ;;
    esac
    

    5. nginx的配置文件详解

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

    • 默认启动nginx时,使用的配置文件是:安装路径/conf/nginx.conf文件
    • 可以在启动nginx时通过-c选项来指定要读取的配置文件

    5.1 nginx.conf配置详解

    nginx.conf的内容分为以下几段:

    • main配置段:全局配置段。其中main配置段中可能包含event配置段
    • event {}:定义event模型工作特性
    • http {}:定义http协议相关的配置

    支持使用变量:

    • 内置变量:模块会提供内建变量定义
    • 自定义变量:set var_name value

    5.2 用于调试、定位问题的配置

    • 参数daemon {on|off}; //是否以守护进程方式运行nginx,调试时应设置为off
    • master_process {on|off}; //是否以master/worker模型来运行nginx,调试时可以设置为off
    • error_log 位置 级别; //配置错误日志

    5.3 正常运行必备的配置参数

    • user USERNAME [GROUPNAME]; //指定运行worker进程的用户和组

    • pid /path/to/pid_file; //指定nginx守护进程的pid文件

    • worker_rlimit_nofile number; //设置所有worker进程最大可以打开的文件数,默认为1024(文件系统最大打开的文件数为65535)

        //此设置为nginx的配置,还需配置系统的文件
        [root@nginx ~]# head -3 /usr/local/nginx/conf/nginx.conf
        user  nginx;(初始为nobody)
        worker_processes  4;(cpu核心数)
        worker_rlimit_nofile 30000;(默认为1024,最大为65535,我们设置为30000)
        [root@nginx ~]# nginx -s reload
      
      
        //修改系统的硬限制和软限制,都设置为最大的65535
        [root@nginx ~]# vim /etc/security/limits.conf 
        [root@nginx ~]# tail -4 /etc/security/limits.conf 
        * soft nofile 65535
        * hard nofile 65535
      
        # End of file
      
    • worker_rlimit_core size; //指明所有worker进程所能够使用的总体的最大核心文件大小,保持默认即可

    5.4 优化性能的配置参数

    • worker_processes n; //启动n个worker进程,这里的n为了避免上下文切换,通常设置为cpu总核心数-1或等于总核心数
    • worker_cpu_affinity cpumask …; //将进程绑定到某cpu中,避免频繁刷新缓存
      • //cpumask:使用8位二进制表示cpu核心,如:
        0000 0001 //第一颗cpu核心
        0000 0010 //第二颗cpu核心
        0000 0100 //第三颗cpu核心
        0000 1000 //第四颗cpu核心
        0001 0000 //第五颗cpu核心
        0010 0000 //第六颗cpu核心
        0100 0000 //第七颗cpu核心
        1000 0000 //第八颗cpu核心
    • timer_resolution interval; //计时器解析度。降低此值,可减少gettimeofday()系统调用的次数
    • worker_priority number; //指明worker进程的nice值

    //具体配置:

    [root@nginx ~]# head /usr/local/nginx/conf/nginx.conf |grep worker_
    worker_processes  4;(cpu核心数为4个)
    worker_rlimit_nofile 30000;
    worker_cpu_affinity 00000001 00000010 00000100 00001000;(所以这里也只能写4个)
    [root@nginx ~]# nginx -s reload
    

    5.5 事件相关的配置:event{}段中的配置参数

    • accept_mutex {off|on}; //master调度用户请求至各worker进程时使用的负载均衡锁;on表示能让多个worker轮流地、序列化地去响应新请求

        [root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf	
        	  events {
            worker_connections  1024;
            accept_mutex on;(添加此内容)
        }
      
    • lock_file file; //accept_mutex用到的互斥锁锁文件路径

        pid        logs/nginx.pid;
        lock_file  logs/nginx.lock;(添加此内容,写在event外部,顶格写)
      
    • use [epoll | rtsig | select | poll]; //指明使用的事件模型,建议让nginx自行选择

    • worker_connections #; //每个进程能够接受的最大连接数

        events {
        worker_connections  1024;
        accept_mutex on;
      

      }

    注意:

    worker_connections(连接数) * worker_processes(cpu核心数) <=30000
    

    5.6 网络连接相关的配置参数

    • keepalive_timeout number; //长连接的超时时长,默认为65s

        keepalive_timeout  65;
      
    • keepalive_requests number; //在一个长连接上所能够允许请求的最大资源数

        keepalive_requests 100;(配置文件中没有设置,默认为100,看自己的业务设置)
      
    • keepalive_disable [msie6|safari|none]; //为指定类型的UserAgeng禁用长连接

    • tcp_nodelay on|off; //是否对长连接使用TCP_NODELAY选项,为了提升用户体验,通常设为on

        tcp_nodelay on;(默认为on)
      
    • client_header_timeout number; //读取http请求报文首部的超时时长

    • client_body_timeout number; //读取http请求报文body部分的超时时长

    • send_timeout number; //发送响应报文的超时时长

    5.7 fastcgi的相关配置参数

    LNMP:php要启用fpm模型
    配置示例如下:

    location ~ \.php$ {
      root html;
      fastcgi_pass 127.0.0.1:9000;      //定义反向代理
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
      include fastcgi_params;
    }
    

    6. 搭建lnmp架构

    6.1 环境:

    nginx端:192.168.157.69
    php、mysql、zabbix端:192.168.157.59

    6.2 php安装

    详情请看:php安装

    6.3 mysql安装

    详情请看:mysql安装

    6.4 php端配置

    //修改配置文件并重启php服务

    [root@xaii ~]# tail -2 /usr/local/php7/etc/php-fpm.conf
    
    listen = 192.168.157.59:9000	(//添加此内容)
    listen.allowed_clients = 192.168.157.69	(//添加此内容)
    
    [root@xaii ~]# service php-fpm restart 
    Gracefully shutting down php-fpm . done
    Starting php-fpm  done
    
    [root@xaii ~]# ss -antl |grep 9000
    LISTEN     0      128    192.168.157.59:9000                     *:*        
    

    6.5 nginx端配置

    //修改配置文件并新加载nginx服务

    location / {
    root   html;
    index  index.php(//添加此内容) index.html index.htm;
        }
    
    
    
     location ~ \.php$ {
     root           /var/www/zabbix;(php端的zabbix目录)
     fastcgi_pass   192.168.157.59:9000; (指向php端ip地址)
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
     include        fastcgi_params;
        }
    
    [root@nginx html]# nginx -s reload
    

    6.6 两端都开启nfs服务,将php端的zabbix目录共享至nginx端

    //php端nfs配置:

    [root@xaii ~]# yum -y install nfs-utils
    [root@xaii ~]# systemctl start nfs
    [root@xaii ~]# echo '/var/www/zabbix *(ro)' > /etc/exports
    [root@xaii ~]# chmod 777 /var/www/zabbix/
    [root@xaii ~]# systemctl restart nfs-server
    

    //nginx端nfs配置,将php端zabbix目录挂载到本地的/usr/local/nginx/html/

    [root@nginx ~]# yum -y install nfs-utils
    [root@nginx ~]# systemctl start nfs
    [root@nginx ~]# mount -t nfs 192.168.157.59:/var/www/zabbix /usr/local/nginx/html(临时挂载)
    [root@nginx ~]# df -Th
    文件系统                                       类型      容量  已用  可用 已用% 挂载点
    /dev/mapper/rhel-root                          xfs        17G  1.5G   16G    9% /
    devtmpfs                                       devtmpfs  901M     0  901M    0% /dev
    tmpfs                                          tmpfs     912M     0  912M    0% /dev/shm
    tmpfs                                          tmpfs     912M  8.6M  904M    1% /run
    tmpfs                                          tmpfs     912M     0  912M    0% /sys/fs/cgroup
    /dev/loop0                                     iso9660   3.8G  3.8G     0  100% /mnt
    /dev/sda1                                      xfs      1014M  143M  872M   15% /boot
    tmpfs                                          tmpfs     183M     0  183M    0% /run/user/0
    192.168.157.59:/usr/local/apache/htdocs/zabbix nfs4       17G  5.9G   12G   35% /usr/local/nginx/html
    [root@nginx ~]# nginx -s reload
    

    6.7 验证

    //输入192.168.157.69

    在这里插入图片描述

    //永久挂载

    [root@nginx ~]# vim /etc/fstab 
    192.168.157.59:/var/www/zabbix /usr/local/nginx/html nfs defaults,_netdev 0 0
    [root@nginx ~]# mount -a 
    [root@nginx ~]# df -Th
    文件系统                       类型      容量  已用  可用 已用% 挂载点
    /dev/mapper/rhel-root          xfs        17G  1.5G   16G    9% /
    devtmpfs                       devtmpfs  901M     0  901M    0% /dev
    tmpfs                          tmpfs     912M     0  912M    0% /dev/shm
    tmpfs                          tmpfs     912M  8.6M  904M    1% /run
    tmpfs                          tmpfs     912M     0  912M    0% /sys/fs/cgroup
    /dev/loop0                     iso9660   3.8G  3.8G     0  100% /mnt
    /dev/sda1                      xfs      1014M  143M  872M   15% /boot
    tmpfs                          tmpfs     183M     0  183M    0% /run/user/0
    192.168.157.59:/var/www/zabbix nfs4       17G  5.8G   12G   34% /usr/local/nginx/html
    

    7. nginx作为web服务器使用的配置:http{}段的配置参数

    http{…}:配置http相关,由ngx_http_core_module模块引入。nginx的HTTP配置主要包括四个区块,结构如下:

    http {//协议级别
      include mime.types;
      default_type application/octet-stream;
      keepalive_timeout 65;
      gzipon;
      upstream {//负载均衡配置
        ...
      }
      server {//服务器级别,每个server类似于httpd中的一个<VirtualHost>
        listen80;
        server_name localhost;
        location / {//请求级别,类似于httpd中的<Location>,用于定义URL与本地文件系统的映射关系
          root html;
          index index.html index.htm;
        }
      }
    }
    

    //http{}段配置指令:
    server {}:定义一个虚拟主机,示例如下:

    server {
      listen 80;
      server_name www.lizhao.com;(自己定义)
      root "/vhosts/web"; (html下网页的路径)
    }
    

    listen:指定监听的地址和端口:

    listen address[:port];
    listen port;
    
    • root path; 设置资源路径映射,用于指明请求的URL所对应的资源所在的文件系统上的起始路径

    • alias path; 用于location配置段,定义路径别名

    • index file; 默认主页面

    • error_page code […] [=code] URI | @name 根据http响应状态码来指明特用的错误页面,例如 error_page 404 /404_customed.html

    • [=code]:以指定的响应码进行响应,而不是默认的原来的响应,默认表示以新资源的响应码为其响应码,例如 error_page 404 =200 /404_customed.html

    location区段,通过指定模式来与客户端请求的URI相匹配:

    //功能:允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能
    

    例如:
    URL:https://www.baidu.com/?tn=sitehao123_15
    URI:www.baidu.com
    ?以前的是协议(https)+URI,?以后的是参数。

    //语法:location [ 修饰符 ] pattern {......}
    
    展开全文
  • nginx系列之一:nginx入门

    万次阅读 多人点赞 2019-05-11 17:06:35
    一、nginx 功能介绍 Nginx因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块...

    前言

    nginx系列之一:nginx入门
    nginx系列之二:配置文件解读
    nginx系列之三:日志配置
    nginx系列之四:web服务器
    nginx系列之五: 负载均衡
    nginx系列之六:cache服务
    nginx系列之七:限流配置
    nginx系列之八:使用upsync模块实现负载均衡

    转自:在此感谢原博主的整理分享

    一、nginx 功能介绍

    Nginx因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级代替者,不仅因为响应静态页面的速度非常快,而且它的模块数量是Apache的2/3。对proxy和rewrite模块的支持很彻底,还支持mod_fcgi、ssl、vhosts ,适合用做mongrel clusters前端HTTP响应。
    nginx和Apache一样用模块化设计,nginx模块包括内置模块和第三方模块,其中内置模块中包含主模块和事件模块。

    nginx处理请求逻辑图
    在这里插入图片描述

    二、nginx可以提供的服务

    1. web 服务.
    2. 负载均衡 (反向代理)
    3. web cache(web 缓存)

    三、nginx 的优点

    1. 高并发。静态小文件
    2. 占用资源少。2万并发、10个线程,内存消耗几百M。
    3. 功能种类比较多。web,cache,proxy。每一个功能都不是特别强。
    4. 支持epoll模型,使得nginx可以支持高并发。
    5. nginx 配合动态服务和Apache有区别。(FASTCGI 接口)
    6. 利用nginx可以对IP限速,可以限制连接数。
    7. 配置简单,更灵活。

    四、nginx应用场合

    1. 静态服务器(图片,视频服务),另个lighttpd。并发几万,html,js,css,flv,jpg,gif等。
    2. 动态服务,nginx—fastcgi 方式运行PHP,jsp。(PHP并发约500-1500,MySQL 并发约300-1500)。
    3. 反向代理,负载均衡。日pv2000W以下,都可直接用nginx做代理。
    4. 缓存服务。类似 SQUID,VARNISH。

    五、主流web服务产品对比说明

    5.1 Apache-特性

    1. 2.2版本本身稳定强大,据官方说:其2.4版本性能更强。
    2. prefork模式取消了进程创建开销,性能很高。
    3. 处理动态业务数据时,因关联到后端的引擎和数据库,瓶颈不在与Apache本身。
    4. 高并发时消耗系统资源相对多一些。
    5. 基于传统的select模型。
    6. 扩展库,DSO方法。

    5.2 nginx-特性

    1. 基于异步IO模型(epoll,kqueue),性能强,能够支持上万并发。
    2. 对小文件支持很好,性能很高(限静态小文件1M)。
    3. 代码优美,扩展库必须编译进主程序。
    4. 消耗代码资源比较低。
    5. lighttpd(百度贴吧,豆瓣)
    6. 基于异步IO模式,性能和nginx相近。
    7. 扩展库是SO模式,比nginx要灵活。
      8.通过差距(mod_secdownload)可实现文件URL地址加密。

    5.3 web服务产品性能对比测试

    5.3.1 静态数据性能对比

    1. 处理静态文件Apache性能比nginx和lighttpd要差。
    2. nginx在处理小文件优势明显。
    3. 处理静态小文件(小于1M),nginx和lighttpd比Apache更有优势,lighttpd最强。

    5.3.2 动态数据性能对比

    1. 处理动态内容三者相差不大,主要取决于PHP和数据库压力。
    2. 当处理动态数据时,三者差距不大,从测试结果看,Apache更有优势。这是因为处理动态数据能力取决于PHP和后端数据的提供服务能力。即瓶颈不在web服务器上。
    3. 一般PHP引擎的并发值300-1000,JAVA引擎并发300-1000,数据库并发300-1000.

    5.3.3 为什么nginx总体性能比Apache高。

    1. nginx用最新epoll、kqueue网络IO模型,而Apache使用床头的select模式。
    2. 目前Linux下能承受高并发访问的squid、Memcached 都采用的是epoll网络IO模型。

    5.3.4 如何选择WEB服务器:

    静态业务:高并发、采用nginx,lighttpd,根据自己掌握程度或公司要求。
    动态业务:采用nginx和Apache均可。
    既有静态业务又有动态业务:nginx或Apache,不要多选要单选。
    动态业务可由前端代理(haproxy),根据页面元素的类型,向后转发给相应的服务器处理。
    思想:工作都不要追求一步到位,满足需求的前提下,先用再逐步完善。
    提示:nginx做web(Apache,lighttpd)、反向代理(haproxy、lvs、nat)及缓存服务器(squid)也是不错的。
    最终建议:对外业务nginx,对内业务Apache(yum httpd mysql-server php)。

    六、nginx实战过程

    6.1 安装依赖包

    • nginx安装依赖GCC、openssl-devel、pcre-devel、zlib-devel软件库。
    • Pcre全称(Perl Compatible Regular Expressions),中文perl兼容正则表达式,pcre官方站点
    yum install  pcre pcre-devel -y 
    yum install openssl openssl-devel -y 
    

    6.2 开始编译

    使用./configure --help查看各模块使用情况,用 --without-http_ssi_module 方式关闭不需的模块。可用 --with-http_perl_modules 方式安装需要的模块。

    6.2.1 编译命令

    tar -zxf nginx-1.10.1.tar.gz 
    cd nginx-1.10.1/
    ./configure --prefix=/data/nginx-1.10.1 --user=nginx --group=nginx  --with-http_ssl_module  --with-http_stub_status_module
    
    useradd nginx -M -s /sbin/nologin 
    make && make install 
    ln -s /data/nginx-1.10.1 /data/nginx
    

    6.2.2 测试nginx配置文件是否正常

    /data/nginx/sbin/nginx -t 
    nginx: the configuration file /data/nginx-1.10.1/conf/nginx.conf syntax is ok
    nginx: configuration file /data/nginx-1.10.1/conf/nginx.conf test is successful
    

    6.2.3 启动nginx服务器

    /data/nginx/sbin/nginx  -t  	# 检查配置文件
    /data/nginx/sbin/nginx      	# 确定nginx服务
    netstat -lntup |grep nginx      # 检查进程是否正常
    curl http://localhost           # 确认结果
    

    6.2.4 nginx其他命令

    nginx -s signal
    signal:
    stop — fast shutdown
    quit — graceful shutdown
    reload — reloading the configuration file
    reopen — reopening the log files
    用来打开日志文件,这样nginx会把新日志信息写入这个新的文件中
    

    /data/nginx/sbin/nginx -V 查看已经编译的参数。

    使用kill命令操作nginx。格式:kill -信号 PID

    信号名称

    • TERM,INT 快速关闭
    • QUIT 优雅的关闭,保持吸纳有的客户端连接
    • HUP 重启应用新的配置文件
    • USR1 重新打开日志文件
    • USR2 升级程序
    • WINCH 优雅的关闭工作进程

    例子

    kill -QUIT  `cat /data/nginx/nginx.pid`
    kill -HUP `cat /data/nginx/nginx.pid`
    

    七、nginx配置文件

    配置基础配置文件

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    

    测试配置文件是否正常

    shell> /data/nginx/sbin/nginx -t 
    nginx: the configuration file /data/nginx-1.10.3/conf/nginx.conf syntax is ok
    nginx: configuration file /data/nginx-1.10.3/conf/nginx.conf test is successful
    shell> curl -I http://localhost
    HTTP/1.1 200 OK
    

    八、nginx监控

    开启 nginx 监控服务

    8.1 开启状态页

    # 设定查看 Nginx 状态地址   
    location /status {  
      stub_status on;   				# 表示开启stubStatus的工作状态统计功能。
      access_log off;   				# access_log off; 关闭access_log 日志记录功能。
      #auth_basic "status";   		# auth_basic 是nginx的一种认证机制。
      #auth_basic_user_file conf/htpasswd;	# 用来指定密码文件的位置。
    }
    

    8.2 配置登录密码

    yum install -y httpd-tools
    /usr/local/apache/bin/htpasswd -c /data/nginx/conf/htpasswd biglittleant 
    New password:
    

    完成后会在 /data/nginx/conf/ 目录下生成 htpasswd 文件。

    8.3 访问URL

    curl http://127.0.0.1/status
    
    Active connections:  1
    server accepts handled requests
     16 16 18
    Reading: 0 Writing: 1 Waiting: 0
    

    active connections – 活跃的连接数量
    server accepts handled requests — 总共处理了16个连接 , 成功创建16次握手, 总共处理了18个请求
    Reading — 读取客户端的连接数:
    Writing 响应数据到客户端的数量;
    Waiting 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 即 Nginx 已处理完正在等候下一次请求指令的驻留连接.

    8.3 编写zabbix监控脚本

    nginx_status_fun(){
        NGINX_PORT=$1
        NGINX_COMMAND=$2
        nginx_active(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
            }
        nginx_reading(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
           }
        nginx_writing(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
           }
        nginx_waiting(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
           }
        nginx_accepts(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
           }
        nginx_handled(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
           }
        nginx_requests(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
           }
        case $NGINX_COMMAND in
            active)
                nginx_active;
                ;;
            reading)
                nginx_reading;
                ;;
            writing)
                nginx_writing;
                ;;
            waiting)
                nginx_waiting;
                ;;
            accepts)
                nginx_accepts;
                ;;
            handled)
                nginx_handled;
                ;;
            requests)
                nginx_requests;
            esac 
    }
    

    九、nginx优化

    9.1 nginx内核优化

    net.ipv4.tcp_fin_timeout = 2
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.ip_local_port_range = 4000    65000
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_max_tw_buckets = 36000
    net.ipv4.route.gc_timeout = 100
    net.ipv4.tcp_syn_retries = 1
    net.ipv4.tcp_synack_retries = 1
    net.core.somaxconn = 16384
    net.core.netdev_max_backlog = 16384
    net.ipv4.tcp_max_orphans = 16384
    #以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。
    net.ipv4.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_max=25000000
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120
    

    十、扩展一:nginx全局变量

    • $args:这个变量等于请求行中的参数,同$query_string。
    • $is_args: 如果已经设置$args,则该变量的值为"?",否则为""。
    • $content_length: 请求头中的Content-length字段。
    • $content_type: 请求头中的Content-Type字段。
    • $document_uri: 与$uri相同。
    • $document_root: 当前请求在root指令中指定的值。
    • $host: 请求主机头字段,否则为服务器名称。
    • $http_user_agent: 客户端agent信息。
    • $http_cookie: 客户端cookie信息。
    • $limit_rate: 这个变量可以限制连接速率。
    • $request_method: 客户端请求的动作,通常为GET或POST。
    • $remote_addr: 客户端的IP地址。
    • $remote_port: 客户端的端口。
    • $remote_user: 已经经过Auth Basic Module验证的用户名。
    • $request_body_file`: 客户端请求主体的临时文件名。
    • $request_uri: 请求的URI,带参数
    • $request_filename: 当前请求的文件路径,由root或alias指令与URI请求生成。
    • $scheme: 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;
    • $server_protocol: 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
    • $server_addr: 服务器地址,在完成一次系统调用后可以确定这个值。
    • $server_name: 服务器名称。
    • $server_port: 请求到达服务器的端口号。
    • $request_uri: 包含请求参数的原始URI,不包含主机名,如:/foo/bar.php?arg=baz,它无法修改。
    • $uri: 不带请求参数的当前URI,$uri不包含主机名,如/foo/bar.html可能和最初的值有不同,比如经过重定向之类的。它可以通过内部重定向,或者使用index指令进行修改。不包括协议和主机名,例如/foo/bar.html。

    例子:

    访问链接是:http://localhost:88/test1/test.php 
    网站路径是:/var/www/html
    
    $host:localhost
    $server_port:88
    $request_uri:http://localhost:88/test1/test.php
    $document_uri:/test1/test.php
    $document_root:/var/www/html
    $request_filename:/var/www/html/test1/test.php
    
    

    nginx plus – ngx_http_status_module

    商业版的 nginx plus 通过他的 ngx_http_status_module 提供了比 nginx 更多的监控指标,可以参看 http://demo.nginx.com/status.html

    nginx access log 分析

    nginx 的 access log 中可以记录很多有价值的信息,通过分析 access log,可以收集到很多指标。
    python 编写的 linux 工具 ngxtop 就实现了对 access log 的分析功能。

    NDK – ngx_devel_kit

    NDK 是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现。NDK提供函数和宏处理一些基本任务,减轻第三方模块开发的代码量。

    nginx lua – lua-nginx-module

    nginx的lua模块,通过这个模块,可以对nginx做定制开发

    十、扩展二:web服务器事件处理模型

    select

    select 最早于1983年出现在4.2BSD中,通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使进程可获得这些文件描述符从而进行后续的读写操作。
    select 目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一。
    select 的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,Linux上一般为1024,不过可通过修改宏定义甚至重新编译内核的方式提升这一限制。
    另外,select()所维护的存储大量文件描述符的数据结构,随着文件描述符数量的增大,其复制的开销也线性增长。同时,由于网络响应时间的延迟使得大量TCP连接处于非活跃状态,但调用 select() 会对所有socket进行一次线性扫描,所以这也浪费了一定开销。

    poll

    poll 在1986年诞生于System V Release 3,它和 select 在本质上没多大差别,但是 poll 没有最大文件描述符数量的限制。
    poll 和select 同样存在的缺点是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间间,而不论文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。
    另外,select() 和 poll() 将就绪的文件描述符告诉进程后,如果进程没对其进行IO操作,那下次调用 select() 和 poll() 时将再次报告这些文件描述符,所以它们一般不会丢失就绪的消息,这种方式称为水平触发(Level Triggered)。

    epoll

    直到Linux2.6才出现了由内核直接支持的实现方法,就是epoll,它几乎具备之前说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。
    epoll 可同时支持水平触发和边缘触发(Edge Triggered,只告诉进程哪些文件描述符刚刚变为就绪状态,它只说一遍,如果没有采取行动,那它将不会再次告知,这种方式称为边缘触发),理论上边缘触发的性能要更高些,但代码实现相当复杂。
    epoll同样只告知那些就绪的文件描述符,而且当调用epoll_wait()获得就绪文件描述符时,返回的不是实际的描述符,而是个代表就绪描述符数量的值,只需要去epoll指定的一个数组中依次取得相应数量的文件描述符即可,这里也用了内存映射(mmap)技术,这样便彻底省掉了这些文件描述符在系统调用时复制的开销。
    另个本质的改进在于 epoll 采用基于事件的就绪通知方式。在 select/poll 中,进程只有在调用一定的方法后,内核才对所有监视的文件描述符进行扫描,而epoll事先通过 epoll_ctl() 来注册一个文件描述符,一旦基于某个文件描述符就绪时,内核会采用类似 callback 的回调机制,迅速激活这个文件描述符,当进程调用 epoll_wait() 时便得到通知。

    nginx -s reload 过程

    nginx主进程读取配置文件,如果发现配置文件变更,会创建一个新的主进程,然后同时旧的进程,及旧的子进程关闭,旧进程会拒绝新的连接,服务到自己的连接结束,然后关闭。

    Apache select模型和 nginx epoll 模型对比讲解

    Nginx高并发得益于其采用了 epoll 模型,与传统的服务器架构不同,epoll 是linux内核2.6后才出现的。下面通过比较Apache和Nginx工作原理来比较。

    传统Apache都是多进程或者多线程来工作,假设是多进程工作(prefork),apache会先生成几个进程,类似进程池的工作原理,只不过这里的进程池会随着请求数目的增加而增加。对于每一个连接,apache都是在一个进程内处理完毕。具体是 recv(),及根据 URI 去进行磁盘I/O来寻找文件,还有 send()都是阻塞的。其实说白了都是 apche 对套接字的I/O,读或写,但读或写都是阻塞的,阻塞意味着进程得挂起进入sleep状态,那一旦连接数很多,Apache必然要生成更多的进程来响应请求,一旦进程多了,CPU对进程的切换就频繁了,很耗资源和时间,所以导致apache性能下降,处理不过来这么多进程了。其实如果对于进程每个请求都没阻塞,那效率肯定会提高很多。

    Nginx采用 epoll 模型,异步非阻塞。对于Nginx,把一个完整的连接请求处理都划分成了事件,一个个的事件。如accept(), recv(),磁盘I/O,send()等,每部分都有相应的模块去处理,一个完整的请求可能是由几百个模块去处理。真正核心的就是事件收集和分发模块,这就是管理所有模块的核心。只有核心模块的调度才能让对应的模块占用CPU资源,从而处理请求。拿一个HTTP请求来说,首先在事件收集分发模块注册感兴趣的监听事件,注册好后不阻塞直接返回,接下来就不需再管了,等待有连接来了内核会通知你(epoll的轮询会告诉进程),cpu就可处理其他事情去。一旦有请求来,那对整个请求分配相应的上下文(其实已预先分配好),这时再注册新的感兴趣的事件(read函数),同样客户端数据来了内核会自动通知进程可以去读数据了,读数据后就是解析,解析完后去磁盘找资源(I/O),一旦I/O完成会通知进程,进程开始给客户端发回数据send(),这时也不是阻塞的,调用后就等内核发回通知发送的结果就行。整个下来把一个请求分成了很多个阶段,每个阶段都到很多模块去注册,然后处理,都是异步非阻塞。异步指的就是做一个事情,不需等返回结果,做好后会自动通知你。

    select/epoll的特点

    select 特点:select 选择句柄时,是遍历所有句柄,即句柄有事件响应时,select需遍历所有句柄才能获取到哪些句柄有事件通知,因此效率非常低。但是如果连接很少时,select 和 epoll 的LT触发模式相比, 性能上差别不大。
    这里多说一句,select支持的句柄数是有限制的, 同时只支持1024个,这个是句柄集合限制的,如超过这个限制,很可能导致溢出,且非常不容易发现问题, 当然可通过修改linux的socket内核调整这个参数。
    epoll特点:epoll对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需遍历整个句柄链表,因此效率非常高,内核将句柄用红黑树保存的。
    对于epoll而言还有ET和LT的区别,LT表水平触发,ET表边缘触发,两者在性能以及代码实现上差别也是非常大的。

    不管是Nginx还是Squid这种反向代理,其网络模式都是事件驱动。事件驱动其实是很老的技术,早期的select、poll都是如此。后来基于内核通知的更高级事件机制出现,如libevent里的epoll,使事件驱动性能得以提高。事件驱动的本质还是IO事件,应用程序在多个IO句柄间快速切换,实现所谓的异步IO。事件驱动服务器,最适合做的就是这种IO密集型工作,如反向代理,它在客户端与WEB服务器之间起一个数据中转作用,纯粹是IO操作,自身并不涉及到复杂计算。反向代理用事件驱动来做,显然更好,一个工作进程就可run了,没有进程、线程管理的开销,CPU、内存消耗都小。

    所以Nginx、Squid都是这样做的。当然,Nginx也可是多进程 + 事件驱动的模式,几个进程跑libevent,不需要Apache那样动辄数百的进程数。Nginx处理静态文件效果也很好,那是因为静态文件本身也是磁盘IO操作,处理过程一样。至于说多少万的并发连接,这个毫无意义。随手写个网络程序都能处理几万的并发,但如果大部分客户端阻塞在那里,就没什么价值。

    再看看Apache或者Resin这类应用服务器,之所以称他们为应用服务器,是因为他们真的要跑具体的业务应用,如科学计算、图形图像、数据库读写等。它们很可能是CPU密集型的服务,事件驱动并不合适。例如一个计算耗时2秒,那么这2秒就是完全阻塞的,什么event都没用。想想MySQL如果改成事件驱动会怎么样,一个大型的join或sort就会阻塞住所有客户端。这个时候多进程或线程就体现出优势,每个进程各干各的事,互不阻塞和干扰。当然,现代CPU越来越快,单个计算阻塞的时间可能很小,但只要有阻塞,事件编程就毫无优势。所以进程、线程这类技术,并不会消失,而是与事件机制相辅相成,长期存在。

    总言之,事件驱动适合于IO密集型服务,多进程或线程适合于CPU密集型服务,它们各有各的优势,并不存在谁取代谁的倾向。

    相关参考

    nginx-日志高级技巧](https://segmentfault.com/a/1190000000703319)
    nginx-官方文档
    nginx优化
    查看网站排名
    nginx-status-demo

    展开全文
  • Nginx

    2018-01-07 17:06:27
    Nginx主要作用包含以下点: Nginx是一个反响代理服务器 Nginx可作负载均衡 代理服务器 个人理解:代理服务器主要分为正向代理服务器和反向代理服务器 正向代理服务器:正向代理服务器主要”代理”的是...

    今天学习了Nginx的安装以及相关配置,此处做记录

    Nginx

    • 简介:Nginx本质上是一个轻量级的Web服务器
    • Nginx的主要作用包含以下两点:
      1. Nginx是一个反响代理服务器
      2. Nginx可作负载均衡

    代理服务器

    • 个人理解:代理服务器主要分为正向代理服务器和反向代理服务器
    • 正向代理服务器:正向代理服务器主要”代理”的是客户端,向服务器隐藏了真实的客户端。常见的就是VPN
    • 反向代理服务器:反向代理服务器主要”代理”的是服务端,向客户端隐藏了真实的服务器。常见的就是Java Web的Nginx服务器

    Nginx的简单流程

    • 当用户的请求到达Nginx的时候,Nginx根据url和端口根据conf配置文件将请求转发到后台服务器当中。

    Nginx相关配置

    • nginx的配置如下所示:
    upstream plus_abc {
            server 127.0.0.1:3000;
            //1.可作负载均衡
            //2.可对后端机器进行healthcheck
        }
    
        server {
            listen 8080;
            server_name hello.world.com 
            listen 443 ssl;
            #ssl on;
            ssl_certificate /home/q/nginx/conf/server.crt;
            ssl_certificate_key /home/q/nginx/conf/server.key;
    
            if ( $request_method !~ ^(GET|POST|HEAD)$ ) {
                return 403;
            }
    
            gzip on;
            gzip_http_version 1.1;
            gzip_min_length 1000;
            gzip_buffers 256 64k;
            gzip_comp_level 5;
            gzip_types text/css text/javascript application/x-javascript text/plain text/xml html;
    
            #include qwaf.conf;
            proxy_buffers 64 4k;
    
        location /plus{ //location 
            proxy_pass http://plus_abc;
            //相关配置
        }
    }
    • 相关步骤讲解:
      1. 当nginx服务器监听到8080端口的请求,匹配location
      2. 当匹配上location /plus之后,获取proxy_pass的值,此时是http://plush_abc
      3. 再匹配up_stream,当匹配到对应的up_stream之后,将url请求转发到up_stream中对应的服务器上

    upstream模块

    • nginx配置中的upstream模块不仅可以将请求转发到后台服务器上,还可以起到负载均衡和对后端机器heathcheck的作用

    负载均衡

    • 在upstream中对后端机器做负载均衡的相关配置,nginx目前支持五种负载均衡的方式,如下所示:
    • 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
    upstream backserver {
        server 127.0.0.1:8080; # 用于指定后端服务器的,默认方式
        server 127.0.0.1:8081;
        ......
    }
    • weight:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况
    upstream backserver {
        server host:port weight=10;
        server host:port weight=90;
    }
    • ip_hash:每个请求按访问ip的hash结果分配,可以将某个客户端的请求通过ip_hash算法打到同一台后端服务器上。缺点:无法保证后端服务器的负债均衡,因为ip的不均匀hash可能会导致后端服务器接收到的请求不均匀
    upstream backserver {
        ip_hash;
        server 127.0.0.1:8080;
        server 127.0.0.1:8081;
        ......
    }
    • fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    upstream backserver {
        server server1;
        server server2;
        fair;
    }
    • url_hash(第三方):按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效
    upstream backserver {
        server squid1:3128;
        server squid2:3128;
        hash $request_uri;
        hash_method crc32;
    }

    healthcheck

    • 相关配置如下:
    upstream backserver {  
            server 192.168.237.186:10086;  
            healthcheck_enabled;  
            healthcheck_delay 10000;  
            healthcheck_timeout 1000;  
            healthcheck_failcount 2;  
            healthcheck_send 'GET /test HTTP/1.0' 'Host: xxcupid1.qunar.com' 'Connection: close';  
        } 
    • healthcheck_enabled ##启用此模块
    • healthcheck_delay ##对同一台后端服务器两次检测之间的时间间隔,单位毫秒,默认为1000;
    • healthcheck_timeout ##进行一次健康检测的超时时间,单位为毫秒,默认值2000;
    • healthcheck_failcount ##对一台后端服务器检测成功或失败多少次之后方才确定其为成功或失败,并实现启用或禁用此服务器;
    • healthcheck_send ##为了检测后端服务器的健康状态所发送的检测请求;如:healthcheck_send “GET /health HTTP/1.0” ‘Host: coolinuz.9966.org’;
    展开全文
  • Nginx特点及作用

    2019-05-08 11:29:05
    什么是Nginx? Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理, 在国内,使用nginx网站用户有:金山爱词霸、新浪、淘宝 俄罗斯的工程师Igor ...
  • nginx主要功能

    2017-02-24 21:54:17
    Nginx主要功能:1、反向代理 2、负载均衡 3、HTTP服务器(包含动静分离) 4、正向代理以上是 Nginx 在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做的。一、反向代理反向代理应该是 Nginx 做的最多的一...
  • 1 nginx是什么?Welcome to nginx! nginx是一款免费开源的高性能HTTP服务器及反向代理服务器(Reverse Proxy) 2 nginx优点及常用web服务器产品 静态web服务软件 1 Apache 中小型web服务的主流 优点:运行速.....
  • NGINX

    千次阅读 2019-03-07 23:33:09
    Nginx介绍 Nginx:engine X ,2002年,开源,商业版 NGINX是免费,开源,高性能的HTTP和反向代理服务器,邮件代理服务器,通用TCP/UDP代理服务器 解决C10K问题(10K Connections) 官网:...
  • 1. nginx 1.1 nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004...
  • 写在前面的 好久之前就想写博客,但是每次下笔前,都犹豫非常,感觉无从说起,无甚下笔;...Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器。基...
  • Nginx服务器的作用和搭建

    千次阅读 2016-09-21 23:42:53
    1.Nginx作用:负载均衡,静态图片服务器。其特点是占有内存少,并发能力强 2.Nginx 的安装: 从nginx 官网下载相应安装包? 解压到相应的目录,比如我是e盘 然后修改目录名字为nginx 进入nginx目录 双击nginx....
  • Nginx 原理和架构

    万次阅读 多人点赞 2019-11-09 17:13:09
    Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。...master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
  • Nginx主要用来干什么

    万次阅读 多人点赞 2018-07-24 09:09:26
    首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端。 配置: server { listen80; # 端口号 location / { root /usr/share/nginx/html; # 静态...
  • nginx作用与原理

    千次阅读 2018-08-16 11:40:41
    一、nginx作用  nginx能做反向代理,那么什么是反向代理呢,举个栗子,我想在本地使用 www.xxx.com 的域名去访问 www.taobao.com。那么这个时候我们就可以通过nginx去实现。  再者,nginx能实现通过统一域名...
  • Nginx reopen reload作用及工作过程 2012-12-05categories:nginxauthor:sch 原创文章,转载请指明出处并保留原文url地址 一.Nginx简介 Nginx (“engine x”) 是俄罗斯人Igor Sysoev(塞索耶夫)编写...
  • nginx安装及部署

    万次阅读 多人点赞 2019-04-11 15:52:47
    下载 官方网站:https://nginx.org/en/download.html Windows下安装 ...种方法: 1) 直接双击该目录下的"nginx.exe",即可启动nginx服务器; 2) 命令行进入该文件夹,执行start ngin...
  • 默认的Nginx服务器配置文件都存放在bin目录下的conf目录中,主配置文件名位nginx.conf。 nginx.conf文件的结构: ...... #全局块 events{ #events块 ... } http{ #http块 ..... #http全局块 server{ #server块 .........

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,623
精华内容 24,249
关键字:

nginx两大主要作用