1. 程式人生 > >2-5-運維必備核心技能-nginx實現模塊化應用實戰

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

log 重寫 worker 輸入 其他 nss 直接 ngx using

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

6、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 > serial

然後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服務器上

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;
}
訪問這個網站會提示不是私密連接

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所描述的模式進行檢查,而後完成替換;
1、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響應碼,需要客戶端重新發請求,會看到一個新url

示例:
server {
#rewrite /(.).png$ /$1.jpg;---前邊是正則表達式,需要轉意,把所有訪問.png改為訪問.jpg $1表示前邊的
rewrite /(.
)$ https://www.ilinux.io/$1;
}

2、return
return code [text];
return code URL;
return URL;

Stop processing and returns the specified code to a client.

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

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

5、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.
1、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;---還可以返回到主頁
}

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