2-5-運維必備核心技能-nginx實現模塊化應用實戰

nginx如何配置稱爲https服務器
ngx_http_ssl_module模塊:---ssl功能僅可以基於ip地址來實現,若是隻有一個ip卻有多個server,只能有一個是基於ssl的
ssl的交互過程:一、三次握手二、服務端發送證書給客戶端,併發送支持的加密方式等等三、客戶端接收證書,選擇驗證方式,驗證後選擇一次性會話密鑰,用對方的公鑰加密傳給服務器,完成密鑰交換四、服務端就可使用這個密碼來加密客戶端請求的url資源
一、ssl on | off;
Enables the HTTPS protocol for the given virtual server.
二、ssl_certificate file;
當前虛擬主機使用PEM格式的證書文件;
三、ssl_certificate_key file;
當前虛擬主機上與其證書匹配的私鑰文件;
四、ssl_protocols [SSLv2][SSLv3][TLSv1][TLS1.1][TLS1.2];
支持ssl協議版本,默認爲後三個;
五、ssl_session_cache off | none | builtin[:size];
builtin[:size]:使用OpenSSL內建的緩存,此緩存爲每worker進程私有;php

六、ssl_session_timeout time;
    客戶端一側的鏈接能夠複用ssl session cache中緩存的ssl參數的有效時長;

配置示例:
    server {
        listen 443 ssl;
        server_name www.magedu.com;
        root /vhosts/ssl/htdocs;
        ssl on;
        ssl certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;
        ssl_session_cache shared:sslcache:20m;
    }

如何建立一個ca服務器
cd /etc/pki/CA/
(umask 077;openssl genrsa -out private/cakey.pem 2048)---建立私鑰,保存在private/cakey.pem---2048密鑰長度
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365---365天驗證期限,會彈出一個對話,輸入證書的內容
touch index.txt
echo 01 > seriallinux

而後nginx服務器申請證書文件:
mkdir /etc/nginx/ssl
(umask 077;openssl genrsa -out nginx.key 2048)
openssl req -new -x509 -key nginx.key -out nginx.csr---證書接入請求
scp nginx.csr 172.168.0.68:/tmp---放在CA服務器上nginx

CA服務器
openssl ca -in /tmp/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 365
scp certs/nginx.crt 172.16.0.67:/etc/nginx/ssl正則表達式

nginx服務器:編輯nginx配置文件
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_protocols sslv3 tlsv1 tlsv1.1 tlsv1.2
ssl_session_cache shared:SSL:10m;
}
訪問這個網站會提示不是私密鏈接express

ngx_http_rewrite_module模塊:---url重定向(這個域名不存在,或者是訪問http80重定向到https443端口)其實就是查找替換
The ngx_http_rewrite_module module is used to change request URI using PCRE regular expressions,return redirects,and conditionally select configurations.緩存

bbs.magedu.com/ -->www.magedu.com/bbs/,http://www.magedu.com/-->https://www.magedu.com/
http://www.magedu.com/login.php;username=tom-->http://www.magedu.com/tom/服務器

將用戶請求的URI基於regex所描述的模式進行檢查,然後完成替換;
一、rewrite regex replacement[flag]---url重定向之後,會拿新url從新匹配整個配置文件的規則
將用戶請求的URI基於regex所描述的模式進行檢查,匹配到時將其替換爲熱捧;acement指定的新的URI;
注意:若是在同一級配置塊中存在多個rewrite規則,那麼會自下而下逐個檢查;被某條件規則替換完成後,會從新一輪的替換檢查,所以,隱含有循環機制;[flag]所表示的標誌位用於控制此循環機制;
若是replacement是以http://或https://開頭,則替換結果會直接以重向返回給客戶端;
301:永久重定向;
[flag]:---標誌位,last和break直接由nginx內部完成,客戶端無需參與
last:重寫完成後中止對當前URI在當前location中後續的其它重寫操做,然後對新的URI啓動新一輪重寫檢查;提早重啓新一輪循環;
break:重寫完成後中止對當前URI在當前location中後續的其它重寫操做,然後直接跳轉至重寫規則配置塊以後的其餘配置,結束循環;
redirect:重寫完成後以臨時重定向方式直接返回重寫後生成的新URI給客戶端,由客戶端從新發起請求;不能以http://或https://開頭;臨時重定向200響應碼,須要客戶端從新發請求,會看到一個新url
permanent:重寫完成後以永久重定向方式直接返回重寫後生成的新URI給客戶端,由客戶端從新發起請求;永久重定向301響應碼,須要客戶端從新發請求,會看到一個新urlsession

示例:
server {
#rewrite /(.).png$ /$1.jpg;---前邊是正則表達式,須要轉意,把全部訪問.png改成訪問.jpg $1表示前邊的
rewrite /(.
)$ https://www.ilinux.io/$1;
}併發

二、return
return code [text];
return code URL;
return URL;ide

Stop processing and returns the specified code to a client.

三、rewrite_log on | off;
是否開啓重寫日誌;
四、if{condition}{...}
引入一個新的配置上下文;條件知足時,執行配置塊中的配置指令;server,location;

condition:
    比較操做符:
        ==
        !=
        ~:模式匹配,區分字符大小寫
        ~*:模式匹配,不區分字符大小寫
        !~:模式不匹配,區分字符大小寫;
        !-*:模式不匹配,不區分字符大小寫;
    文件及目錄存在性判斷:
        -e,!-e
        -f,!-f
        -d,!-d
        -x,!-x

五、set $variable value;
用戶自定義變量

ngx_http_referer_module模塊:防盜鏈
The ngx_http_refer_module module is used to block access to a site for requests with invalid values in the "Referer" header field.
一、valid_referers none | blocked | server_names | string ...;---合法引用
定義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;---還能夠返回到主頁}

相關文章
相關標籤/搜索