1. 程式人生 > >高級運維之nginx

高級運維之nginx

net 搜索 LG 地址欄 scp epoll 編譯安裝 破解 過多

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
    [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;
}

高級運維之nginx