Nginx -one:
基本了解
Nginx搭建
用户认证
基于域名的虚拟主机
安全的ssl虚拟主机
基本了解
常见的web服务器比较:
    Unix和Linux平台:Apache Nginx tengine Tomcat Lighttpd
    Windows:IIs(Internet information server)
    Tengine 淘宝引擎 优化了Nginx 
    server:"tarena" 请求头文件中显示的版本 改过的 
            不要暴露自己的服务器软件及版本容易被×××。
网页类型:
    php python: apache nginx tengine lighttpd
    java :      tomcat IBM WebSphere Jboss
Nginx搭建:
1、安装:
yum -y install gcc pcre-devel openssl-devel 
    pcre-devel  redhat中以-devel结束的包通常是代表依赖包 这个是支持兼容Perl语言的正则  
    redhat中@anaconda/7.4通常是代表这个已经装上了没有这个的代表是在Yum中而没有装。
useradd -s /sbin/nologin nginx
tar  -xf   nginx-1.10.3.tar.gz  
cd  nginx-1.10.3
./configure:
 --prefix=/usr/local/nginx   \                //指定安装路径
> --user=nginx   \                            //指定用户
> --group=nginx  \                            //指定组
以普通用户来启动服务!更安全 被×××以后也只会获得普通用户权限而且是/sbin/nologin 不能登陆的用户。 
> --with-http_ssl_module                        //开启SSL加密功能
    模块话设计:尽可能多的人的需求
    100个功能  相互独立 可以选择需求功能安装  设计为100个模块。
    不知道模块就可以安默认
    /.configure时就相当于windows下装软件时选择功能后下一步下一步。可以选路径模块 功能      
    第一次装的时候可以直接confiure 它会告诉你有哪些依赖包你没装。gcc 没有就装gcc
    什么没有装什么。
make && make install
    make 把src的c语言的转为二进制的格式 生成一个程序 但是在家目录下
    make install 把make生成的程序拷贝到可执行路径下 等等操作。
nginx -V    能看到别人安装软件时是怎么confgiure的了可以照着安装。
    nginx version: nginx/1.10.3
    configure arguments: --prefix=/usr/local/nginx 
    --user=nginx --group=nginx --with-http_ssl_module
ln -s /usr/local/nginx/sbin/nginx /sbin/    
    做了个快捷方式到可执行程序路径下,可以直接nginx后Tab了方便管理服务
    ll /sbin/nginx 可以看到软链接情况。
nginx                       启动服务
/usr/local/nginx/sbin/nginx -s reload        //重新加载配置文件
    必须在服务开启时才能用。不关服务时重读配置文件!!! 不会影响别人的服务访问。
 setenforce 0
firewall-cmd --set-default-zone=trusted
curl http://127.0.0.1    访问测试
2、平滑升级:
cd nginx-1.12.2
./configure  
    > --prefix=/usr/local/nginx   \ 
    > --user=nginx   \ 
    > --group=nginx  \ 
    > --with-http_ssl_module
make        千万不要make install  这样就覆盖安装了,不是平滑升级了。
    conf  html  logs  都希望保留
mv /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginxold
    sbin  把这个下面的程序升级。升级有风险最好备份一下老的程序nginxold 想用老的就用nginxold。
cp objs/nginx  /usr/local/nginx/sbin/
    objs里放的是make出来的新的可执行绿色程序。
make upgrade  杀死老程序 重新启动升级后的新程序。
make upgrade 失败了就
netstat -natulp | egrep nginx   看进程号 7035
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      7035/nginx
kill 7035  或者killall nginx  再启动服务即可
nginx 
nginx -V
nginx version: nginx/1.12.2
程序、进程、线程:
    程序program (下载到硬盘的)   很多是多进程的程序 可以同时访问多个页面(并发高些,占内存高)
    进程process(内存里启动的程序,进程之间是独立的不会相互影响)
    线程thread (进程下面再启动的加线程  更省内存一些  进程挂了下面的8个线程全挂了  进程线程结合着用
    pstree  
    ├─polkitd───5*[{polkitd}]  这个进程中启动了5个线程。
    worker_processes 1; 双击时启动1个进程。
用户认证:
vim /usr/local/nginx/conf/nginx.conf    (配置文件框架)
             <VirtualHost  *:80>
            ServerName   www0.example.com
            DocumentRoot  /var/www/nsd01
              </VirtualHost>    nginx的虚拟主机和Apache的虚拟主机类似    
    全局配置
        (进程所有者;启动进程数量;日志文件;pid文件;单进程最大并发量;...)
    http{               配置容器
        server{         虚拟主机
        listen 80;
        server_name localhost;
        root html;      发布目录(位置)
         location / {   
            root   html;
            index  index.html index.htm;
        }
           }
           server{
        listen 80;
        server_name www.xyz.com;
        root www;
           }
    }
server中添加:
    auth_basic "Input Password:";                        //认证提示符
    auth_basic_user_file "/usr/local/nginx/pass";        //认证密码文件 怎么敲都没有!要在这个路径下建一样的文件  写上密码和用户名。
install  httpd-tools
htpasswd -c /usr/local/nginx/pass tom  第一个用户要-c
cat /usr/local/nginx/pass
    tom:$apr1$0fBOo/ZS$lIw/0axG5oQ7kELEb5D1K1
htpasswd /usr/local/nginx/pass lisi     第二个用户不要c
    删除用户就直接vim进去删除。
nginx -s reload
firefox http://192.168.4.5 
基于域名的virtualhost
理论概述:
    用户没用域名直接用IP的话出来的页面为配置文件中的第一个server的页面  
    容器配置中 域名 IP 端口 总有一个不一样,哪个不一样就是基于哪个的虚拟主机。
    ctrl + v 选了以后再x就可以批量去注释了。
    nginx 的配置文件  /usr/local/nginx/conf/nginx.conf
    nginx 的(root)默认网页根目录 /usr/local/nginx/html 
改配置:
第一个sever
    server_name  www.a.com;
        location:root   html;
第二个sever
    server_name  www.b.com; 
        location:root   www;   
mkdir /usr/local/nginx/www
echo "www" > /usr/local/nginx/www/index.html
nginx -s reload
vim /etc/hosts
    192.168.4.5    www.a.com  www.b.com
firefox http://www.a.com
firefox http://www.b.com
安全的ssl虚拟主机
理论概述:
    ssl 加密网站部署
    http协议是明文协议
    https协议是加密协议
    对称加密
    加123 解123 同一把钥匙
    非对称
    加123 解dkfgjhdlk (随机) 无任何规律  不是同一把钥匙。
    md5: 网上的所有妙传都是基于这个原理  压根都没传  核对md5 一样的就不用传了。
    鉴黄师 删除的是md5 相关的所有文件 就把这个视频都在网上删除了。
    校验文件内容是否有变化  网站上东西时会提供md5码 用于检验下载文件是否完整。
    不安全 被破解了。 山东大学 王小东 
    码是用内容来决定的  内容不变码不变 只于文件内容有关。
    非对称加密:
    浏览器自动下载了公钥 浏览器自动用公钥加密了数据 网站自动用私钥来解密 
    openssl req -new -x509 -key cert.key > cert.pem      //生成证书
          请求生成  一个新的证书 格式为509 钥匙是刚刚生成的私钥匙。  
    第一个必须两个字母其他的随便。
实验:
    生成私钥与证书 
        cd /usr/local/nginx/conf
        openssl genrsa > cert.key   
        openssl req -new -x509 -key cert.key > cert.pem 
    改Nginx配置
        vim  /usr/local/nginx/conf/nginx.conf
            server里location外:
            listen       443 ssl;
                server_name            www.c.com;
                ssl_certificate      cert.pem;         #这里是证书文件
                ssl_certificate_key  cert.key;         #这里是私钥文件
        nginx -s reload
        vim /etc/hosts
            192.168.4.5    www.c.com  www.a.com   www.b.com
        firefox https://www.c.com
nginx-two:
LNMP平台搭建及地址重写:
主流端企业网站平台之一:LNMP(LAMP)
    lnmp:linux nginx (mariadb | mysql) (php | python | perl )新项目多数是这个
    lamp:linux apache(mariadb | mysql) (php | python | perl )老项目用的这个能不动就不动
    动态页面:java php  python  perl ruby  
    静态页面:html
一、lnmp平台搭建:
安装步骤:按照lnmp这几个字母的顺序进行安装避免出错。        
1安装源码包的依赖包 
    yum -y install gcc openssl-devel pcre-devel(地址重写要这个包) zlib-devel
2安装完成nginx并启服务  
    cd nginx-1.12.2/        进入解压后的位置
    useradd -s /sbin/nolgin/ nginx 创建一个不能登录端用户
    ./configure --help  模块不记得了就help
    ./configure --prefix=/usr/local/nginx/ --user=nginx --group=nginx 
    --with-http_ssl_module --with-stream --with-http_stub_status_module 
    --without-http_autoindex_module --without-http_ssi_module 
        --with-http_ssl_module          加密模块 
        --with-stream                   代理模块    
        --with-http_stub_status_module      查看nginx状态模块
        --without-http_autoindex_module 禁用文件索引模块
        --without-http_ssi_module       
            以上是常用模块可以根据需要自行选择
     make && make install
    ln -s /usr/local/nginx/sbin/nginx /sbin/
    nginx
    ss -natulp |grep 80
3安装mariadb(客户端 启动服务) mariadb-server(服务端 提供mysql命名) mariadb-devel(依赖包)
        如果是mysql就安装mysql
    yum -y install  mariadb  mariadb-server  mariadb-devel
    安装nosql数据库
    yum -y install memcached    
4安装php(解释器) php-mysql(调用mariadb数据库的模块)
     php-fpm  php-pecl-memcache  (调用memcache数据库的模块)
     cd php_scripts/
     yum -y install  php  php-mysql
     yum -y install php-pecl-memcache
     yum -y install php-fpm-5.4.16-42.el7.x86_64.rpm
5启服务和关防火墙
    服务:nginx mariadb php-fpm memcached   
    nginx
    systemctl restart mariadb
    systemctl enable mariadb
    systemctl restart php-fpm
    systemctl enable php-fpm
    systemctl restart memcached.service 
    systemctl enable memcached
    setenforce 0
    firewall-cmd --set-default-zone=trusted
6修改配置文件使能够访问php动态网站(动静分离)
    vim /usr/local/nginx/conf/nginx.conf   //nginx配置文件
            #location 位置nginx 让用户进入
            #nginx 做判断静态或动态  静态直接给  动态要交给php解释器
            #location匹配用户地址栏
            #同个server下可以多个location
            #匹配及停止,类似if elif else的判断
    location / {            #/的优先级最低什么都找不着就匹配根
            root   html;
            index  index.php  index.html   index.htm; 
                    #设置默认首页为index.php(只写域名或IP时)
        }
     location  ~  \.php$  {     #nginx支持正则 ~匹配。类似awk的~号匹配  (帮用户找php)
            root           html;
            fastcgi_pass   127.0.0.1:9000; //找到php交给9000端口解释
            fastcgi_index  index.php;
           #fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi.conf;    //fastcgi.conf 一堆环境变量
        }
            #改错了可以cp nginx.conf.default nginx.conf  还原配置文件
     vim /etc/php-fpm.d/www.conf        //php配置文件  默认不用修改
        [www]
        listen = 127.0.0.1:9000            //PHP端口号
        pm.max_children = 32                //php是多进程的;最大进程数量
        pm.start_servers = 15                //最小进程数量
        pm.min_spare_servers = 5            //最少需要几个空闲着的进程   
                                随时待命一旦小于5个就自动再开启了
        pm.max_spare_servers = 32            //最多允许几个进程处于空闲状态
7验证结果:
    cp mem.php  /usr/local/nginx/html
    curl 192.168.2.111/mem.php (结果为test)
几种常见排错:
三个常用日志:
/usr/local/nginx/logs/access.log    Nginx的默认访问日志文件
/usr/local/nginx/logs/error.log Nginx的默认错误日志文件  
/var/log/php-fpm/www-error.log      PHP默认错误日志文件
    空白(页面写错了 但是第一个日志没有报错  证明nginx没有错,
              页面给你了,但是页面是空。直接看php-fpm服务的报错!!
    下载  (没做动态分离)
    an Error  (php没启动)
    配置文件改错 最容易发现,因为服务都启不来。
tailf  /usr/local/nginx/logs/error.log  弄到空白处 再访问test.php  最后几行一定时相关日志。 
二、地址重写:(需要依赖包pcre-devel)
语法格式:
    rewrite 旧地址 新地址 [选项]
所有访问a.html的请求,重定向到b.html;
location下加:
    rewrite /a.html  /b.html;       (地址栏没变)
    rewrite /a.html  /b.html  redirect;     (跳转地址栏)
所有访问192.168.4.5的80端口就把请求重定向至www.baidu.com;
server_name下加:    (注意空格)
    rewrite ^/(空格)http://www.baidu.com/;  在打开自己网站之前就跳转
        正则是匹配包含就算 访问4.5不管是啥都跳到tmooc。
所有访问192.168.4.5/下面子页面,重定向至www.baidu.com/下相同的页面;
server_name下加:    (注意空格)
    rewrite ^/(.*)$(空格)http://www.baidu.com/$1;   第一个$可有可无
        $1 与正则中的\1等效   就是把根目录下的.* 粘贴到tmooc的/下。
实现firefox与curl访问相同页面文件,返回不同的内容。
理论基础:
    不同浏览器访问相同页面,返回的页面的结果不同。  (手机浏览器和电脑浏览器页面不同)
    电脑:sina.com
    手机:sina.com  结果不同 按钮和功能不同。
    首先服务器要知道客户端的浏览器是什么。
关于变量$http_user_agent :
Nginx的默认访问日志文件为/usr/local/nginx/logs/access.log  这里能知道客户端的浏览器
    #log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      #‘$status $body_bytes_sent "$http_referer" ‘
                      #‘"$http_user_agent" "$http_x_forwarded_for"‘;
                                这些变量都是nginx的内置变量。
"$http_user_agent"可识别客户端的信息。
192.168.4.254 - - [26/May/2018:16:36:46 +0800] "GET /xixi HTTP/1.1" 302 161 "-" "Mozilla/5.0    
(X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
   通常企业会设计两套页面 手机和PC
    /usr/local/nginx/html/宽{a b c }html 默认是访问这个
    如果你是uc  手机  。。。就跳转
    rewrite /(.*) 
    /usr/local/nginx/html/andriod/窄{a b c} html  做个跳转 
最终结果:
server里,location外面加:
        if ($http_user_agent ~* firefox) {rewrite ^(.*)$ /firefox/$1;}  
            #if ($http_user_agent ~* firefox)等价于grep firefox "$http_user_agent" 
地址重写格式【总结】:
rewrite a c last(不再读其他rewrite) | break (不再读其他语句,结束请求 )
        匹配到了才会a跳到c才会执行last 或者break 不然相当于没写
        有点if的意思 if  a 再跳c  elif b 跳d。。。
rewrite b d     redirect    临时重定向
rewrite e f     permament   永久重定向
    redirect  permament 给蜘蛛看的 蜘蛛 :百度 搜狗 360.。。等搜索引擎。
卖鞋子的:
url:    www.jd.com/a  临时的就不动  如果是永久  就直接改数据库为www.jd.com/c让用户直接访问c  
    逗蜘蛛完可能被直接除名影响生意。
nginx-three:
nginx调度
web高可用
tcp/udp服务代理
nginx调优
nginx调度
web高可用:
负载均衡上面挂了直接转下面(类似备份功能)  带健康检查后面机子坏了转到另外一台。
普通的情况下,nginx代理没有压力的因为它只负责转发 不负责页面请求!
                      ——————web1        
        a            |  
          user————》proxy————    |
        b            |
                     ——————-web2        
nginx调度器算法:
            轮询算法:默认算法
        ip_hash算法:相同客户端访问相同服务器。
nginx实现web反向代理: 定义集群和调用集群
    部署实施后端Web服务器
    vim /usr/local/nginx/conf/nginx.conf
        定义集群: (后期调用)一个配置文件可以写n多个upsteam。web服务器有多少加多少。
            upstream webserver {
                server 192.168.2.111:80 weight=1 max_fails=1 fail_timeout=20;
                    //设置权重 :性能好的多承担。没改过默认都是1 各承担一次轮询一次。
                    3的话就是接收3次请求再交给别人。
                    //max_fails=1 连一次不通觉得连不上了就认为这个web服务器挂了。
                    //fail_timeout=30  挂了之后30秒之内不找你了。 每隔30秒就又去连一次,好了就继续轮询。
                server 192.168.2.222:80;
                server 192.168.2.101 down;
                    //人为判断标记为关机要很久才能修好 先使它不参与集群调度不去试它好没有,节省资源。
            }
                location / {
                proxy_pass http://webserver;    //调用集群,将请求转给后端web服务器
                root   html;    #这个要改掉,不改的话自己就是web服务器了不是代理服务器,到自己根下去给客户机找页面了。
                index  index.html index.htm;
            #rewrite /a.html /b.html redirect;
            }
    nginx -s reload 
    curl 192.168.4.5
        web1
    curl 192.168.4.5
        web1
    加上ip_hash算法:只需要在集群服务器前加上ip_hash;
            解决你输了账号密码登上服务器了,只是轮询算法的话,一刷新就会到另外一台服务器上去
            另外服务器没有你的账号密码信息的话就会让你重新登陆!
        upstream webserver {
                #通过ip_hash设置调度规则为:相同客户端访问相同服务器
            ip_hash;
            server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
            server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
        }   
    tips://最终的nginx反向代理web结果:ip哈希加轮询都要有!
tcp/udp服务代理:
需要--with-stream 
    四层调度,所有服务的代理,都是走tcp/ip协议 只是端口号不一样。
    代理不同的服务只需要服务的端口号不一样就可以了。
    可以实现只要能ping通的情况下家里就能连公司的服务器或数据库或web,不用管ip地址。 
    代理就是能访问平时访问不了的网站啊 所以不管是什么网段的能ping通代理服务器的ip就可以了。
    新技术出来找不到资料就找官网
                    ——————tcp/udp服务(ssh)        
    a              |    
      user————》proxy————       |
    b              |
                    ——————tcp/udp服务(ssh)
        使用nginx代理可以用192.168.4.100 ssh 192.168.2.222 就是可以连不同网段。
    源码安装Nginx软件--with-stream 
    启用Nginx服务,修改/usr/local/nginx/conf/nginx.conf配置文件
        stream {
                upstream backend {
                   server 192.168.2.100:22;            //后端SSH服务器的IP和端口
                   server 192.168.2.200:22;
                }
            server {
                listen 12345;                    //Nginx监听的端口
                proxy_connect_timeout 1s;
                proxy_timeout 3s;
                proxy_pass backend;
                    }
            }
    nginx -s reload
    [root@client ~]# ssh 192.168.4.5 -p 12345  //多次访问查看效果
nginx调优:
如果客户端访问服务器提示“Too many open files”如何解决
如何解决客户端访问头部信息过长的问题
如何让客户端浏览器缓存数据
如何自定义返回给客户端的404错误页面
如何查看服务器状态信息
开启gzip压缩功能,提高数据传输效率
环境准备:
    构建Nginx服务器并启动服务
解决客户端访问服务器提示“Too many open files”
储备知识:cat /proc/cpuinfo | grep process
        lscpu :双核双进程 假四核。   //查看cpu核心数
        ps aux | grep nginx    #两个进程在干活,work的数量。
        root      7404  0.0  0.1  45964  1136 ?        Ss   14:13   0:00 nginx: master process nginx
        nginx     7405  0.0  0.2  48500  2520 ?        S    14:13   0:00 nginx: worker process
        root      7535  0.0  0.0 112676   984 pts/0    R+   14:25   0:00 grep --color=auto nginx
    1、优化Nginx并发量
        http_load,webbeach,siege也是压力测试软件可以测试服务器压力,根据情况自行选择
    ab -n 2000 -c 2000 http://192.168.4.5/
            socket: Too many open files (24)  //提示打开文件数量过多
    vim /usr/local/nginx/conf/nginx.conf
        worker_processes  2;              //启动nginx时打开的进程默认为1;调成与CPU核心数量一致
        error_log  /var/log/nginx.error_log  info;  //定义日志文件级别为信息
        events {
        worker_connections 65535;        //每个worker最大并发连接数默认为1024
                        小了就被限制死了,大点可以达到它的最大值
                //最大并发量为两个相乘法   2*65535
        use epoll;
        }
     nginx -s reload
    2、调整系统本身限制:
        selinux 对最大打开文件数量有限制默认1024个。
        2000个人访问就要同时打开2000个页面给客户端很容易突破1024个。
            ulimit -a
            open files                      (-n) 1024
        软限制和硬限制之间普通用户可以自调 软限制(预设值)可以超硬限制不能超
    ulimit -Hn 100000                //设置硬限制(临时规则)
    ulimit -Sn 100000                //设置软限制(临时规则)
    vim /etc/security/limits.conf   #security安全性
        #用户或组    硬限制或软限制        需要限制的项目     限制的值   
        *               soft        nofile            100000
        *               hard        nofile            100000
    ab -n 2000 -c 2000 http://192.168.4.5/
解决客户端访问头部信息过长的问题
        414 Request-URI Too Large 缓存太小存不下发送过来的请求。
    优化前:
    vim lnmp_soft/buffer.sh     //写个测试头文件脚本
        #!/bin/bash
        URL=http://192.168.4.5/index.html
        for i in {1..500}
        do
            URL=${URL}/v$i=$i
                //第一次循环在初值后面加v1=1,二次加v2=2 类推;“=”无特殊意义!!
        done
        curl $URL            //经过500次循环后,生成一个长的URL地址栏
    ./buffer.sh
        <center><h1>414 Request-URI Too Large</h1></center>   //提示头部信息过大
    步骤:
    修改vim /usr/local/nginx/conf/nginx.conf
        http {
        client_header_buffer_size    1k;     //默认请求包头信息的缓存    
        large_client_header_buffers  4 4k;  //大请求包头部信息的缓存个数与容量(16k)
        .. ..       //先根据默认的分配,不够再根据large值分配    上班推荐值
        }
    nginx -s reload 
    ./buffer.sh 5000次好像还是不够-_-.
如何让客户端浏览器缓存数据
以Firefox浏览器为例,在Firefox地址栏内输入about:cache将显示Firefox浏览器的缓存信息
点击List Cache Entries可以查看详细信息。
    浏览器缓存(只适合静态数据图片视频音频)
    清空firefox本地缓存数据
    vim /usr/local/nginx/conf/nginx.conf    
        #在虚拟主机server中加入
        location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
            expires        30d;      //定义客户端缓存时间为30天
            }   //如果匹配到地址栏为以上这些静态数据信息则浏览器过期时间为30天
    cp /usr/share/backgrounds/day.jpg /usr/local/nginx/html
    nginx -s reload
    firefox http://192.168.4.5/day.jpg
        在Firefox地址栏内输入about:cache,查看本地缓存数据,查看是否有图片以及过期时间是否正确。
自定义报错页面
常见http状态码   
    200 为新加载    一切正常
    300 重定向类
        301     永久重定向   
        302     临时重定向
        304 为已缓存
    400 用户方面的错误
        401 用户名或密码错误
        403 禁止访问(ip被禁)
        403 资源不可用,服务器上目录或文件权限设置导致
        404 页面不存在
        414 请求头部信息过长
    500 服务器内部错误
        502 bad getaway:一定是作了代理两个后台web都挂了就会报这个
    firefox http://192.168.4.5/xxxxx        //访问一个不存在的页面
    vim /usr/local/nginx/conf/nginx.conf
        server中location外    有默认模板 改改就行
         server {
             error_page  404      /40x.html;    //去掉注释改个页面
             error_page  403      /403x.html;
             error_page  414      /414x.html;   //想自定义的都可以
             error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
            }
    vim /usr/local/nginx/html/40x.html        //生成错误页面
    nginx -s reload
    firefox http://192.168.4.5/xxxxx        //访问一个不存在的页面
查看服务器状态信息   --with-http_stub_status_module
编译安装时使用--with-http_stub_status_module开启状态页面模块
vim /usr/local/nginx/conf/nginx.conf
location /status {
            stub_status on;
            allow ip;   ip 写自己的ip地址  自己能看服务器的状态
            deny all;
    }
curl  http://192.168.4.5/status
    Active connections:当前活动的连接数量。
        //server Accepts:已经接受客户端的连接总数量(握手的数量)连接就是通道。
            一次握手(连接)多次请求。建立连接之后不会立刻断开,可以多次请求。
            长时间(timeout)没有请求连接自动断开。
    Accepts:已经接受客户端的连接总数量。
    Handled:已经处理客户端的连接总数量(一般与accepts一致,除非服务器限制了连接数量)。
    Requests:客户端发送的请求数量。
    Reading:当前服务器正在读取客户端请求头的数量。
    Writing:当前服务器正在写响应信息的数量。
    Waiting:当前多少客户端在等待服务器的响应。
        //当前多少客户端在等待服务器的响应  (说明服务器肯定在卡)     
          适合写在脚本中,取出正在waiting的那行大于多少就邮件报警。
对页面进行压缩处理
目前所有浏览器支持解压动作 但是不支持rar
网页压缩通常为gzip
小文件不要压缩,会压缩得更大,最少1000字节。
linux下1-9选择数字月大效果越好压得越慢。
jpg,mp3,mp4,gif,等多媒体文件不要压缩,已经是压缩格式了。
压缩最适合文档,ape无损音乐。
cat /usr/local/nginx/conf/mime.types
    对什么类型压缩参考这个文件 有扩展名对应的类型码。
vim /usr/local/nginx/conf/nginx.conf
    http {
    .. ..
    gzip on;                            //开启压缩
    gzip_min_length 1000;                //小文件不压缩
    gzip_comp_level 4;                //压缩比率
    gzip_types text/plain text/css application/json 
        application/x-javascript text/xml application/xml application/xml+rss application/javascript;
                                //对特定文件压缩,类型参考mime.types
    .. ..
    }
服务器内存缓存:
如果需要处理大量静态文件,可以将文件缓存在内存,下次访问会更快。
vim /usr/local/nginx/conf/nginx.conf
http { 
open_file_cache  max=2000  inactive=20s;
//设置服务器最大缓存2000个文件句柄关掉20s之内没有请求的文件。
open_file_cache_valid    60s;
//有效缓存时间为60s  60秒后过期    
open_file_cache_min_uses 5;
// 最少被访问5次才会被认为是热点数据 才会缓存。
open_file_cache_errors   off;
} 
原文:http://blog.51cto.com/13659481/2130191