Nginx使用


一、第三方模塊使用

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
1、fancy-index模塊
使用第三方模塊插件,美化列表顯示效果
https://www.nginx.com/resources/wiki/modules/fancy_index/
https://github.com/aperezdc/ngx-fancyindex
第三方模塊列表顯示效果

實現操作步驟:
①重新編譯安裝加載第三方模塊
安裝完成之后

②配置實現

③測試查看效果
測試配置文件,進行重載配置[如果是新編譯的軟件,就需要重啟,因為舊的版本里沒有加入新的第三方模塊]。如果模塊安裝完成,配置成功,就可以看到之前圖片的效果了

2、echo模塊
作用:echo模塊常用來進行調試用,比如輸出打印Nginx默認系統變量
測試使用echo模塊
①修改配置文件

②重載配置查看輸出信息

二、發行版本
1、Nginx社區免費版
https://nginx.org/
2、NGINX+商業版
https://www.nginx.com/
3、淘寶的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
查看軟件參數和加載的模塊

4、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,做了一個軟連接

查看版本號和默認編譯參數

測試使用一下模塊功能
使用lua模塊輸出一個頁面文字信息

三、URL匹配之location
Location 配置語法
http://nginx.org/en/docs/http/ngx_http_core_module.html#location
1、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 [失敗]
2、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 部分起始路徑) >
(/)
四、URL重寫
ngx_http_rewrite_module模塊用於使用PCRE正則表達式更改請求URI,返回重定向,以及有條件地選擇配置
1、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
2、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規則。
五、URL相關案例實現
1、案例:資源重定向實現
需求:
訪問index.html,實際訪問到index.php,實現偽靜態
①修改配置
vim /usr/local/nginx/conf/nginx.conf

③重載配置測試訪問
默認配置是轉發,index.html不存在

 

配置之后效果

 

總結:實際不存在的文件,通過重寫URI規則,定向到一個存在的文件。
這個在實際工作中,常常用來seo優化的偽靜態的使用。實際是要把真實的后端的頁面,偽裝為靜態html頁面。
2、案例:域名重定向實現
需求:
把舊域名的來源,重定向到新的域名。

shop.devops.com升級域名到www.shop.com 需要用戶之后記住新域名,並使用。使用重定向實現,並且url也要跳轉顯示。

3、案例:防盜鏈原理和實現
需求:
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的域名不一致,就不返回資源

六、安全
1、反向代理
實現隱藏真實服務的操作,起到一定安全作用
2、隱藏版本號
①在http段加入server_tokens off

②重載配置測試訪問

3、CA https
ssh 公鑰 和 私鑰 8個步驟
https 是http的一個加密協議,基於ssl套接字,把傳輸的信息進行加密。默認端口443
CA 證書 部署https的時候,需要購買申請(還有一些免費)
慢是因為,每次進行訪問的時候,需要校驗證書的有效性。連接國外的機構校驗。網慢
https://www.cnblogs.com/tv151579/p/8268356.html
https://my.oschina.net/zijian1315/blog/207311
騰訊雲免費證書申請和使用:
https://cloud.tencent.com/product/ssl/getting-started
https://cloud.tencent.com/document/product/400/4143


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM