Nginx配置進階

目錄

  • ngx_http_rewrite_module模塊

  • ngx_http_gzip_module模塊

  • ngx_http_fastcgi_module模塊

  • ngx_http_ssl_module模塊

  • ngx_http_referer_module模塊

ngx_http_rewrite_module模塊

將用戶某一次請求的URI當中的字符串是不是能夠被我們給出的regex所描述的模式所匹配,如果能,則替換為新的URL

1、rewrite

語法格式:rewrite regex replacement [flag] 
    Default: — 
    Context: server, location, if

將用戶請求的URI基于regex所描述的模式進行檢查,匹配到時將其替換為replacement指定的新的URI; 


注意:如果在同一級配置塊中存在多個rewrite規則,那么會自上而下逐個檢查;被某條件規則替換完成后,會重新一輪的替換檢查,因此,隱含有循環機制;[flag]所表示的標志位用于控制此循環機制; 


如果replacement是以http://或https://的絕對路徑開頭,則替換結果會直接以重定向返回給客戶端;

[flag]: 
    last:重寫完成后停止對當前URI在當前location中后續的其它重寫操作,而后對新的URI啟動新一輪重寫檢查;提前重啟新一輪循環;

    break:重寫完成后停止對當前URI在當前location中后續的其它重寫操作,而后直接跳轉至重寫規則配置塊之后的其它配置;結束循環;

    redirect:重寫完成后以臨時重定向方式直接返回重寫后生成的新URI給客戶端,由客戶端重新發起請求;不能以http://或https://開頭;

    permanent:重寫完成后以永久重定向方式直接返回重寫后生成的新URI給客戶端,由客戶端重新發起請求;

2、return

語法:return code [text]; 
    return code URL; 
    return URL; 
    Default: — 
    Context: server, location, if

停止處理并將指定的代碼返回給客戶端

3、rewrite_log

語法:rewrite_log on | off; 
    Default: rewrite_log off; 
    Context: http, server, location, if

是否開啟重寫日志

4、if

語法:if (condition) { … } 
    Default: — 
    Context: server, location

引入一個新的配置上下文 ;條件滿足時,執行配置塊中的配置指令;server, location;

condition: 
    比較操作符: 
        == 
        != 
        ~:模式匹配,區分字符大小寫; 
        ~*:模式匹配,不區分字符大小寫; 
        !~:模式不匹配,區分字符大小寫; 
        !~*:模式不匹配,不區分字符大小寫; 

    文件及目錄存在性判斷: 
        -e, !-e 
        -f, !-f 
        -d, !-d 
        -x, !-x

5、set

語法:set $variable value; 
    Default: — 
    Context: server, location, if

用戶自定義變量

6、break

語法:Syntax: break; 
    Default: — 
    Context: server, location, if

停止處理當前ngx_http_rewrite_module指令集。

簡單示例

W53JV@~]V{FX}9MN%GV9ZEJ.png

20IC`}8}I3{8`ZDW@YXEE5Q.png

ngx_http_gzip_module模塊

ngx_http_gzip_module模塊是一個過濾器,壓縮響應使用“gzip”方法。這往往有助于減少一半或更多的傳輸數據的大小。

1、gzip

語法:gzip on | off; 
    Default: gzip off; 
    Context: http, server, location, if in location

是否開啟gzip功能

2、gzip_comp_level

語法:gzip_comp_level level; 
    Default: gzip_comp_level 1; 
    Context: http, server, location

指定壓縮比,1-9

3、gzip_disable

語法:gzip_disable regex …; 
    Default: — 
    Context: http, server, location

對被指定的模式所匹配到的瀏覽器禁用gzip功能

4、gzip_min_length

語法:gzip_min_length length; 
    Default: gzip_min_length 20; 
    Context: http, server, location

啟用壓縮功能的響應報文最小長度

5、gzip_buffers

語法:gzip_buffers number size; 
    Default: gzip_buffers 32 4k|16 8k; 
    Context: http, server, location

支持實現壓縮功能時為其配置的緩沖區數量及每個緩存區的大??;

6、gzip_proxied

語法:gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …; 
    Default: gzip_proxied off; 
    Context: http, server, location

nginx作為代理服務器接收到從被代理服務器發送的響應報文后,在何種條件下啟用壓縮功能的; 
off:對代理的請求不啟用 
no-cache, no-store,private:表示從被代理服務器收到的響應報文首部的Cache-Control的值為此三者中任何一個,則啟用壓縮功能;

7、gzip_types

語法:gzip_types mime-type …; 
    Default: gzip_types text/html; 
    Context: http, server, location

壓縮過濾器,僅對此處設定的MIME類型的內容啟用壓縮功能;

8、gzip_vary

語法:gzip_vary on | off; 
    Default: gzip_vary off; 
    Context: http, server, location

如果啟用了gzip功能是否在響應報文首部添加Vary: Accept-Encoding項

配置示例

~8(9L]8ZY544JIF7ODR9CEP.png

Z_7`VY376}E7Y%MLFKP(WRN.png

ngx_http_fastcgi_module模塊

ngx_http_fastcgi_module模塊允許通過請求FastCGI服務器,將動態頁面發送至FastCGI服務器解釋執行

1、fastcgi_pass

語法:fastcgi_pass address; 
    Default: — 
    Context: location, if in location

fastcgi服務器IP地址

2、fastcgi_index

語法:fastcgi_index name; 
    Default: — 
    Context: http, server, location

fastcgi默認的主頁資源;

3、fastcgi_param

語法:fastcgi_param parameter value [if_not_empty]; 
    Default: — 
    Context: http, server, location

設置一個參數,將此參數傳遞給FastCGI服務器。該值可以包含文本、變量和它們的組合。

配置php-fpm示例

1.安裝php-fpm和mysql
[root@centos7 ~]# yum -y install php-fpm mariadb-server
2.Nginx配置文件

@NQ(`1[ASMH2`$AL[OE(J2T.png

3.測試訪問

FRN7VMRHNMV}ZV93C~PVFTP.png

5T05HW0PH5HCNFYLATZK9[L.png

4、fastcgi_cache_path

語法:fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time]; 
    Context: http

定義fastcgi的緩存;緩存位置為磁盤上的文件系統,由path所指定路徑來定義;

    levels=levels:緩存目錄的層級數量,以及每一級的目錄數量;levels=ONE:TWO:THREE 
        leves=1:2:2 
    keys_zone=name:size 
        k/v映射的內存空間的名稱及大小 
    inactive=time 
        非活動時長 
    max_size=size 
        磁盤上用于緩存數據的緩存空間上限

5、fastcgi_cache

語法:fastcgi_cache zone | off; 
    Default: fastcgi_cache off; 
    Context: http, server, location

調用指定的緩存空間來緩存數據;http, server, location

6、fastcgi_cache_key

語法:fastcgi_cache_key string; 
    Default: — 
    Context: http, server, location

定義用作緩存項的key的字符串;

7、fastcgi_cache_methods

語法:fastcgi_cache_methods GET | HEAD | POST …; 
    Default: fastcgi_cache_methods GET HEAD; 
    Context: http, server, location

為哪些請求方法使用緩存;

8、fastcgi_cache_min_uses

語法:astcgi_cache_min_uses number; 
    Default: fastcgi_cache_min_uses 1; 
    Context: http, server, location

緩存空間中的緩存項在inactive定義的非活動時間內至少要被訪問到此處所指定的次數方可被認作活動項;

9、fastcgi_cache_valid

語法:fastcgi_cache_valid [code …] time; 
    Default: — 
    Context: http, server, location

不同的響應碼各自的緩存時長;

10、fastcgi_keep_conn

語法:fastcgi_keep_conn on | off; 
    Default: fastcgi_keep_conn off; 
    Context: http, server, location

默認情況下,一個FastCGI服務器將發送響應后關閉連接正確。然而,當這個指令設置的值,Nginx會指示一個FastCGI服務器保持連接打開。

fastcgi_cache配置示例

1.Nginx配置文件
7UFD08SX6(]KD{%KYGC7MVX.png

%K_8FFSW7Y0QM70{JD%WP}L.png

2.啟用緩存功能前做壓測
3L)P{7@)@W3NH@YT5VAFG8A.png
3.啟用緩存功能后做壓縮
KB~E@3IO2$7OLX)UX9XQFCI.png
4.生成緩存文件

[A$$7{J{CR~W8DZEM`$FPLA.png

ngx_http_ssl_module模塊

ngx_http_ssl_module模塊提供HTTPS功能支持

1、ssl

語法:ssl on | off; 
    Default: ssl off; 
    Context: http, server

是否開啟ssl功能

2、ssl_certificate

語法:ssl_certificate file; 
    Default: — 
    Context: http, server

當前虛擬主機使用PEM格式的證書文件;

3、ssl_certificate_key

語法:ssl_certificate_key file; 
    Default: — 
    Context: http, server

當前虛擬主機上與其證書匹配的私鑰文件;

4、ssl_protocols

語法:ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2]; 
    Default: ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    Context: http, server

支持ssl協議版本,默認為后三個;

5、ssl_session_cache

語法:ssl_session_cache off | none | [builtin[:size]] [shared:name:size]; 
    Default: ssl_session_cache none; 
    Context: http, server

builtin[:size]:使用OpenSSL內建的緩存,此緩存為每worker進程私有;

[shared:name:size]:在各worker之間使用一個共享的緩存;

6、ssl_session_timeout

語法:ssl_session_timeout time; 
    Default: ssl_session_timeout 5m; 
    Context: http, server

客戶端一側的連接可以復用ssl session cache中緩存 的ssl參數的有效時長;

ssl配置示例

1.CA配置
IER37)V1[O`62D3K}]Y5B[J.png
2.nginx端生成簽署請求
{YLZUTG~2FTP2$KPME{1Q`F.png
3.CA簽證

`JLE)O@$}YAXN61HR3@UK3G.png

4.Nginx配置文件

5EBSJ$~V]R8O6K$A$GER77V.png

5.測試

6MTNY65{Y%VI6FZPYW[Y[[K.png

_YAEL7IHNN`~BOTT8_0A)L4.png

ngx_http_referer_module模塊

ngx_http_referer_module模塊是用來阻止訪問一個在referer頭域值無效請求的網站。

1、valid_referers

語法:valid_referers none | blocked | server_names | string …; 
    Default: — 
    Context: server, location

定義referer首部的合法可用值;

none:請求報文首部沒有referer首部; 
blocked:請求報文的referer首部沒有值; 
server_names:參數,其可以有值作為主機名或主機名模式; 
    arbitrary_string:直接字符串,但可使用*作通配符; 
    regular expression:被指定的正則表達式模式匹配到的字符串;要使用~打頭,例如 ~.*.magedu.com;

配置示例

valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;

if($invalid_referer) {
   return 403;
}

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

(0)
zhai796898zhai796898
上一篇 2016-11-05
下一篇 2016-11-05

相關推薦

  • Kickstart+PXE自動部署CentOS6.6

        生產環境中對于部署大量的相同系統的服務器,如果逐臺安裝操作系統的話是非常浪費時間的工作,還好CentOS提供了無人值守安裝系統的功能,下面就詳細介紹一下配置步驟。 一、配置本機的yum源     因為需要安裝一些軟件來達到我們的目的,所以最好先把yum源配置好。 &nbs…

    Linux干貨 2015-05-12
  • Linux下文件權限管理輕微總結

    Linux下文件權限管理輕微總結       此文對linux下文件的權限及其如何管理權限進行介紹,涉及到讀“r”寫“w”執行“x”三個權限,特殊權限SUID、SGID、STICKY、ACL、attr的使用。同時對更改文件的指令chmod、getfacl、setfacl、chattr、lsattr等進行說明。  &nb…

    Linux干貨 2016-11-07
  • 第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。  cp復制,mv移動,rm刪除     1、cp:             1,用法:      &n…

    Linux干貨 2016-07-04
  • 馬哥教育網絡21期+第十三周練習博客

        馬哥教育網絡21期+第十三周練習博客 1、建立samba共享,共享目錄為/data,要求:(描述完整的過程) 1)共享名為shared,工作組為magedu; 在服務器上安裝samba ]# yum install samba 創建共享目錄/data 啟動samba的nmb和smb…

    Linux干貨 2016-10-31
  • 優云實踐:巧用Salt,實現CMDB配置自動發現

    隨著互聯網+新形勢的發展,越來越多的企業步入雙態(穩敏雙態)IT時代,信息化環境越來越復雜,既有IOE三層架構,也有VCE、Openstack等云虛擬化架構和互聯網化的分布式大數據架構。所以,企業急需建立一套合適的配置管理庫(CMDB),像人類“大腦”一樣統一存儲從基礎架構到業務應用各層面的配置信息,以便協調“身體”(運維系統)各部分完成復雜的運維工作。 C…

    系統運維 2016-07-26
  • 計算機淺談及Linux簡談

    一、計算機淺談: 電子計算機(英語:computer),亦稱電腦,是一種利用電子學原理,根據一系列指令對數據進行處理的工具。 在現代,機械計算機的應用已經完全被電子計算機所替換,其所相關的技術研究叫計算機科學,而“計算機技術”指的是將計算機科學的成果應用于工程實踐所派生的諸多技術性和經驗性成果的總合?!坝嬎銠C技術”與“計算機科學”是兩個相關而又不同的概念,它…

    Linux干貨 2016-11-29
欧美性久久久久