日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx 正则 结尾 配置_nginx location 配置阐述优先级别使用说明-不当可能存在安全隐患...

發布時間:2024/1/23 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx 正则 结尾 配置_nginx location 配置阐述优先级别使用说明-不当可能存在安全隐患... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用nginx 有好幾年了,它的高性能,穩定性表現都很好。 這里也得到很多人的認可。 其中它的配置,有點像寫程序一樣,每行命令結尾一個";"號,語句塊用"{}"括起來。 配制好,直接nginx -t 檢查配制情況,配制成功,直接運行:service nginx reload .服務器沒有任何宕機情況下,實現平穩修改配置。

最近一直在做location 配制時候,遇到小麻煩,以下是個人學習一點體會。

1.location 匹配的優先級(來自實踐總結中)

(location =) > (location 完整路徑 >) >(location ^~ 路徑) >(location ~* 正則) >(location 路徑)

只要匹配到,其它的都會忽略,然后返回到改匹配。

用以下例子來測試:

#1 6 location / { 7 return 500; 8 } 9 10 #211 location /a/ {12 return 404;13 }14 15 #316 location ~* .jpg$ {17 return 403;18 }19 20 #421 location ^~ /a/ {22 return 402;23 }24 25 #526 location /a/1.jpg {27 return 401;28 }29 30 #631 location = /a/1.jpg {32 return 400;33 }34

說明測試時候:先要將#2全部注釋掉,不然會認為#2 與#4 完全一樣。會提示:重復配制

D:ginx-0.8.7>nginx -s reload[emerg]: duplicate location "/a/" in D:ginx-0.8.7/conf/nginx.conf:53

首先測試:每次都是訪問:http://localhost:9999/a/1.jpg (在windows 安裝測試,然后端口是9999) 文件a/1.jpg 根本不存在。關鍵是測試看頁面返回情況。

a.

400 Bad Request--------------------------------------------------------------------------------nginx/0.8.7

(圖一)

從測試中可以看到,優先級最高的是:= 號。 它會最先匹配到。

b.接下來我們 屏蔽掉 #6 如下:

#6# location = /a/1.jpg {# return 400;# }

然后在:D:ginx-0.8.7> nginx -s reload 訪問:http://localhost:9999/a/1.jpg

401 Authorization Required--------------------------------------------------------------------------------nginx/0.8.7

圖(2-2)

注意:從這個測試 發現 :沒有“=”情況下,location 后面直接接完整路徑是優先匹配。 通過測試發現,如果將:location /a/1.jpg 改成:location /a/1.jpg

會出現意外情況,直接出現是:return 402. 從這一點,可以推測到nginx 匹配優先是:網站路徑,并且不帶正則表達式的優先。

以上是本人通過測試,推測得到,如有問題,歡迎指正。

c.同理測試 屏蔽掉 #5 如下:注釋及重新加載同上.

#5# location /a/1.jpg {# return 401;# }

訪問:http://localhost:9999/a/1.jpg 返回如下結果。

402 Payment Required--------------------------------------------------------------------------------nginx/0.8.7

通過這個測試可以得出:location ^~ 優先級 高于 location ~* 優先級 ,其中:^~ 主要后面接路徑。

c.同理測試 屏蔽掉 #4 如下:注釋及重新加載同上.

#4# location ^~ /a/ {# return 402;# } 訪問:http://localhost:9999/a/1.jpg 返回如下結果。403 Forbidden--------------------------------------------------------------------------------nginx/0.8.7

從以上比較得到:正則優先 未帶任何批評符 的路徑匹配

d.同理測試 屏蔽掉 #3 如下:注釋及重新加載同上. 并且去掉#2 的注釋“#”

#2 location /a/ { return 404; } 訪問:http://localhost:9999/a/1.jpg 返回如下結果。404 Not Found--------------------------------------------------------------------------------nginx/0.8.7

比較有意思是:/a/ 與 / 應該是 同種類型的匹配表達式, 可以從中得到,該匹配順序是,將路徑從右匹配, 可以推測形如逐個字符,那個先匹配到,就是那個優先。 因此得到是:/a/ 優先于 / .

以上測試,是我測試結果,優先級別以以上規律。 在實際我們書寫中,經常會犯錯誤。 還記得前段時間:80后安全團隊曝nginx漏洞 其實,個人認為不能算是nginx 漏洞,只是,我們不了解nginx 配制規則,而出現一個配置上面致命漏洞而已。 其實,通過上面優先級,我們在配置時候可能也一樣經常犯一個致命錯誤。

#以下是隨便寫例子,個人可能各不相同#假設站點在:/home/www/html/目錄下,所有的php 及上傳文件都在這個目錄下面。location ~* .php$ { proxy_pass http://www.a.com; }location /upload/ { alias /home/www/html/upload/;}

而且,這個upload 目錄,是靜態目錄,我們想法是下面所有文件是不能夠執行的,包括php文件。

如果有用戶訪問:http://www.a.com/upload/1.css , 會直接顯示該css, 但是,如果有用戶訪問:http://www.a.com/upload/1.php 類似文件,正如上面所說,實際匹配到:~* .php$ 了。 upload 下面是執行了。

從這個里面,我們發現一個問題,實際沒有達到我們要求。 靜態目錄下面的文件一樣執行了。 這下比較麻煩了。 一旦出現個什么上存漏洞的,別人上存了一個php,我們還以為,我們配置是ok的。 覺得很安全,缺在不知不覺中被別人打開一扇門。

那么我們怎么樣修改呢?

location ~* .php$ { proxy_pass http://www.a.com; }location ^~ /upload/ { alias /home/www/html/upload/;}

對,就是必須用:"^~" ,這樣是不是就已經安全了呢。 如果你再訪問下:http://www.a.com/upload/1.php 你會發現,這段代碼源碼顯示出來了。 這個其實對于我們而言也是不想見到了。 一段顯示源碼,在各個搜索引擎,很容易通過所有特殊關鍵字,搜索到改文件的。

那么我們該怎么樣配置安全的上存目錄呢? 對,你想到了:限制允許的特殊文件類型。

改造如下:

location ~* .php$ { proxy_pass http://www.a.com; }location ^~ /upload/ {  if ($request_filename ! ~* .(jpg|jpeg|gif|png|swf|zip|rar|txt)$) {  return 403; } alias /home/www/html/upload/;}

只要不是滿足上面擴展名文件,就自動提示:403 不能訪問,有可以避免源代碼顯示。

剛才從匹配結果已經知道了,同級不帶任何匹配符的,是以右為準匹配。 那么,如果都用正則表達式,以什么方式匹配呢?

測試如下:(新建配置文件,server 包含)

location ~* .jpg$ { return 402; } location ~* 1.jpg$ { return 403; }

結果如下:

402 Payment Required--------------------------------------------------------------------------------nginx/0.8.7

看來是返回的是:402 上面一個呢。 按理論說,1.jpg 配置 比 .jpg 更準確,看來跟上面說的順序不同,那它會不會是那個在前以那個匹配呢? 我們再測試下:

location ~* 1.jpg$ { return 403; } location ~* .jpg$ { return 402; }

返回結果是:

403 Forbidden--------------------------------------------------------------------------------nginx/0.8.7

哈哈,恰好相反,看來我的推斷是正確的,如果都是正則,都能夠匹配,以配置文件出現順序來,誰在前誰優先。 一氣說了,不知道朋友你,明白我的思路嗎?這樣比較會很多很多,大家可以逐一測試。 熟悉location 配置,對于熟練運用,nginx 是一個必備基數。 因為,nginx 太靈活,也太流行了。上面的問題,也許朋友你,會遇到。希望對你有幫助。

總結

以上是生活随笔為你收集整理的nginx 正则 结尾 配置_nginx location 配置阐述优先级别使用说明-不当可能存在安全隐患...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。