序言

  Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,也是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。国内使用Nginx的网站有如下公司:新浪、网易、腾讯、CSDN、酷六、小米等
  优点如下:
1.高并发连接:
  官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。
2.内存消耗少:
  在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
3.配置文件非常简单:
  风格跟程序一样通俗易懂。
4.成本低廉:
  Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡
  交换机则需要十多万至几十万人民币。
5.支持Rewrite重写规则:
  能够根据域名、URL的不同,将 HTTP 请求分到不同的后端服务器群组。
6.内置的健康检查功能:
  如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
7.节省带宽:
  支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
8.稳定性高:
  用于反向代理,宕机的概率微乎其微。

Nginx常用功能

1、Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。

  这里我给来2张图,对正向代理与反响代理做个诠释,具体细节料。

nginx 占用cpu很高 nginx占用内存_nginx


  Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。

2、负载均衡

  Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他一一找出来做下实现。

上3个图,理解这三种负载均衡算法的实现

nginx 占用cpu很高 nginx占用内存_nginx 占用cpu很高_02


  Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

nginx 占用cpu很高 nginx占用内存_nginx_03


3、web缓存

  Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。

Nginx的配置文件详解

一、nginx的配置文件结构

nginx.conf由多个块组成,最外面的块是main,main包含events和http,http包含多个upstream和多个server,server又包含多个location:

nginx 占用cpu很高 nginx占用内存_Nginx_04


main(全局设置)、server(虚拟主机设置)、upstream(负载均衡服务器设置)和location(URL匹配特定位置的设置)。

  main块设置的指令将影响其他所有设置;

  server块的指令主要用于指定主机和端口;

  upstream指令主要用于负载均衡,设置一系列的后端服务器;

  location块用于匹配网页位置。

这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。

Nginx简单图片访问示例:

nginx 占用cpu很高 nginx占用内存_html_05

二、nginx的虚拟主机

  虚拟主机是用来映射网站目录和网站代码文件夹的关系.它可以通过server配置, 每个server表示一个虚拟机主机
  示例如下:

<span style="color:#000000"><code>#www.domain1.com对应的虚拟主机
server {
        listen          80;
        server_name     www.domain1.com;
        access_log      logs/domain1.access.log main;
        location / {
            index index.html;
            root  /var/www/domain1.com/htdocs;
           }
    }
</code></span>

规划虚拟主机的配置文件

  以上全部配置在主配置文件中可能不小心修改掉配置文件导致nginx.conf文件出错. 可以使用include指令将每个虚拟主机放在一个单独的配置文件中.

  将nginx服务器目录结构设置为:

  nginx

    nginx.conf

    vhost

      – www.domain1.com.conf

      – www.domain2.com.conf

每个.conf结尾的文件中保存一个虚拟主机(server)的配置信息.在nginx.conf中通过include指令包含这些配置文件.

nginx 占用cpu很高 nginx占用内存_Nginx_06

nginx 占用cpu很高 nginx占用内存_nginx 占用cpu很高_07


在nginx/config/vhost/www.ljs.com.conf中的配置:

<span style="color:#000000"><code class="language-yam">server {
        listen       80;
        server_name  www.ljs.com;  #访问的域名

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   E:\VMS\nginx-1.8.0\www\p2p_website; #静态资源交给Nginx处理
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location ~ .*.do$ {
            proxy_pass   http://www.ljs.com:8081; #*.do的资源交给tomcat处理
        }

        location ~ ^/WEB-INF/ { #WEB-INF下面的所有资源都拒绝外部直接访问
            deny  all; 
        }
    }
</code></span>

在nginx/config/vhost/admin.ljs.com.conf中的配置:

<span style="color:#000000"><code class="language-xml">server {
        listen       80;
        server_name  admin.ljs.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   E:\VMS\nginx-1.8.0\www\p2p_mgrsite;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location ~ .*.do$ {
            proxy_pass   http://admin.ljs.com:8080;
        }

        location ~ ^/WEB-INF/ {
            deny  all;
        }
    }
</code></span>

在nginx/config/vhost/images.ljs.com.conf中的配置:

<span style="color:#000000"><code class="language-xml">	server {
        listen       80;
        server_name  www.p2p.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   C:\Users\Administrator\Desktop\aa;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }	  
    }
</code></span>

修改tomcat中配置(三个tomcat均修改,端口也一样):

nginx 占用cpu很高 nginx占用内存_Nginx_08


启动成功后:

nginx 占用cpu很高 nginx占用内存_Nginx_09

负载均衡

一、简介

nginx 占用cpu很高 nginx占用内存_Nginx_10



  后台服务器组成了一个服务器集群(多台服务器). 有中间服务器(nginx)接受到请求分发给不同的服务器后台. 该nginx就是一个负载均衡服务器.

优点:

  分散后台服务器的压力

  自动去掉挂掉的后台服务器

  缓存后台服务器响应内容


负载均衡的分配策略

  nginx 的 upstream目前支持 4 种方式的分配

  1)、轮询(默认)

      每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

  2)、weight

     指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

  2)、ip_hash

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

  3)、fair(第三方)

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

  4)、url_hash(第三方)

    按访问url的hash结果来分配请求,使每个url定向到同一

    个后端服务器,后端服务器为缓存时比较有效。

负载均衡配置

在http节点里添加:

  upstream myServer {

    server 127.0.0.1:9090 down;

    server 127.0.0.1:8080 weight=2;

    server 127.0.0.1:6060;

    server 127.0.0.1:7070 backup;

    [ip_hash | fair | url_hash]

  }

在需要使用负载的server节点下添加

  proxy_pass http://myServer;

  upstream 每个设备的状态:

  down 表示单前的server暂时不参与负载

  weight 默认为1.weight越大,负载的权重就越大。

  max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回  proxy_next_upstream 模块定义的错误

  fail_timeout:max_fails 次失败后,暂停的时间。

  backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

nginx 占用cpu很高 nginx占用内存_nginx 占用cpu很高_11


nginx 占用cpu很高 nginx占用内存_html_12


nginx 占用cpu很高 nginx占用内存_html_13


负载均衡服务器搭建完毕,置于怎么验证,可以建立一个简单的web项目,打印出访问日志,tomcat都部署t同一个web