高级运维之nginx

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高级运维之nginx相关的知识,希望对你有一定的参考价值。

linux高级运维之nginx

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
    [[email protected] ~]# 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;
}

以上是关于高级运维之nginx的主要内容,如果未能解决你的问题,请参考以下文章

linux高级运维之Tomcat&&varnish

自动化运维之应用发布---应用下线

Python自动化运维之高级函数

Python自动化运维之高级函数

linux高级运维之×××,pssh工具使用

Linux运维之docker虚拟化部署nginx