摘要:經(jīng)由超文本傳輸協(xié)議通信,但是數(shù)據(jù)包由安全協(xié)議加密,實(shí)現(xiàn)加密數(shù)據(jù)與認(rèn)證功能。該模塊指令定義相關(guān)設(shè)置證書文件,私鑰文件,會(huì)話緩存等內(nèi)容。允許在客戶端建立會(huì)話時(shí)傳遞請(qǐng)求服務(wù)器名稱,這樣服務(wù)器就會(huì)知道該發(fā)送哪個(gè)虛擬主機(jī)下的證書文件。
1、nginx基本狀態(tài)信息頁(yè)面
配置示例:
location /basic_status { stub_status; }
頁(yè)面展示含義:
Active connections: 291 server accepts handled requests 16630948 16630948 31070465 Reading: 6 Writing: 179 Waiting: 106 Active connections: 活動(dòng)狀態(tài)的連接數(shù); accepts:已經(jīng)接受的客戶端請(qǐng)求的總數(shù); handled:已經(jīng)處理完成的客戶端請(qǐng)求的總數(shù); requests:客戶端發(fā)來(lái)的總的請(qǐng)求數(shù); Reading:處于讀取客戶端請(qǐng)求報(bào)文首部的連接的連接數(shù); Writing:處于向客戶端發(fā)送響應(yīng)報(bào)文過(guò)程中的連接數(shù); Waiting:處于等待客戶端發(fā)出請(qǐng)求的空閑連接數(shù);2、記錄請(qǐng)求日志
指令:
log_format
作用域: http
access_log
作用域: http, server, location, if in location, limit_except
open_log_file_cache
作用域: http, server, location
在http區(qū)域定制日志格式
用法:log_format name string ...;
name指定一個(gè)格式名稱,string可以使用nginx核心模塊及其它模塊內(nèi)嵌的變量指定格式。
可在每個(gè)server中,或location中指定一個(gè)日志存放路徑
用法:
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; access_log off;
指定日志存放路徑path,格式format,緩沖區(qū)大小buffer,也可啟用壓縮日志,指定壓縮級(jí)別gzip
2.3 open_log_file_cache定義一個(gè)緩存保存活躍的日志文件描述符數(shù)據(jù)
用法:
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time]; open_log_file_cache off;
max:緩存的最大文件描述符數(shù)量;
min_users:在inactive指定的時(shí)長(zhǎng)內(nèi)訪問大于等于此值方可被當(dāng)作活動(dòng)項(xiàng);
inactive:非活動(dòng)時(shí)長(zhǎng);
valid:驗(yàn)證緩存中各緩存項(xiàng)是否為活動(dòng)項(xiàng)的時(shí)間間隔;
配置示例:
log_format combined "$remote_addr - $remote_user [$time_local] " ""$request" $status $bytes_sent " ""$http_referer" "$http_user_agent" "$gzip_ratio""; access_log /var/logs/nginx-access.log combined buffer=32k; open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;3、rewrite重寫
將用戶請(qǐng)求的URI基于regex所描述的模式進(jìn)行檢查,而后完成替換;
URL重寫是一個(gè)非常有用的功能,如果一個(gè)網(wǎng)站在改進(jìn)的過(guò)程中結(jié)構(gòu)發(fā)生變化,無(wú)需客戶端更改已保存訪問地址仍可正常訪問;提升網(wǎng)站安全性,如放盜鏈行為。
syntax: rewrite regex replacement [flag] Context: server, location, if
將用戶請(qǐng)求的URI基于regex所描述的模式匹配檢查,匹配到時(shí)將其替換成replacement指定的新URI;
rewrite指令在同一級(jí)配置塊中存在多條rewrite規(guī)則,會(huì)按照順序自上而下逐一執(zhí)行;被某一規(guī)則替換完成后,重新開始新一輪檢查,因此本身具有循環(huán)機(jī)制,flag所表示的標(biāo)志位可控制循環(huán)機(jī)制;如果replacement是以http://或其他協(xié)議開頭的字符串,則直接以重定向方式返回給客戶端;
另外,rewrite指令接收到的URI是不包含host地址的,例如http://cutemsyu.com/articles/...,不包含"cutemsyu.com" ,在寫regex規(guī)則時(shí)應(yīng)當(dāng)注意。
[flag] 可用標(biāo)識(shí)如下:
last:停止在當(dāng)前區(qū)域繼續(xù)處理,將重寫的新URI在各location中重新處理;
break:將此處重寫的URI在本塊中繼續(xù)處理,但新的URI不會(huì)轉(zhuǎn)向其他location中處理;
redirect:將重寫的URI直接返回給客戶端,狀態(tài)代碼為302,表示臨時(shí)重定向。用在replacement不以"http://"或"https://"開頭的情況下;
permanent:將重寫的URI直接返回給客戶端,狀態(tài)碼為301,指明為永久重定向。
Example:
#flag 是last的一個(gè)例子 server { ... rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 last; rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra last; return 403; ... } #如果上面的rewrite規(guī)則寫在location中,則應(yīng)該使用break標(biāo)識(shí),防止死循環(huán),如果循環(huán)超過(guò)10此,返回500錯(cuò)誤碼 location /download/ { rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 break; rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra break; return 403; }3.2 return
syntax: return code [text]; return code URL; return URL; context: server, location, if
停止處理并返回一個(gè)狀態(tài)碼給客戶端。
3.3 if 指令syntax: if (condition) { ... } context: server, location
引入一個(gè)新的配置上下文,滿足條件時(shí)執(zhí)行配置塊中的指令
condition為判斷條件,支持三種設(shè)置方法:
變量名,如果變量值為空字符串或者以0開頭的任意字符串,則表示條件為false
使用比較符判斷變量與字符串的邏輯關(guān)系
判斷文件或目錄存在情況
其中 比較操作符有:
=
!=
~ 模式匹配,區(qū)分字符大小寫
~* 模式匹配,不區(qū)分字符大小寫
!~:模式不匹配,區(qū)分字符大小寫
!~*:模式不匹配,不區(qū)分字符大小寫
文件及目錄存在性判斷:
-e, !-e 檢查一個(gè)文件,目錄,或軟鏈接是否存在
-f, !-f 檢查一個(gè)文件是否存在
-d, !-d 檢查一個(gè)目錄是否存在
-x, !-x 檢查一個(gè)文件是否可執(zhí)行
Example:
if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /msie/$1 break; } if ($http_cookie ~* "id=([^;]+)(?:;|$)") { set $id $1; } if ($request_method = POST) { return 405; } if ($slow) { limit_rate 10k; } if ($invalid_referer) { return 403; }3.4 rewrite的應(yīng)用 3.4.1 域名跳轉(zhuǎn)
Example:
#訪問video.cutemsyu.com 跳轉(zhuǎn)至v.cutemsyu.com server { listen 80; server_name video.cutemsyu.com; rewrite ^(.*) http://v.cutemsyu.com$1 ; ... }3.4.2 rewrite uri中參數(shù)
默認(rèn)情況下nginx進(jìn)行rewrite后都會(huì)自動(dòng)添加舊地址中參數(shù)部分,在replacement末尾添加"?"即可屏蔽舊地址中的參數(shù)
Example:
##原來(lái)的訪問的url為http://cutemsyu.com/article/nature/index.php?id=22341 rewrite ^/article/nature/(.*) http://cutemsyu.com/article/natrue.html permanent 重寫之后訪問的URL為http://cutemsyu.com/article/nature.html?id=22341 也就是說(shuō)原有的參數(shù)部分它會(huì)自動(dòng)補(bǔ)上 rewrite ^/article/nature/(.*) http://cutemsyu.com/article/natrue.html? permanent 重寫之后的URL為http://cutemsyu.com/article/nature.html,沒有原來(lái)的參數(shù)部分3.4.3 防盜鏈
通常為了加快客戶端訪問資源響應(yīng)時(shí)間,服務(wù)器不會(huì)一次性將全部資源響應(yīng)給客戶端,首先傳回網(wǎng)頁(yè)的文本內(nèi)容,當(dāng)客戶端解析文本內(nèi)容中的圖片、視頻等資源時(shí)會(huì)再次向服務(wù)器發(fā)起請(qǐng)求。當(dāng)某個(gè)站點(diǎn)將圖片鏈接指向其他服務(wù)器,給其他服務(wù)器造成負(fù)擔(dān),這就是非法的盜鏈行為。我們?cè)诖罱ǚ?wù)站點(diǎn)時(shí)要有意識(shí)防范盜鏈行為。
http協(xié)議頭部中referer頭域表示訪問當(dāng)前資源的源地址,根據(jù)referer中的源地址URL來(lái)判斷是否來(lái)自本站,如非本站的地址,采取阻斷措施防止盜鏈。
syntax: valid_referers none | blocked | server_names | string ...; context: server,location;
valid_referers 指令根據(jù)規(guī)則檢測(cè)頭域中referer中值是否合法,如果非法內(nèi)嵌變量 $invalid_referer 值為1.
參數(shù)含義:
none,表示檢測(cè)referer為空的情況
blocked,表示檢測(cè)referer的值被防火墻或者代理服務(wù)器刪除的情況,通常referer的值不以http://或https:// 開頭
server_names,referer的值應(yīng)該被包含在server_name中
string,定義字符串形式。
開始或尾部帶有通配符*
正則表達(dá)式,以~引導(dǎo),匹配http://后面的內(nèi)容
Example:
#如果發(fā)現(xiàn)盜鏈,重寫鏈接為指定的表示禁止盜用的圖片 server { listen 80; server_name v.cutemsyu.com; location ~* ^.+.(gif|jpg|png|flv|mp4|swf)$ { valid_referers none blocked server_names *.cutemsyu.com ~.google. if ($invalid_referer) { rewrite ^/ http://v.cutemsyu.com/images/forbbiden.jpg } } }4、gzip壓縮
壓縮文本數(shù)據(jù),提升網(wǎng)絡(luò)響應(yīng)速度,作為靜態(tài)服務(wù)器使用很有必要開啟,壓縮文本將節(jié)省大量帶寬,同時(shí)提升響應(yīng)速度。但是如果作為反向代理服務(wù)器則需要考慮,壓縮功能是否應(yīng)該由后端服務(wù)器承擔(dān),以此減輕前端服務(wù)器CPU壓力。
4.1 ngx_http_gzip_module該模塊功能是對(duì)指定類型數(shù)據(jù)使用gzip方法壓縮
作用域Context: http, server, location
gzip on |off;
此模塊gzip功能啟用或禁用
gzip_types mime-types ... ;
壓縮過(guò)濾器,僅對(duì)指定的MIME類型進(jìn)行壓縮處理
gzip_comp_level level;
設(shè)置壓縮級(jí)別1-9,默認(rèn)值為1壓縮速率最快,壓縮比最低
gzip_min_length length;
啟用壓縮功能的響應(yīng)報(bào)文大小閾值,小于該置不進(jìn)行壓縮。防止有些小數(shù)據(jù)壓縮之后更大的情況,推薦值為1024
gzip_buffers number size;
壓縮數(shù)據(jù)使用緩沖區(qū)大小,size默認(rèn)為內(nèi)存分頁(yè)大小
gzip_disable regex;
舊版本的瀏覽器對(duì)于gzip功能支持不完善,對(duì)于該指令配置的正則信息與瀏覽器類型匹配,匹配成功的響應(yīng)不進(jìn)行壓縮處理
gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
nginx作為反向代理服務(wù)器接收后端服務(wù)器響應(yīng)結(jié)果壓縮控制
4.2 ngx_http_gunzip_module解壓模塊,該模塊對(duì)于不支持壓縮功能的瀏覽器請(qǐng)求,響應(yīng)結(jié)果如果被壓縮則將其解壓后返回給客戶端。適用于某些以gzip方式壓縮過(guò)存儲(chǔ)的數(shù)據(jù)。
作用域Context: http, server, location
提示該模塊不是默認(rèn)編譯內(nèi)容,編譯選項(xiàng)--with-http_gunzip_module
gunzip on |off ;
是否開啟該模塊功能
gunzip buffers number size;
用于解壓數(shù)據(jù)使用的緩沖區(qū)空間配置
4.3 ngx_http_gzip_static_module靜態(tài)壓縮模塊,該模塊允許發(fā)送預(yù)壓縮數(shù)據(jù),如果客戶端請(qǐng)求的數(shù)據(jù)已被壓縮過(guò),且客戶端支持gzip壓縮,則直接返回壓縮數(shù)據(jù)。
作用域Context: http, server, location
提示該模塊不是默認(rèn)編譯內(nèi)容,編譯選項(xiàng)--with-http_gzip_static_module
gzip_static on | off ;
是否開啟該模塊
gzip_disable regex;
對(duì)于適配瀏覽器類型禁止gzip功能
gzip on; gzip_comp_level 3; gzip_types text/html text/css text/xml text/plain application/javascript; gzip_min_length 1024; gzip_disable "MISE [4-6]."; gzip_buffers 8 16K; gunzip on; #支持自動(dòng)解壓功能5、ssl模塊
HTTP協(xié)議屬于明文協(xié)議,通過(guò)抓包就可獲取一些隱私數(shù)據(jù)。HTTPS經(jīng)由超文本傳輸協(xié)議HTTP通信,但是數(shù)據(jù)包由SSL/TLS 安全協(xié)議加密,實(shí)現(xiàn)加密數(shù)據(jù)與認(rèn)證功能。
ngx_http_ssl_module 該模塊指令定義https相關(guān)設(shè)置:證書文件,私鑰文件,ssl會(huì)話緩存等內(nèi)容。
作用域Context: http, server
1. ssl on | off; 設(shè)定虛擬主機(jī)是否啟用HTTPS協(xié)議 2. ssl_certificate file; 指定當(dāng)前虛擬主機(jī)使用的PEM格式的證書文件 3. ssl_certificate_key file; 指定當(dāng)前虛擬主機(jī)上與其證書相匹配的私鑰文件 4. ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2]; 支持ssl協(xié)議版本,默認(rèn)為后三個(gè) 5. ssl_session_cache off | none | [builtin[:size]] [ shared:name:size ]; ssl會(huì)話緩存設(shè)置。 builtin[:size] --使用OpenSSL內(nèi)建的緩存,此緩存為每worker私有。容易產(chǎn)生內(nèi)存碎片不推薦。 shared:name:size --worker之間共享的緩存區(qū)域,size單位為bytes,1MB可存儲(chǔ)4000個(gè)會(huì)話;name為共享緩存區(qū)域名稱,多個(gè)虛擬主機(jī)可使用同一個(gè)共享緩存區(qū)。 6. ssl_session_timeout time; 客戶端可重復(fù)使用會(huì)話參數(shù)的超時(shí)時(shí)長(zhǎng)。默認(rèn)5分鐘
Example:
server { listen 443 ssl; server_name www.cutemsyu.com; root /website/ssl/htdocs; ssl on; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_session_cache shared:sslcache:15m; ssl_session_timeout 3m; }5.2 基于域名的HTTPS虛擬主機(jī)
值得考慮的一個(gè)問題是如何實(shí)現(xiàn)多個(gè)HTTPS虛擬主機(jī)監(jiān)聽在同一IP地址上。
情況一:每個(gè)虛擬主機(jī)使用各自的證書文件,如下
server { listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ... } server { listen 443 ssl; server_name www.example.org; ssl_certificate www.example.org.crt; ... }
如此配置的話,客戶端訪問這兩個(gè)站點(diǎn)建立SSL會(huì)話時(shí)收到的都是默認(rèn)主機(jī)的證書文件。該問題是由于SSL協(xié)議造成的,SSL鏈接在客戶端發(fā)送HTTP請(qǐng)求之前建立起來(lái)的,然而nginx并不知道所請(qǐng)求的服務(wù)主機(jī)名,因此返回默認(rèn)服務(wù)器證書文件。
解決方法一:
多個(gè)HTTPS虛擬主機(jī)使用同一證書文件和私鑰文件,證書和私鑰配置指令在http級(jí)別設(shè)定,server共享其配置
ssl_certificate common.crt; ssl_certificate_key common.key; server { listen 443 ssl; server_name www.example.com; ... } server { listen 443 ssl; server_name www.example.org; ... }
解決辦法二:
更通用的辦法是使用TLS Server Name Indication extension技術(shù),即SNI。SNI允許在客戶端建立SSL會(huì)話時(shí)傳遞請(qǐng)求服務(wù)器名稱,這樣服務(wù)器就會(huì)知道該發(fā)送哪個(gè)虛擬主機(jī)下的證書文件。該技術(shù)需要瀏覽器支持,一般主流瀏覽器都已支持
Opera 8.0;
MSIE 7.0 (but only on Windows Vista or higher);
Firefox 2.0 and other browsers using Mozilla Platform rv:1.8.1;
Safari 3.2.1 (Windows version supports SNI on Vista or higher);
and Chrome (Windows version supports SNI on Vista or higher, too)
同時(shí)確保nginx支持SNI功能:
$ nginx -V ... TLS SNI support enabled ...
本篇文章到此結(jié)束,下篇總結(jié)nginx反向代理,fastcgi模塊,感謝關(guān)注!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/39437.html
摘要:它是一個(gè)高性能的和反向代理服務(wù)器,同時(shí)也可以作為的代理服務(wù)器。如果相對(duì)域名或參數(shù)字符串起作用,可以使用全局變量匹配,也可以使用反向代理。 nginx是什么? nginx是俄羅斯人 Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點(diǎn)開發(fā)的一個(gè)十分輕量級(jí)的HTTP服務(wù)器。它是一個(gè)高性能的HTTP和反向代理服務(wù)器,同時(shí)也可以作為IMAP/POP3/SMTP的代理服務(wù)器。ngi...
摘要:如果狀態(tài)碼附帶文字段落,該文本將被放置在響應(yīng)主體。相反,如果狀態(tài)碼后面是一個(gè),該將成為頭部值。沒有狀態(tài)碼的將被視為一個(gè)狀態(tài)碼,這種情況下需要以或者開頭。因?yàn)楹筒荒芎?jiǎn)單的只返回狀態(tài)碼,還必須有重定向的,這就是指令無(wú)法返回的原因了。 HTTP模塊(核心模塊,也是主要用到的模塊) server模塊 server模塊是http的子模塊,它用來(lái)定義一個(gè)虛擬主機(jī) 例子: server { ...
摘要:是一款輕量級(jí)的服務(wù)器反向代理服務(wù)器及電子郵件代理服務(wù)器,并在一個(gè)協(xié)議下發(fā)行。是以反向代理的方式進(jìn)行負(fù)載均衡的。 Nginx是一款輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個(gè)BSD-like 協(xié)議下發(fā)行。由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開發(fā),供俄國(guó)大型的入口網(wǎng)站及搜索引擎Rambler(俄文:Рамблер)使用。其特點(diǎn)是占有內(nèi)存...
摘要:關(guān)于如何快速調(diào)教的幾點(diǎn)總結(jié)關(guān)于的好與壞,我覺得沒有必要去介紹了,在這里主要分享一下我在實(shí)際的項(xiàng)目部署中是如何快速的調(diào)教的。 關(guān)于如何快速調(diào)教N(yùn)ginx的幾點(diǎn)總結(jié) 關(guān)于Nginx的好與壞,我覺得沒有必要去介紹了,在這里主要分享一下我在實(shí)際的項(xiàng)目部署中是如何快速的調(diào)教N(yùn)ginx的。其中分享的源碼大家可以作為模板代碼,根據(jù)自身項(xiàng)目的實(shí)際情況,酌情使用。 這里簡(jiǎn)單的說(shuō)一說(shuō)我為什么要寫這篇文章,...
摘要:主進(jìn)程不直接響應(yīng)瀏覽器,是管理子進(jìn)程使用。瀏覽器訪問會(huì)到子進(jìn)程中響應(yīng)。日志需要備份,文件在被進(jìn)程所打開,不能使用命令。是設(shè)置變量使用,可以達(dá)到多條件判斷時(shí)做標(biāo)記使用。 nginx 簡(jiǎn)介 高性能WEB服務(wù)器 Nginx (engine x) 是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器.Nginx 是由Igor Sysoev為落實(shí)訪問量第二...
閱讀 2308·2021-11-17 09:33
閱讀 2840·2021-11-12 10:36
閱讀 3474·2021-09-27 13:47
閱讀 962·2021-09-22 15:10
閱讀 3562·2021-09-09 11:51
閱讀 1488·2021-08-25 09:38
閱讀 2809·2019-08-30 15:55
閱讀 2663·2019-08-30 15:53