nginx學習

nginx
    nginx的核心配置項:
        Core functionality:核心配置,Glob配置段
            daemon:是否開啟為守護進程
                daemon {on|off}:默認為開啟,只能使用在main段
            error_log:錯誤日志定義,有存放路徑與日志等級,這個指令可以使用在main, http, mail, stream, server, location段中
                error_log file [level]:file就是錯誤日志位置了,面level級別從高到低分別為debug,info,notice,warn,error,crit,alert,emerg.
            include:這個指令主要是將其它獨立配置文件引用到主配置文件,使主配置文件生效,這個指令可以配置在任意位置,核心為調用其它文件
                include {file|mask}:調用獨立配置文件或者mime單位類型文件,示例如下
                    include mime.type;調用主配置文件所在目錄下的mime.type文件,這些文件類型為nginx可識別的類型
                    include vhosts/.conf:調用主配置文件所在的目錄一睥vhosts目錄下的所有以.conf結尾的文件
            load_module:這個指令為模塊自由裝卸載的控制指令
                load_module file:file就是模塊存放位置,可配置位置為mian
            lock_file:鎖文件存放位置
                lock_file file:file就是文件存放位置,默認為logs/nginx.lock,可以配置位置為main
            master_process {on|off}:是否開啟master進程,默認為開啟,可以配置在main段
            multi_accept {on|off}:同一時間是否只接收一個連接,如果開啟,那么同一時間將接收所有新的請求,默認為關閉,只能在events段配置此指令
            pid file:pid文件存放位置,file為文件位置,默認位置為主配置文件目錄下的nginx.pid,這個指令只可以配置在main段
            thread_pool NAME threads=NUMBER [max_queue=NUM]:定義nginx運行線程池
            use method:指明并發連接請求的處理法則,默認為epoll,配置位置為events
            user USER[GROUP]:配置啟動nginx的worker進程的用戶,默認用戶,用戶組為nobody,noboduy,配置位置為main段
            worker_connections NUM:一個worker最大可以進行多少個連接,默認為512,配置位置為events
            worker_cpu_affinity CPUMASK…:配置worker對應的CPU,主要是一個CPU對應一個worker時配置,可以提高nginx性能,配置位置main
                worker_cpu_affinity 0001 0010 0100 1000;有四個CPU,每一個CPU對就一個worker,如果此選項的值為auto,那么就是自適應
            worker_priority NUM:此指令主要是對worker進程的優先級進行配置,默認優先級為0,這個優先級為nice優先級,范圍為-20到20之間,越小越優先
            worker_processes {NUM|auto}:配置nginx進程啟動多少個worker進程,這個worker進程主要是跟cpu核心數有關,一般情況下一核對應下人worker進程,這個指令默認值為0,配置位置為main

    nginx的部分模塊說明:
        ngx_http_core_module模塊:nginx核心模塊,核心的不能再核心了
            aio {on|off}:是否開啟異步IO讀寫,默認為關閉,配置位置為http,server,location,但是這個指令只有在nginx的0.8.11版本才有效
            alias PATH:別名,假如訪問一個指定的url時,這個url可能并不存在,這時可以進行別名配置,使其訪問一個存在在url,配置位置為location
            client_boby_timeout TIME:讀取客戶端發送請求報文的body超時時長,這個超長是兩個操作時間差的時長,默認為60s,配置位置為http,server,location
            client_header_timeout TIME:讀取客戶端發送請求報文的header超時時長,同上
            client_header_bufer_size SIZE:用于接收客戶端的body部分的緩沖區大小,默認為1K,配置位置http,server
            client_body_temp_path PATH [level1 [level2 [level3 …]]]:配置用于存儲客戶端請求報文的body部分的臨時存儲路徑,及其子目錄結構和數量
                client_body_temp_path /tmp/nginx/body_cache 1 2 2;   //body緩沖目錄為/temp/nginx/body_cache,緩沖級別為1 2 2,這里的數字為幾個十六進制數組成,1代表1外十六進制組面,也就是會生成十六個目錄,后面的二就是兩個十六進制組成,也就是會生成16
16種方法,也就是創建256個目錄,依此類推,一級一級,不需要再遍歷所有的文件,可以提高nginx效率
            client_max_body_size SIZE:客戶端的body最大值,在抓包中的顯示為”Content-Length”,默認值為1M,配置位置為1M,配置位置為http,server
            default_type MIME-TYPE:配置識別的默認mime類型,默認為text/plain,配置位置為http,server,location
            directio {SIZE|off}:這個指令與aio指令配合使用,在Linux主機上開啟O_DIRECT標記,此處意味文件大于給定的大小時使用,例如directio 4m;或者是directio off
            error_page CODE [=RESPONSE] uri;重定向錯誤頁面,配置位置http,server,location,在location中的if語句中
                error_page 404 =200 /xxx.xxx;    //將錯誤的code改為200,并將頁面定向到/xxx.xxx
            etag {on|off}:是否開啟etag頭信息,默認為開啟,配置位置為http,server,location
            keepalive_disable {none|BROWSER}:定義在那些瀏覽器中不使用長連接,默認為msie6,配置位置為http,server,location
            keepalive_requests NUMBER:在長連接時請求的資源最大數量,默認100,配置位置為http,server,location
            keepalive_timeout {TIME|header_time}:長連接超時時長,默認為75s,配置位置為http,server,location
            limit_rate RATE:限制給客戶端響應的傳輸頻率,單位是bytes/second,0表示無限制
            limit_except METHOD1…{…}:限制對應的請求方法之外的其它方法的允許與不允許操作,配置位置location
                limit_except GET HEAD {   //對GET與HEAD進行操作,允許,其它的不允許 
                    allow 192.168.1.0/32;
                    deny all;
                }
            listen IP[:PORT]…..:定義監聽IP端口等,還有什么代理,ssl等,配置位置server
            location [=|^~|~|~] uri {…}:根據請求uri進行配置,使其訪問特有的資源,配置位置server,location
                符號匹配優先級:= > 無符號 > ^~ > ~|~

            open_file_cache off:關閉文件緩沖,這是默認狀態,open_file_配置位置http,server,location
            open_file_cacht max=N [inactive=TIME]:N為可緩存的緩存項上限,達到上限后會使用LRU算法實現緩存管理,inactive=TIME為緩沖項的非活動時長,在此處指定的時長內被命中或者未被命中的次數少于open_file_chche_min_user指令指定的次數的緩存即為非活動項;
                nginx的緩沖信息:文件大小,描述符,mtime,目錄結構,文件權限
            open_file_cache_errors {on|off}:是否緩存查找時發生錯誤的文件一類信息
            open_file_chche_valid TIME:緩沖項有效性檢查頻率,默認為60s;
            open_file_cache_min_user NUMBER:在open_file_cache的inactive參數指定時長內,至少應該被命中多少次方為活動項
            root PATH:網頁文件的存放位置,配置位置為http,server,location,location中的if語句
            send_timeout TIME:對于客戶端的請求進行響應的時候的超時時間,僅對兩個操作之間的時間差進行判斷
            sendfile {on|off}:是否啟用sendfile的功能,默認關閉,配置位置http,server,location
            server_name HOSTNAME/FQDN:定義服務器的域名或者主機名,配置位置為server
            try_file file … uri:以指定的順序檢查文件,并使用第一個找到的文件進行處理,該處理在當前上下文中執行,文件路徑是根據根與別名進行定義的
            try_file file1 file2 … =code:如里在指定順序中沒有找到資源,那么返回一個代碼
            type {…}:響應的MIME類型,可以有多個,配置位置http,server,location
        ngx_http_auth_basic_module:nginx的basic的認證
            auth_basic:在認證的時候輸出的提示字符串
                auth_basic “closed site”;
            auth_basic_user_file:指定用戶認證的認證文件,nginx沒有獨立的生成認證文件的命令,需要使用httpd-tools包中的htpasswd進行生成
                htpasswd -c -m FILE   //只有在生成文件時才使用-c,如果不生成文件是不能使用-c的,會將原有的文件覆蓋
        ngx_http_fastcgi_module:定義fcgi協議的模塊
            fastcgi_pass IP/HOSTNAME:能往fcgi的IP或者HOSTNAME,也可以UNIX套接字文件
                fastcgi_pass 192.168.10.2:9000    //通過IP,端口進行訪問后端fcgi程序
                fastcgi_pass unix:/tmp/fastcgi.socket    //通過unix套接字訪問后端fcgi程序
            fastcgi_index NAME:訪問fcgi主頁的名字
                fastcgi_index index.php;     //通過fcgi訪問的主頁為index.php
            fastcgi_param PAEAMETER VALUE [if_not_empty]:將指定的參數傳遞給后端的fcgi,當沒有定義此值時,會繼承上一級發送的內容
                fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
                fastcgi_param QUERY_STRING $query_string;
                fastcgi_param REDIRECT_STATUS 200;
            fastcgi_cache_path PATH [level1 [level2 [level3…]]]:指定緩沖路徑與緩沖級別
                fastcgi_cache_path /data/fcgicache 1 1 1;    //定義一個緩沖目錄與三層緩沖
            fastcgi_cache {zone|off}:定義一段內存空間為緩沖空間,默認此指令為關閉
            fastcgi_cache_key STRING:定義用作緩沖項的key的字符串
            fastcgi_cache_methods GET |HEAD |POST …:為那些請求類型使用緩沖
            fastcgi_cache_min_uses NUMBER:定義緩沖項在緩沖空間內,非活動時間內至少要被訪問多少次才可以被認作為活動的緩沖
            fastcgi_cache_valid [code …] time:不同的響應碼對就的緩沖時長
                fastcgi_cache_valid 301 1h;    //臨時重定向的緩沖時間為1個小時
            fastcgi_keep_conn {on|off}:相當于是否開啟fastcgi的長連接,也可以對nginx有一定的優化效果
        ngx_http_gzip_module模塊:進行流量壓縮的模塊
            gzip            on;     //開啟gzip壓縮
            gzip_min_length 1000;     //最小為1000字節的內容才會進行壓縮
            gzip_proxied    expired no-cache no-store private auth;    //定義nginx在做為代理服務器時,在收到代理服務器的響應時,對那些報文進行壓縮
            gzip_types      text/plain application/xml;    //定義nginx壓縮的文件類型有那些
        ngx_http_index_module模塊:可以指定響應的首頁文件的類型
            index index.php index.html index.htm
        ngx_http_proxy_modeule模塊:nginx的代理功能
            proxy_pass URL:代理的協議,主機與資源
            proxy_set_header field value:發往后端主機的請求首部的值
            proxy_cache_path PATH [levels=levels] …..:定義緩沖位置,緩沖級別,內存空間域等內容
                proxy_cache_path /data/proxycache levels=1:1:1 key_zone=proxy_cache:10m;   //定義一個代理緩沖,緩沖文件位置為/data/proxycache,緩沖級別為1:1:1三個級別,內存空間域名與大小為proxycache:10m
            proxy_cache {zone|off}:是否啟內存區域緩沖
            proxy_cache_key string:緩沖中用于”鍵”的內容
            proxy_cache_valid [code …] time;不同的響應碼對應的緩沖時間的不同
            proxy_cache_use_stale:在那些情況下使用過時的緩沖
            proxy_cache_methods GET | HEAD | POST …;對那些類型的請求進行緩沖
            proxy_hide_header field:對代理響應的頭信息不予發送給客戶端,如Date,Server,X-Pad,X-Accel這些信息,默認情況下都是不會發送給客戶端的,如果想要傳遞某些信息,可以配置proxy_pass_header
            proxy_connect_timeout TIME:定義與代理服務器連接的超時時間,這個值最大不應該超過75s,默認為60s
        ngx_http_referer_module模塊:阻止對無效站點的訪問
            valid_referers none | blocked | server_names | string …;定義referer的合法可用值
                none:請求報文沒有可用的referer首部
                blocked:請求報文的referer首部沒有可用的值
                server_names:參數,其可以有值作為主機名或主機名模式
                if ($invalid_referers) {    //說明響應在定義的valid_referers之外的值時返回的代碼
                    return 403;
                }
        ngx_http_rewrite_module模塊:url重寫模塊
            break:當達到一定的條件時,中斷此模塊
            return:反回特定的url,類同于error_log指令
            rewrite regex replacement [flag]:重寫一個url
                last:如果已經匹配,就不再對同一隊列的rewrite進行遍歷,不間斷的進行循環,所以,如果其它的隊列中也含有last,有可能會變為圓環地址
                break:同上進行,但是只進行一次循環,如果,本隊列匹配到url,那么就中斷了,不再繼續進循環了
                redirect:重寫完成以后生成新的url,再發送給客戶端,由客戶端重新進行訪問,這個是臨時重定向
                permanent:同上為永久重定向
            rewrite_log {on|off}:重寫是否保存日志  
            set $variable value:定義變量,variable為變量名,value變值 
            if (condition){body}:
                condition:比較字符
                    =|!=:對比變量與字符串是否相等
                    ~|!~:是否屬于
                    ~
|!~*:是否屬于,并且不區分大小寫
                    -f|!-f:是否是一個文件
                    -d|!-d:是否是一具目錄
                    -e|!-e:文件是否存在
                    -x|!-x:是否可以執行
        ngx_http_ssl_module模塊:進行流量加密的模塊
            ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;      //加密協議,當然還有SSLv2,SSLv3….
            ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;指定啟用的密碼,密碼以openssl庫所指定
            ssl_certificate     /usr/local/nginx/conf/cert.pem;證書存放位置
            ssl_certificate_key /usr/local/nginx/conf/cert.key;私鑰存放位置
            ssl_session_cache   shared:SSL:10m;ssl會話緩沖類型與大小
            ssl_session_timeout 10m;ssl響應會話超時時間,默認為5分鐘
        ngx_http_stub_status_module模塊:當前nginx的狀態
            location /basic_status {
                stub_status;
            }

    提供兩個虛擬主機,實現LNMP,使用不同的方法建設其后端php后進行壓測,對比其性能,后端使用np,ap的方法,壓測內容為wordpress,然后建立https

        拓撲圖:

    nginx學習

            見nginx試驗
   在nginx_proxy端進行配置
       安裝nginx程序,如果使用yum源安裝nginx程序,那么需要使用epel源
           yum -y install nginx 
       進入主配置文件:
           注釋server配置段,并按照include指令所指定的目錄創建一個存放主機的文件
               vim /etc/nginx/conf.d/vhost.conf
               在配置文件中添加如下內容
                   server {
   listen :80;
   #root /data/www;
   location / {
       proxy_pass http://172.18.250.37:80;
   }
}
       啟動服務:
                systemctl start nginx 
   在ap(就是httpd+php)端配置
            安裝ap
                yum -y install httpd php php-mysql
            vim /etc/httpd/conf/httpd.conf
                DirectoryIndex index.php index.html index.html.var
            新建一個php網頁
                vim /var/www/html/index.php
                    <?php
                        phpinfo();
                    ?>
            啟動服務:
                service httpd start
        在client端進行壓測
            進行壓測:
                ab -n 2000 -c 500 http://172.18.252.96:80/index.php
                返回值:
                    Time per request:       3222.389 [ms] (mean)
                    Time per request:       6.445 [ms] (mean, across all concurrent requests)
        將ap修改為np,進行壓測
            卸載ap
                yum -y remove httpd php
            安裝np
                yum -y install nginx php-fpm
            配置php-fpm主配置文件
                vim /etc/php-fpm.d/www.conf
                將監聽端口修改為如下配置
                    listen = 0.0.0.0:9000
            配置nginx的配置文件
                vim /etc/nginx/conf.d/virtual.conf
                修改配置如下
                    將此中的server注釋去掉,server配置如下
                        server {
   listen       8080;
   #listen       somename:8080;
   #server_name  somename  alias  another.alias;
   server_name www.a.com;
   root   /data/www;
   index  index.php index.html index.htm;

   location ~ .php$ {
       fastcgi_pass  localhost:9000;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
   }
}
修改proxy服務器的proxy_pass指令端口為8080;
            進行壓力測試:
                ab -n 2000 -c 500 http://172.18.252.96/index.php
                設備網卡巖了,說明這個性能還不如ap,重啟,重新測試
                    Time per request:       890.024 [ms] (mean)
                    Time per request:       1.780 [ms] (mean, across all concurrent requests)
                這個np還是比ap強的,強了一倍不止啊,很給力啊
        配置wordpress與pam
            配置mysql:
                安裝mysql
                    yum -y install mariadb-server
                啟動mysql
                    systemctl start mariadb
                配置數據庫
                    mysql -u root
                    create database wordpress;
                    grant all privileges on *.
to test@’localhost’ identified by ‘test’;
                    grant all privileges on . to test@’127.0.0.1′ identified by ‘test’;
                    grant all privileges on . to test@’%’ identified by ‘test’;
                    \q
            將wordpress解壓到網頁根目錄
                修改權限
                    chmod 777 -R wordpress
                    訪問即可
                進行壓測:
                    ab -n 2000 -c 500 http://172.18.252.96/wordpress
                這個很快,比index.php還快,不知道為什么
            配置一個url重寫方便點
                在np上的/etc/nginx/conf.d/vhost.conf中添加如下內容:
                    location / {
                        rewrite ^([/^]+/) $1/wordpress break;   //這樣寫的目地是,不知道為什么,IP后面老是出現兩個’/’,所以這里就匹配一個’/’就好了
                    }
        在proxy上配置一個CA
            cd /etc/pki/CA/
            生成CA的私鑰:
                openssl genrsa -out private/cakey.pem 2048
            生成自簽證書
                openssl req -x509 -new -key private/cakey.pem -out cacert.pem -days 3650
            生成文件
                touch index.txt serial
                echo 01 > serial 
            CA配置完成
        生成nginx的CA
            cd /etc/nginx/conf.d/   
            openssl genrsa -out nginx.key 1024 
            openssl req -new -key nginx.key -out nginx.pem -days 365
        給CA進行確認
            openssl ca -in nginx.pem -out nginx.crt -days 365
        配置nginxssl:
                server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  www.tom.com;
       ssl_certificate “/etc/nginx/conf.d/nginx.crt”;
       ssl_certificate_key “/etc/nginx/conf.d/nginx.key”;
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_ciphers HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers on;
       location / {
               proxy_pass http://172.18.250.37:80;
       }
       error_page 404 /404.html;
           location = /40x.html {
       }
       error_page 500 502 503 504 /50x.html;
           location = /50x.html {
       }
   }
        同理,配置php服務器上的ssl使其成為全站ssl,如果只有是部分ssl,那么php上需要做重寫,不然訪問不了https,需要將https重寫成http后就可以了

原創文章,作者:gaomei,如若轉載,請注明出處:http://www.www58058.com/75071

(0)
gaomeigaomei
上一篇 2017-05-08
下一篇 2017-05-08

相關推薦

  • N25-第九周

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash #統計shell及非shell個數 #author:dodo declare -i loginnum=0 declare -i nologinnum=0 while…

    Linux干貨 2017-05-27
  • 磁盤配額

        磁盤配額可以限制指定賬戶能夠使用的磁盤空間,這樣可以避免因某個用戶的過度使用磁盤空間造成其他用戶無法正常工作甚至影響系統運行。在服務器管理中此功能非常重要,但對單機用戶來說意義不大。 配置配額系統:     綜述:     &nbs…

    Linux干貨 2016-09-06
  • Shell腳本編程—函數

    函數:     把一段獨立功能的代碼當作一個整體,并命名一個名字;命名的代碼段,此即為函數     由若干條shell命令組成的語句塊,實現代碼重用和模式化編程 函數的作用:     在某些場景下,我們可以將獨立功能的一段代碼定義為一個函數…

    Linux干貨 2016-08-24
  • 磁盤管理

    linux的哲學思想:一切皆文件; 設備類型: 塊(block):隨機訪問,交換數據單位是“塊”; 字符(character):線性訪問,數據交換單位是“字符”; 設備文件:FHS /dev     設備文件:關聯至設備驅動程序;設備的訪問入口;       &nbsp…

    Linux干貨 2016-08-30
  • TCP三次握手和四次揮手

    TCP三次握手 有兩臺機器,A是客戶端(主動發起請求的人),B是服務器端(被動接受請求的人),客戶端A剛開始沒有人和他通訊,所以客戶端A的狀態是CLOSDE(關閉的),服務器端B剛開始的狀態也是CLOSDE,但是總有人去訪問他,所以服務器端B開啟了LISTEN(收聽)狀態。 (1)假設A機器想鏈接B機器了,他就會向B機器發送一個建立鏈接的請求,這個建立鏈接請…

    2017-08-31
  • N24_jerry 第十二周作業

    1、請描述一次完整的http請求處理過程; 簡介 一次完整的HTTP請求過程從TCP三次握手建立連接成功后開始,客戶端按照指定的格式開始向服務端發送HTTP請求,服務端接收請求后,解析HTTP請求,處理完業務邏輯,最后返回一個HTTP的響應給客戶端,HTTP的響應內容同樣有標準的格式。無論是什么客戶端或者是什么服務端,大家只要按照HTTP的協議標準…

    Linux干貨 2017-03-22
欧美性久久久久