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 22:37
下一篇 2017-05-08 23:06

相關推薦

  • 我的學習宣言,不忘初心

    Dear 馬哥: 我相信選擇馬哥教育是正確的。 我將用洪荒之力的努力來成為一名合格的馬幫門徒! 一定不學中國足球。 敬禮 自學生 朱宏

    Linux干貨 2016-10-30
  • ansible-playbook組件解析及操作全解

    一、ansible-playbook介紹: ?playbook是由一個或多個”play”組成的列表。play的主要功能在于將事先歸為一組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上來將,所謂的task無法是調用ansible的一個module。將多個paly組織在一個playbook中,即可以讓他們聯通起來按事…

    2015-08-24
  • DHCP使用幫助

    bootp 想要通過tcp/ip模型進行網絡通信需要有一個ip地址,IP地址是屬于操作系統的,所以沒有操作系統就沒有ip 為了解決這種問題,有一種網卡可以不需要操作系統就能獲取到ip bootp:只有第一次是動態獲得,以后ip地址就是和mac地址綁定的,不能分配給其他主機 DHCP:DHCP是bootp的改進版,主要引入了租約的定義 DHCP也可以根據mac…

    Linux干貨 2016-11-11
  • 創建yum源及httpd源碼編譯

    創建yum源及源碼編譯httpd yum本身相比于rpm來說,能夠將有依賴的包文件一次性的安裝完成,是相當的方便的。 yum的服務器支持的幾種格式: http、https、ftp、file 1、yum基礎命令 1、yum命令 yum [options] [command] [package …] [options]: 基本不用 [command]: re…

    Linux干貨 2017-08-08
  • 實戰keepalived高可用集群解決方案

    Keepalived定義      Keepalived 是一個基于VRRP協議來實現的LVS服務高可用方案,可以利用其來避免單點故障。一個LVS服務會有2臺服務器運行Keepalived,一臺為主服務器(MASTER),一臺為備份服務器(BACKUP),但是對外表現為一個虛擬IP,主服務器會發送特定的消息給…

    2017-05-16
  • 測試

    3、查詢file.txt以abc結尾的行grep "abc$" file.txt4、刪除file.txt文件中的空行grep -v '^$' file.txt > file.txtsed '/^$/d' file.txt > file.txt(覆蓋重定向文件變為空該文件為空,但是追加時正常成功。…

    Linux干貨 2016-06-12
欧美性久久久久