1、第三方模塊使用php
nginx自己官方沒有的功能,能夠經過加載第三方模塊的方式,使用新的功能
第三方模塊網址:https://www.nginx.com/resources/wiki/modules
編譯安裝第三方模塊:
①上傳第三方模塊壓縮包,並解壓
ngx-fancyindex-v0.4.3.tar.gz
②編譯升級安裝,並升級
shell > tar zxvf ngx-fancyindex-v0.4.3.tar.gz
shell > tar xvf echo-nginx-module-0.61.tar.gz
shell > cd /root/soft/nginx-1.16.0
shell > ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --add-
module=/root/soft/ngx-fancyindex-0.4.3/ --add-module=/root/soft/echo-nginx-module-0.61
shell > make && make install && make upgrade
一、fancy-index模塊
使用第三方模塊插件,美化列表顯示效果
https://www.nginx.com/resources/wiki/modules/fancy_index/
https://github.com/aperezdc/ngx-fancyindex
第三方模塊列表顯示效果html
實現操做步驟:
①從新編譯安裝加載第三方模塊
安裝完成以後nginx
②配置實現git
③測試查看效果
測試配置文件,進行重載配置[若是是新編譯的軟件,就須要重啓,由於舊的版本里沒有加入新的第三方模塊]。若是模塊安裝完成,配置成功,就能夠看到以前圖片的效果了
github
二、echo模塊
做用:echo模塊經常使用來進行調試用,好比輸出打印Nginx默認系統變量
測試使用echo模塊
①修改配置文件web
②重載配置查看輸出信息正則表達式
2、發行版本
一、Nginx社區免費版
https://nginx.org/
二、NGINX+商業版
https://www.nginx.com/
三、淘寶的tengine
http://tengine.taobao.org/
tengine是alibaba公司,在nginx的基礎上,開發定製,更加服務本身業務的服務器軟件。後來進行了開源。
shell > tar xvf tengine-2.2.2.tar.gz
shell > cd tengine-2.2.2
shell > ./configure --prefix=/usr/local/tengine
shell > make && make install
查看軟件參數和加載的模塊redis
四、OpenResty
openresty 在nginx的基礎上,結合lua腳本實現高併發等web平臺。
WAF nginx+lua+redis 實現應用型防火牆
學習網址:http://openresty.org/cn/
安裝步驟:
shell > tar xvf openresty-1.13.6.2.tar.gz
shell > cd openresty-1.13.6.2
shell > ./configure --prefix=/usr/local/openresty
shell > make && make install
openresty實際仍是指向nginx,作了一個軟鏈接shell
查看版本號和默認編譯參數vim
測試使用一下模塊功能
使用lua模塊輸出一個頁面文字信息
3、URL匹配之location
Location 配置語法
http://nginx.org/en/docs/http/ngx_http_core_module.html#location
一、location [ = | ~ | ~* | ^~ ] uri { ... }
前綴+uri(字符串/正則表達式)
前綴的含義:
= :精確匹配(必須所有相等)
~ :大小寫敏感
~* :忽略大小寫
^~ :只需匹配uri部分
@ :內部服務跳轉
① = 精確匹配
location = / {
#規則
}
則匹配到 http://www.example.com/ 這種請求
② ~ 大小寫敏感
location ~ /Example/ {
#規則
}
請求示例 http://www.example.com/Example/ [成功] http://www.example.com/example/ [失敗]
③ ~* 大小寫忽略
location ~* /Example/ {
#規則
}
請求示例 http://www.example.com/Example/ [成功] http://www.example.com/example/ [成功]
④ ^~ 只匹配以 uri 開頭
location ^~ /img/ {
#規則
}
請求實例 以 /img/ 開頭的請求,都會匹配上 http://www.example.com/img/a.jpg [成功]
http://www.example.com/img/b.mp4 [成功]
http://www.example.com/bimg/b.mp4 [失敗]
http://www.example.com/Img/b.mp4 [失敗]
二、location @name { ... } @+name @,nginx內部跳轉
location /img/ {
error_page 404 = @img_err;
}
location @img_err {
# 規則
return 503;
}
以 /img/ 開頭的請求,若是連接的狀態爲 404。則會匹配到 @img_err 這條規則上 location匹配優先級
若是路徑是資源文件是存在的,會優先獲取資源文件
(location =) > (location 完整路徑) > (location ^~ 路徑) > (location , * 正則順序) > (location 部分起始路徑) >
(/)
4、URL重寫
ngx_http_rewrite_module模塊用於使用PCRE正則表達式更改請求URI,返回重定向,以及有條件地選擇配置
一、return
return 語法
返回服務器的狀態碼
語法:
return 服務器狀態值
該指令用於結束規則的執行並返回狀態碼給客戶端.
403 Forbidden.服務器已經理解請求,可是拒絕執行它
404 Not Found.請求失敗,請求所但願獲得的資源未在服務器上發現.404這個狀態碼被⼴泛應⽤於當服務器不
想揭示爲什麼請求被拒絕,或者沒有其餘適合的響應可⽤的狀況下.
500 Internal Server Error.服務器遇到⼀個不曾預料的情況,致使它沒法完成對請求的處理.⼀般來講,這個問題
都會在服務器的程序碼出錯時出現.
502 Bad Gateway.做爲網關或代理工做的服務器嘗試執行請求時,從上游服務器接收到無效的響應.
503 Service Unavailable.因爲臨時的服務器維護或過載,服務器當前沒法處理請求.這個情況是臨時的,而且將
在一段時間之後恢復.503狀態碼的存在並不意味着服務器在過載的時候必須使⽤它.某些服務器只不過是但願
拒絕客戶端的鏈接.
504 Gateway Timeout做爲網關或代理工做的服務器嘗試執行請求時,未能及時從上游服務器(URI標識出的服
務器,例如HTTP,FTP,LDAP)或輔助服務器(例如DNS)收到響應。
請求狀態碼:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
二、rewrite
rewrite語法 匹配到,替換爲其餘內容
語法 rewrite 匹配內容 替代內容 標記
官方文檔地址:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite
flag標記說明:
last #本條規則匹配完成後,繼續向下匹配新的location URI規則
break #本條規則匹配完成即終止,再也不匹配後面的任何規則
上面兩個flag,客戶端URL地址不會改變
下面兩個flag,客戶端的URL地址會發生改變
redirect #返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址
permanent #返回301永久重定向,瀏覽器地址欄會顯示跳轉後的URL地址多條rewrite,從上到下匹配,匹配到以後就不在匹配其餘rewrite規則。
5、URL相關案例實現
一、案例:資源重定向實現
需求:
訪問index.html,實際訪問到index.php,實現僞靜態
①修改配置
vim /usr/local/nginx/conf/nginx.conf
③重載配置測試訪問
默認配置是轉發,index.html不存在
配置以後效果
總結:實際不存在的文件,經過重寫URI規則,定向到一個存在的文件。
這個在實際工做中,經常用來seo優化的僞靜態的使用。實際是要把真實的後端的頁面,假裝爲靜態html頁面。
二、案例:域名重定向實現
需求:
把舊域名的來源,重定向到新的域名。
shop.devops.com升級域名到www.shop.com 須要用戶以後記住新域名,並使用。使用重定向實現,而且url也要跳轉顯示。
三、案例:防盜鏈原理和實現
需求:
web1服務器上資源文件
web2服務器常常連接顯示web1服務器圖片
用戶常常訪問web2服務器的圖片,覺得是web2本身的,結果web1每次耗費不少流量。
實際web1沒有從中得到效益
解決方案:
①圖片加水印
②經過判斷referer來源,肯定是否返回對應的資源文件
referer 本次請求的上次鏈接是什麼 上次的來源
語法:
valid_referers none blocked servername
none blocked 沒有referfer的狀況,直接訪問資源的狀況
if ($invalid_referer) {}
經過IP訪問的server 頁面中引入了shop域名的資源文件
配置shop的server端,判斷來源,若是來源和shop的域名不一致,就不返回資源
6、安全
一、反向代理
實現隱藏真實服務的操做,起到必定安全做用
二、隱藏版本號
①在http段加入server_tokens off
②重載配置測試訪問
三、CA httpsssh 公鑰 和 私鑰 8個步驟https 是http的一個加密協議,基於ssl套接字,把傳輸的信息進行加密。默認端口443CA 證書 部署https的時候,須要購買申請(還有一些免費)慢是由於,每次進行訪問的時候,須要校驗證書的有效性。鏈接國外的機構校驗。網慢https://www.cnblogs.com/tv151579/p/8268356.htmlhttps://my.oschina.net/zijian1315/blog/207311騰訊雲免費證書申請和使用:https://cloud.tencent.com/product/ssl/getting-startedhttps://cloud.tencent.com/document/product/400/4143