摘要:深度學習篇一動靜分離通過中間件將動態(tài)請求和靜態(tài)請求進行分離。原因分離資源,減少不必要的請求消耗,減少請求延時。關(guān)閉后,重定向會失效。驗證規(guī)則保持一致。啟動,也會要求你輸入密碼。根據(jù)用戶的信息等信息區(qū)別根據(jù)用戶的地址實現(xiàn)灰度發(fā)布示意圖
Nginx-深度學習篇 一、動靜分離
通過中間件將動態(tài)請求和靜態(tài)請求進行分離。
原因:分離資源,減少不必要的請求消耗,減少請求延時。
動態(tài)和靜態(tài)請求圖例:
基本配置
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規(guī)則 1、場景:
URL訪問跳轉(zhuǎn),支持開發(fā)設(shè)計(頁面跳轉(zhuǎn)、兼容性支持、展示效果等)
SEO優(yōu)化
維護(后臺維護、流量轉(zhuǎn)發(fā)等)
安全
2、配置語法 rewrite配置語法:rewrite regex replacement [flag];
默認:無
Context:server,location,if
示例: rewrite ^(.*)$ /pages/main.html break;
regex(正則)
Linux中pcregrep命令可以用來測試正則表達式。
| 元字符 |含義 |
. | 匹配除換行符以外的任意字符 |
? | 重復0次或1次 |
+ | 重復1次或更多次 |
d | 匹配數(shù)字 |
* | 貪婪模式,有多少匹配多少 |
^ | 匹配開頭 |
$ | 匹配結(jié)尾 |
{n} | 重復n次 |
{n,} | 重復n次或更多次 |
[c] | 匹配單個字符c |
[a-z] | 匹配a-z小寫字母的任意一個 |
轉(zhuǎn)移字符 | |
( ) | 用于匹配()之間的內(nèi)容,通過$1、$2調(diào)用 |
flag
flag | 含義 |
---|---|
last | 停止rewrite檢測 |
break | 停止rewrite檢測 |
redirect | 返回302臨時重定向,地址欄會顯示跳轉(zhuǎn)后的地址 |
permanent | 返回301永久重定向,地址欄會顯示跳轉(zhuǎn)后的地址 |
301永久重定向:除非用戶清理緩存,否則下次請求還是會請求到重定向
302臨時重定向:用戶下次請求還會經(jīng)過服務(wù)端重定向
last 和 break的區(qū)別:last會新建一個連接,往下繼續(xù)進行匹配。break會直接停留在那一級。
redirect:關(guān)閉nginx后,重定向會失效。
permanent:關(guān)閉nginx,也會重定向到新的地址。
實例:
location / { # 文件不存在,直接訪問4399 if (!-f $request_filename) { rewrite ^/(.*)$ http://www.4399.com; } }
優(yōu)先級
執(zhí)行server塊的rewrite指令
執(zhí)行l(wèi)ocation匹配
執(zhí)行選中的location中的rewrite
三、Nginx的高級模塊 1. secure_link_module模塊(1)制定并允許檢查請求的鏈接的真實性以及保護資源免遭未經(jīng)授權(quán)的訪問
(2)限制鏈接生效周期
圖例:
配置語法
secure_link
配置語法:secure_link expression;
默認:無
Context:http,server,location
secure_link_md5
配置語法:secure_link_md5 expression;
默認:無
Context:http,server,location
簡單配置實例:
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/bash servername="你的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 | open ssl base64 | tr +/ -_ | tr -d =) echo "http://${servername}${download_file}?md5=${res}&expires=${time_num}"
注意:1、生成腳本中自定義字符串和配置中的自定義字符串要保持一致。2、驗證規(guī)則保持一致。3、如果沒有openssl,可以yum安裝。2. geoip_module模塊
基于IP地址匹配MaxMine GeoIP二進制文件,讀取IP所在地域信息。
默認安裝的Nginx是沒有安裝geoip這個模塊的,安裝命令:
yum install nginx-module-geoip
使用場景:
區(qū)別國內(nèi)外做HTTP訪問規(guī)則
區(qū)別國內(nèi)城市地域做HTTP訪問規(guī)則
使用步驟:
安裝geoip:yum install nginx-module-geoip,安裝完成查看/etc/nginx/module目錄下,如果有對應(yīng)的so文件,則說明安裝成功
在/etc/nginx/nginx.conf配置文件開頭加入
load_module "modules/ngx_http_geoip_module.so";
load_module "modules/ngx_stream_geoip_module.so";
下載地域分區(qū)文件:
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
使用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服務(wù) 1、為什么需要HTTPS
原因:HTTP不安全
傳輸數(shù)據(jù)被中間人盜用、信息泄露
數(shù)據(jù)內(nèi)容劫持、篡改
2、HTTPS協(xié)議的實現(xiàn)對傳輸內(nèi)容進行加密以及身份驗證
對稱加密和非對稱加密
HTTPS加密協(xié)議原理
客戶端在使用HTTPS方式與Web服務(wù)器通信的步驟
客戶使用https的URL訪問Web服務(wù)器,要求與Web服務(wù)器建立SSL連接
Web服務(wù)器收到客戶端請求后,會將網(wǎng)站的證書信息(證書中包含公鑰)傳送一份給客戶端
客戶端的瀏覽器與Web服務(wù)器開始協(xié)商SSL連接的安全等級,也就是信息加密的等級
客戶端的瀏覽器根據(jù)雙方同意的安全等級,建立會話密鑰,然后利用網(wǎng)站的公鑰將會話密鑰加密,并傳送給網(wǎng)站
Web服務(wù)器利用自己的私鑰解密出會話密鑰
Web服務(wù)器利用會話密鑰加密與客戶端之間的通信
通信原理圖:
準備步驟:
確認openssl有無安裝,openssl version
nginx有無編譯http-ssl-module,nginx -V
生成自簽證書步驟:
生成key密鑰
openssl genrsa -idea -out ronaldo.key 1024
生成證書簽名請求文件(csr文件)
openssl req -new -key ronaldo.key -out ronaldo.csr
當提示輸入 A challenge password時,表示ca文件需要更改的另外一個密碼,直接回車即可。
打包上面兩個步驟生成的文件發(fā)送給簽名機構(gòu)即可完成證書簽名
生成證書簽名文件(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; } }
配置完成后:
停止Nginx:nginx -s stop -c /etc/nginx/nginx.conf,會要求你輸入ronaldo.key的密碼。
啟動Nginx:nginx -c /etc/nginx/nginx.conf,也會要求你輸入密碼。
查看是否啟用了443端口:netstat -luntp | grep 443
4、配置蘋果要求的證書
服務(wù)器所有的連接使用TLS1.2以上的版本(openssl 1.0.2)
版本:openssl version
自簽證書加密簽名算法類型以及公鑰位數(shù):openssl x509 -noout -text -in ./ronaldo.crt
升級openssl的腳本
#!/bin/bash cd /opt/download wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz tar zxf openssl-1.0.2k.tar.gz cd openssl-1.0.2k ./config --prefix=/usr/local/openssl make && make install mv /usr/bin/openssl /usr/bin/openssl.OFF mv /usr/include/openssl /usr/include/openssl.OFF ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl ln -s /usr/local/openssl/include/openssl /usr/include/openssl echo "/usr/local/openssl/lib" >> /etc/ld.so.conf ldconfig -v openssl version -a
HTTPS證書必須使用SHA256以上哈希算法簽名
HTTPS證書必須使用RSA 2048位或ECC 256位以上公鑰算法
使用向前加密技術(shù)
通過自簽方式、符合蘋果要求、通過key文件直接生成crt文件:
openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout ronaldo.key -out ronaldo_apple.crt
-keyout參數(shù)會同時再生成一個key文件(沒有保護碼),reload Nginx就不用再次輸入密碼。
生成crt文件后,只需要修改配置文件即可
直接生成沒有保護碼的key:openssl rsa -in ./ronaldoold.key -out ./ronaldonew.key
5、HTTPS服務(wù)優(yōu)化
激活keepalive長鏈接
在配置文件寫入:keepalive_timeout 100
設(shè)置ssl session緩存
在配置文件寫入:ssl_session_cache shared:SSL:10m
五、Nginx與Lua的開發(fā)Nginx+Lua優(yōu)勢:1、Lua
充分的結(jié)合Nginx的并發(fā)處理epoll優(yōu)勢和Lua的輕量實現(xiàn)簡單的功能且高并發(fā)的場景。
是一個簡潔、輕量、可擴展的腳本語言
安裝:yum install lua
運行:
lua命令進入交互界面,輸入:print("Hello World")即可
執(zhí)行l(wèi)ua腳本:
#!/usr/bin/lua print("Hello world")
注釋
- - 行注釋
- -[[塊注釋- -]]
變量
a = "alon123""
a = "alon123""
a = "97lo1004923""
a = [[alo
123"]]
上述是同一個意思,第三點用的是ASCII表
注意:
Lua數(shù)值類型只有double類型
Lua布爾類型只有nil和false是false,數(shù)字0、空字符串都是true
Lua中的變量如果沒有特殊說明,全是全局變量;如果希望是局部變量,簽名加個local
Lua沒有++或是+=這樣的操作
~=:不等于
..:字符串拼接
io庫的分別從stdin和stdout讀寫的read和write函數(shù)
while循環(huán)語句
sum = 0 num = 1 while num <= 100 do sum = sum + num num = num + 1 end print("sum =", sum)
for循環(huán)語句
sum = 0 for i = 1,100 do sum = sum + i end
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) end2、Nginx + Lua環(huán)境
所需下載以及安裝:
LuaJIT
ngx_devel_kit和lua-nginx-module
重新編譯Nginx
詳細的下載和安裝步驟參見:
3、Nginx調(diào)用lua模塊指令Nginx的可插拔模塊化加載執(zhí)行,共11個處理階段
指令 | 含義 |
---|---|
set_by_lua,set_by_lua_file | 設(shè)置nginx變量,可以實現(xiàn)復雜的賦值邏輯 |
access_by_lua,access_by_lua_file | 請求訪問階段處理,用于訪問控制 |
content_by_lua,content_by_lua_file | 內(nèi)容處理器,接收請求處理并輸出響應(yīng) |
API | 含義 |
---|---|
ngx.var | nginx變量 |
ngx.req.get_headers | 獲取請求頭 |
ngx.req.get_uri_args | 獲取url請求參數(shù) |
ngx.redirect | 重定向 |
ngx.print | 輸出響應(yīng)內(nèi)容體 |
ngx.say | 同nginx.print,但是會回車 |
ngx.header | 輸出響應(yīng)頭 |
... |
按照一定的關(guān)系區(qū)別,分不分的代碼進行上線,使代碼的發(fā)布能平滑過渡上線。
根據(jù)用戶的信息cookie等信息區(qū)別
根據(jù)用戶的ip地址
實現(xiàn)灰度發(fā)布示意圖:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/30708.html
摘要:深度學習篇一動靜分離通過中間件將動態(tài)請求和靜態(tài)請求進行分離。原因分離資源,減少不必要的請求消耗,減少請求延時。關(guān)閉后,重定向會失效。驗證規(guī)則保持一致。啟動,也會要求你輸入密碼。根據(jù)用戶的信息等信息區(qū)別根據(jù)用戶的地址實現(xiàn)灰度發(fā)布示意圖 Nginx-深度學習篇 一、動靜分離 通過中間件將動態(tài)請求和靜態(tài)請求進行分離。原因:分離資源,減少不必要的請求消耗,減少請求延時。 動態(tài)和靜態(tài)請求圖例:s...
摘要:關(guān)注回復,獲取原理鎖的解析以及使用場景關(guān)注回復,獲取高級知識塊關(guān)注回復,獲取的相關(guān)知識關(guān)注回復,獲取相關(guān)的知識輕輕關(guān)注,將推心的不錯經(jīng)驗和知識 實踐篇 給定二維數(shù)組,根據(jù)某個字段排序 如何判斷上傳文件類型,如:僅允許 jpg 上傳 不使用臨時變量交換兩個變量的值 $a=1; $b=2; => $a=2; $b=1; strtoupper 在轉(zhuǎn)換中文時存在亂碼,你如何解決?php...
摘要:導讀閱讀本文需要有足夠的時間,筆者會由淺到深帶你一步一步了解一個資深架構(gòu)師所要掌握的各類知識點,你也可以按照文章中所列的知識體系對比自身,對自己進行查漏補缺,覺得本文對你有幫助的話,可以點贊關(guān)注一下。目錄一基礎(chǔ)篇二進階篇三高級篇四架構(gòu)篇五擴 導讀:閱讀本文需要有足夠的時間,筆者會由淺到深帶你一步一步了解一個資深架構(gòu)師所要掌握的各類知識點,你也可以按照文章中所列的知識體系對比自身,對自己...
閱讀 3017·2023-04-26 00:32
閱讀 498·2019-08-30 15:52
閱讀 2105·2019-08-30 15:52
閱讀 3347·2019-08-30 15:44
閱讀 3280·2019-08-30 14:09
閱讀 1416·2019-08-29 15:15
閱讀 3390·2019-08-28 18:12
閱讀 1074·2019-08-26 13:55