關於Nginx的深度學習內容

來源:互聯網
上載者:User
這篇文章主要介紹了關於Nginx的深度學習內容,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

一、動靜分離

通過中介軟體將動態請求和靜態請求進行分離。
原因:分離資源,減少不必要的請求消耗,減少請求延時。

動態和靜態請求圖例:

  • 基本配置

upstream php_api{    server 127.0.0.1:8080;}server {    root filePath;    location ~ \.php$ {        proxy_pass http://php_api;        index index.html index.htm;    }    location ~ \.(jpg|png|gif) {        expires 1h;        gzip on;    }}

二、Rewrite規則

1、情境:

  • URL訪問跳轉,支援開發設計(頁面跳轉、相容性支援、展示效果等)

  • SEO最佳化

  • 維護(後台維護、流量轉寄等)

  • 安全

2、配置文法

rewrite

  • 配置文法:rewrite regex replacement [flag];

  • 預設:無

  • Context:server,location,if

樣本: rewrite ^(.*)$ /pages/main.html break;

  1. regex(正則)

Linux中 pcregrep命令可以用來測試Regex。
| 元字元 |含義 |
. 匹配除分行符號以外的任一字元
? 重複0次或1次
+ 重複1次或更多次
d 匹配數字
* 貪婪模式,有多少匹配多少
^ 匹配開頭
$ 匹配結尾
{n} 重複n次
{n,} 重複n次或更多次
[c] 匹配單個字元c
[a-z] 匹配a-z小寫字母的任意一個
\ 轉移字元
( ) 用於匹配()之間的內容,通過$1$2調用
  1. flag

flag 含義
last 停止rewrite檢測
break 停止rewrite檢測
redirect 返回302臨時重新導向,地址欄會顯示跳轉後的地址
permanent 返回301永久重新導向,地址欄會顯示跳轉後的地址
  • 301永久重新導向:除非使用者清理緩衝,否則下次請求還是會請求到重新導向

  • 302臨時重新導向:使用者下次請求還會經過服務端重新導向

  • last 和 break的區別:last會建立一個串連,往下繼續進行匹配。break會直接停留在那一級。

  • redirect:關閉nginx後,重新導向會失效。

  • permanent:關閉nginx,也會重新導向到新的地址。

執行個體:
location / {    # 檔案不存在,直接存取4399    if (!-f $request_filename) {        rewrite ^/(.*)$ http://www.4399.com;    }}
  1. 優先順序

    1. 執行server塊的rewrite指令

    2. 執行location匹配

    3. 執行選中的location中的rewrite

三、Nginx的進階模組

1. secure_link_module模組

(1)制定並允許檢查請求的連結的真實性以及保護資源免遭未經授權的訪問
(2)限制連結生效周期

圖例:

  • 配置文法

    • 配置文法:secure_link_md5 expression;

    • 預設:無

    • Context:http,server,location

    • 配置文法:secure_link expression;

    • 預設:無

    • Context:http,server,location

    • secure_link

    • secure_link_md5

簡單配置執行個體:

root /opt/app/code;location / {    secure_link $arg_md5,$arg_expires;    secure_link_md5 "$secure_link_expires$uri 自訂字串";    if ($secure_link = "") {        return 403;    }    if ($secure_link = "0") {        return 410;    }}

產生url的指令碼:

#!/bin/bashservername="你的servername"download_file="/download/test.img"time_num=$(date -d "2018-10-18 00:00:00" +%s)secure_num="自訂字串"res=$(echo -n "${time_num}${download_file} ${secure_num}"|openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =)echo "http://${servername}${download_file}?md5=${res}&expires=${time_num}"
注意:1、產生指令碼中自訂字串和配置中的自訂字串要保持一致。2、驗證規則保持一致。3、如果沒有openssl,可以yum安裝。

2. geoip_module模組

基於IP地址匹配 MaxMine GeoIP二進位檔案,讀取IP所在地區資訊。
預設安裝的Nginx是沒有安裝geoip這個模組的,安裝命令:
yum install nginx-module-geoip
  • 使用情境:

    • 區別國內外做HTTP訪問規則

    • 區別國內城市地區做HTTP訪問規則

  • 使用步驟:

    • wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

    • wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

    • load_module "modules/ngx_http_geoip_module.so";

    • load_module "modules/ngx_stream_geoip_module.so";

    1. 安裝geoip:yum install nginx-module-geoip,安裝完成查看/etc/nginx/module目錄下,如果有對應的so檔案,則說明安裝成功

    2. 在/etc/nginx/nginx.conf設定檔開頭加入

    3. 下載地區分區檔案:

    4. 使用gunzip命令解壓下載下來的檔案

配置樣本

geoip_country /etc/nginx/geoip/GeoIP.dat;geoip_city /etc/nginx/geoip/GeoLiteCity.dat;server{    location /myip {        default_type text/plain;        return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city";    }}

四、基於Nginx的HTTPS服務

1、為什麼需要HTTPS

  • 原因:HTTP不安全

    1. 傳輸資料被中間人盜用、資訊泄露

    2. 資料內容劫持、篡改

2、HTTPS協議的實現

對傳輸內容進行加密以及身分識別驗證
  • 對稱式加密和非對稱式加密

  • HTTPS加密協議原理

  • 用戶端在使用HTTPS方式與Web伺服器通訊的步驟

    1. 客戶使用https的URL訪問Web伺服器,要求與Web伺服器建立SSL串連

    2. Web伺服器收到用戶端請求後,會將網站的認證資訊(認證中包含公開金鑰)傳送一份給用戶端

    3. 用戶端的瀏覽器與Web伺服器開始協商SSL串連的安全等級,也就是資訊加密的等級

    4. 用戶端的瀏覽器根據雙方同意的安全等級,建立工作階段金鑰,然後利用網站的公開金鑰將工作階段金鑰加密,並傳送給網站

    5. Web伺服器利用自己的私密金鑰解密出工作階段金鑰

    6. Web伺服器利用工作階段金鑰加密與用戶端之間的通訊

通訊原理圖:

3、認證簽名產生

準備步驟:

  1. 確認openssl有無安裝,openssl version

  2. nginx有無編譯http-ssl-module,nginx -V

產生自簽認證步驟:

  1. 產生key密鑰

    • openssl genrsa -idea -out ronaldo.key 1024

  2. 產生認證簽章要求檔案(csr檔案)

    • openssl req -new -key ronaldo.key -out ronaldo.csr

    • 當提示輸入 A challenge password時,表示ca檔案需要更改的另外一個密碼,直接斷行符號即可。

打包上面兩個步驟產生的檔案發送給簽名機構即可完成認證簽名
  1. 產生認證簽名檔案(CA檔案)

    • openssl x509 -req -days 3650 -in ronaldo.csr -signkey ronaldo.key -out ronaldo.crt

配置文法:

  • ssl

    • 配置文法:ssl on | off;

    • 預設:ssl off;

    • Context:http,server

  • ssl_certificate(crt檔案所在位置)

    • 配置文法:ssl_certificate file;

    • 預設:無

    • Context:http,server

  • ssl_certificate_key(key檔案所在位置)

    • 配置文法:ssl_certificate_key file;

    • 預設:無

    • Context:http,server

簡單樣本:

server {    listen 443;    server_name locahost;    ssl on;    ssl_certificate /etc/nginx/ssl_key/ronaldo.crt;    ssl_certificate_key /etc/nginx/ssl_key/ronaldo.key;    index index.html index.htm;    location / {        root /opt/app/code;    }}

配置完成後:

  1. 停止Nginx:nginx -s stop -c /etc/nginx/nginx.conf,會要求你輸入ronaldo.key的密碼。

  2. 啟動Nginx:nginx -c /etc/nginx/nginx.conf,也會要求你輸入密碼。

  3. 查看是否啟用了443連接埠:netstat -luntp | grep 443

4、配置蘋果要求的認證

  1. 伺服器所有的串連使用TLS1.2以上的版本(openssl 1.0.2)

    • 版本:openssl version

    • 自簽認證加密簽名演算法類型以及公開金鑰位元:openssl x509 -noout -text -in ./ronaldo.crt

    • 升級openssl的指令碼

#!/bin/bashcd /opt/downloadwget https://www.openssl.org/source/openssl-1.0.2k.tar.gztar zxf openssl-1.0.2k.tar.gzcd openssl-1.0.2k./config --prefix=/usr/local/opensslmake && make installmv /usr/bin/openssl /usr/bin/openssl.OFFmv /usr/include/openssl /usr/include/openssl.OFFln -s /usr/local/openssl/bin/openssl /usr/bin/opensslln -s /usr/local/openssl/include/openssl /usr/include/opensslecho "/usr/local/openssl/lib" >> /etc/ld.so.confldconfig -vopenssl version -a
  1. HTTPS認證必須使用SHA256以上雜湊演算法簽名

  2. HTTPS認證必須使用RSA 2048位或ECC 256位以上公開金鑰演算法

  3. 使用向前加密技術

通過自簽方式、符合蘋果要求、通過key檔案直接產生crt檔案:
  • openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout ronaldo.key -out ronaldo_apple.crt

  • -keyout參數會同時再產生一個key檔案(沒有保護碼),reload Nginx就不用再次輸入密碼。

  • 產生crt檔案後,只需要修改設定檔即可

  • 直接產生沒有保護碼的key:openssl rsa -in ./ronaldoold.key -out ./ronaldonew.key

5、HTTPS服務最佳化

  1. 啟用keepalive長連結

    • 在設定檔寫入:keepalive_timeout 100

  2. 設定ssl session緩衝

    • 在設定檔寫入:ssl_session_cache shared:SSL:10m

五、Nginx與Lua的開發

Nginx+Lua優勢:
充分的結合Nginx的並發處理epoll優勢和Lua的輕量實現簡單的功能且高並發的情境。

1、Lua

是一個簡潔、輕量、可擴充的指令碼語言
  1. 安裝:yum install lua

  2. 運行:

    • lua命令進入互動介面,輸入:print("Hello World")即可

    • 執行lua指令碼:

#!/usr/bin/luaprint("Hello world")
  1. 注釋

    • - - 行注釋

    • - -[[塊注釋- -]]

  2. 變數

    • a = 'alon123"'

    • a = "alon123""

    • a = '97lo1004923"'

    • a = [[alo

    • 123"]]

    • 上述是同一個意思,第三點用的是ASCII表

注意:
Lua數實值型別只有double類型
Lua布爾類型只有nil和false是false,數字0、Null 字元串都是true
Lua中的變數如果沒有特殊說明,全是全域變數;如果希望是局部變數,簽名加個local
Lua沒有++或是+=這樣的操作
~=:不等於
..:字串拼接
io庫的分別從stdin和stdout讀寫的read和write函數
  1. while迴圈語句

sum = 0num = 1while num <= 100 do    sum = sum + num    num = num + 1endprint("sum =", sum)
  1. for迴圈語句

sum = 0for i = 1,100 do    sum = sum + iend
  1. if-else判斷語句

if age == 40 and sex == "Male" then    print("大於40歲的男人")elseif age>60 and sex ~= "Female" then    print("非女人而且大於60")else    local age = io.read()    print("Your age is"..age)end

2、Nginx + Lua環境

  1. 所需下載以及安裝:

    1. LuaJIT

    2. ngx_devel_kit和lua-nginx-module

    3. 重新編譯Nginx

    4. 詳細的下載和安裝步驟參見:

3、Nginx調用lua模組指令

Nginx的可插拔模組化載入執行,共11個處理階段
指令 含義
set_by_lua,set_by_lua_file 設定nginx變數,可以實現複雜的賦值邏輯
access_by_lua,access_by_lua_file 請求訪問階段處理,用於存取控制
content_by_lua,content_by_lua_file 內容處理器,接收請求處理並輸出響應

4、Nginx Lua API

API 含義
ngx.var nginx變數
ngx.req.get_headers 擷取要求標頭
ngx.req.get_uri_args 擷取url請求參數
ngx.redirect 重新導向
ngx.print 輸出響應內容體
ngx.say 同nginx.print,但是會斷行符號
ngx.header 輸出回應標頭
...

5、灰階發布

按照一定的關係區別,分不分的代碼進行上線,使代碼的發布能平滑過渡上線。
  • 根據使用者的資訊cookie等資訊區別

  • 根據使用者的ip地址

實現灰階發布:

相關推薦:

Nginx的情境實踐

關於Nginx的基礎內容

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.