『壹』 nginx 配置限制源地址訪問
F5要設置一下,把真實的IP地址透傳給後端,不然的話,後端的設備獲取的是內網地址。
查了一下F5設置透傳的功能,不知道在是否有效,你可以驗證一下。
具體步驟
1:Local Traffic-Profiles-Http-改「Insert XForwarded For」為Enable
2:Local Traffic-Virtual servers-點擊需要改動的VS-將Type選項更改為Standard-將HTTP Profile 選項更改為Http
『貳』 nginx http 403 禁止訪問怎麼解決
通常顯示403我立馬都會想到路徑配置不對,但我仔細看了一下,目錄路徑沒問題:
nginx.conf:
復制代碼代碼如下:
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /root/html;
index index.html index.htm;
}
}
系統中的路徑查詢結果:
復制代碼代碼如下:
[root@lizhong html]# ll /root/html/
總用量 4
-rw-r--r-- 1 root root 3 4月 18 11:07 index.html
目錄時存在,重啟nginx還是這個錯誤,後來想到是不是許可權問題?於是在nginx.conf頭部加入一行:
復制代碼代碼如下:
user root;
重啟nginx再訪問,就可以正常訪問了
『叄』 nginx怎麼限制客戶端訪問頻次與訪問次數
如何設置能限制某個IP某一時間段的訪問次數是一個讓人頭疼的問題,特別面對惡意的ddos攻擊的時候。其中CC攻擊(Challenge Collapsar)是DDOS(分布式拒絕服務)的一種,也是一種常見的網站攻擊方法,攻擊者通過代理伺服器或者肉雞向向受害主機不停地發大量數據包,造成對方伺服器資源耗盡,一直到宕機崩潰。
cc攻擊一般就是使用有限的ip數對伺服器頻繁發送數據來達到攻擊的目的,nginx可以通過HttpLimitReqMol和HttpLimitZoneMole配置來限制ip在同一時間段的訪問次數來防cc攻擊。
HttpLimitReqMol用來限制連單位時間內連接數的模塊,使用limit_req_zone和limit_req指令配合使用來達到限制。一旦並發連接超過指定數量,就會返回503錯誤。
HttpLimitConnMol用來限制單個ip的並發連接數,使用limit_zone和limit_conn指令
這兩個模塊的區別前一個是對一段時間內的連接數限制,後者是對同一時刻的連接數限制
文章目錄
1 HttpLimitReqMol 限制某一段時間內同一ip訪問數實例
2 HttpLimitZoneMole 限制並發連接數實例
3 nginx白名單設置
HttpLimitReqMol 限制某一段時間內同一ip訪問數實例
http{
...
#定義一個名為allips的limit_req_zone用來存儲session,大小是10M內存,
#以$binary_remote_addr 為key,限制平均每秒的請求為20個,
#1M能存儲16000個狀態,rete的值必須為整數,
#如果限制兩秒鍾一個請求,可以設置成30r/m
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
...
server{
...
location {
...
#限制每ip每秒不超過20個請求,漏桶數burst為5
#brust的意思就是,如果第1秒、2,3,4秒請求為19個,
#第5秒的請求為25個是被允許的。
#但是如果你第1秒就25個請求,第2秒超過20的請求返回503錯誤。
#nodelay,如果不設置該選項,嚴格使用平均速率限制請求數,
#第1秒25個請求時,5個請求放到第2秒執行,
#設置nodelay,25個請求將在第1秒執行。
limit_req zone=allips burst=5 nodelay;
...
}
...
}
...
}
『肆』 nginx 只讓php入口文件訪問,其他php文件禁止直接訪問
你用的系統是微擎嗎?
正常來說,除了這兩個php文件,和回調用的介面外,其它php都是不能直接訪問的,文件頭有常量判斷,未定義就退出了。
所以你的系統有上傳漏洞,應該檢查是哪裡出了問題,並去修復一下。可以從以下幾點著手:
上傳許可權僅提供給已登錄會員,在上傳介面中判斷未登錄狀態的,直接返回錯誤信息
上傳文件類型限制,如果需要的是圖片,嚴格限制圖片類型,並做圖片規格檢測(gd庫就可以處理),不符合的不保存文件
文件名處理,不要使用客戶端上傳的文件名保存,而是根據規則 生成一個隨機的名字保存
上傳頻率限制(根據會員限制),比如,一個小時內限制上傳5張,一天限制100張,可以有效防止黑客利用上傳介面填充垃圾文件到你的伺服器
如果可行,對上傳文件做一個臨時機制,如上傳的文件先放到臨時文件夾,資料保存的時候,把文件處理一下,移動到正常的附件目錄。這樣就可以定期清理臨時文件夾,防止上傳後沒使用的文件過多佔用伺服器空間。
不過這個功能改起來會復雜一點,要處理所有使用到上傳功能的介面。
以上幾點處理好,被上傳可執行文件的問題基本上可以杜絕了
而你的解決方案,是只治標不治本的方案
『伍』 nginx怎麼設置指定目錄ip訪問限制
nginx中針對目錄進行IP限制 ,這里以phpmyadmin目錄只能讓內網IP訪問,而外網不能訪問的配置方法。
nginxphpmyadmin針對內網ip用戶開放、外網ip用戶關閉(在前面的配置中,location ~ ^/目錄/使用正則, 優先順序高於location /的配置,所以nginx無法對首頁進行解析)
代碼如下:
server{
listen80;
server_nameexample.com;
access_loglogs/access.logmain;
location/{
roothtml;
indexindex.phpindex.htmlindex.htm;
}
location~^/phpmyadmin/{
allow192.168.1.0/24;
denyall;
location~.*.(php|php5)?${
root/var/mailapp/nginx/html;
fastcgi_pass127.0.0.1:9000;
fastcgi_indexindex.php;
includefastcgi_params;
}
}
location~.*.(php|php5)?${
root/opt/nginx/html;
fastcgi_pass127.0.0.1:9000;
fastcgi_indexindex.php;
includefastcgi_params;
}
}
『陸』 Nginx基礎篇----虛擬主機、日誌、模塊、請求限制
在企業中,我們有很多的業務服務A,B,C等等,按照最最傳統的財大氣粗方式就是在一台機器上搭建一個Nginx,並且一個Nginx只為一個業務進行服務,如下圖所示,我們有3個業務服務,我們就在3個機器上搭建3個Nginx,這顯然是很浪費資源的一種不合理方式。
虛擬主機的方式是指,我們在同一個Nginx上運行多套單獨服務,而且這些服務是獨立的,如下圖所示:
基於主機多IP的方式有兩種:
第一步 :在單網卡上添加多個IP--ip a add ip地址 設備名
第二步 :我們找到nginx.conf中的http中的include的配置,找到其include的文件路徑
第三步 :找到默認配置文件,進行復制,將server中的listen進行改動,改為ip:port,在這里如果我們要為3個業務服務的話,我們就設置三個.conf的配置文件,每個配置文件中的ip不同即可。
第四步 :nginx -s stop -c /etc/nginx/nginx.conf
nginx -s表示給nginx的主進程發送信號,停止應用。-c表示啟動的時候使用哪個配置文件。
第一步 :我們找到nginx.conf中的http中的include的配置,找到其include的文件路徑
第二步 :找到默認配置文件,進行復制,將server中的listen 埠進行改動即可,每個配置文件中的埠不同即可。
第三步 :nginx -tc /etc/nginx/nginx.conf 對剛才修改的配置文件進行語法檢查
第四步 :nginx -c /etc/nginx/nginx.conf 啟動nginx
更改server_name :
Nginx的日誌類型有error.log和access_log兩類。error.log用於記錄錯誤類型的日誌,access_log記錄的是請求訪問的相關的日誌。Nginx使用了log_format把各種類型的變數進行組織,然後記錄到access_log當中去。
log_format只能配置到http模塊下,所以我們看到nginx.conf中,會看到log_format的使用方式如下圖所示:
Nginx的模塊分為官方的模塊和第三方的模塊,我們可以通過命令行nginx -V看到很多的--with-XXXX,這些就是Nginx中的模塊。
編譯選項--with-http_stub_status_mole,用於展示Nginx當前處理連接的狀態。這個模塊默認是沒有打開的,它必須要用戶顯示的server和location模塊中進行配置。
我們在nginx.conf中配置好後,通過IP:PORT/mystatus進行訪問,會看到以下結果:
該模塊使用的比較少,它表示是從目錄中隨機選取一個主頁。語法規則 random_index on | off,默認情況下是random_index off;只能放在location的上下文中。
這個模塊也用的不多,它主要用於對http的響應內容作替換。包含了很多用法:
sub_filter string replacement 默認是不開啟的,可以用在http,server,location中,作用是替換html中的字元。
sub_filter_last_modified on | off,默認是off,可以用在http,server,location中,作用是否阻止response header中寫入Last-Modified,防止緩存,默認是off,即防止緩存。
sub_filter_once on | off,默認是on,可以用在http,server,location中,作用sub_filter指令是執行一次,還是重復執行,默認是只執行一次。
Nginx中可以對連接頻率和請求頻率做限制。其中連接頻率限制的模塊是limit_conn_mole,請求頻率限制的模塊是limit_req_mole。
請求和連接到底有什麼區別呢?我們知道HTTP協議是建立在TCP協議之上的,客戶端在向服務端發起請求的時候,必須先建立三次握手連接,建立完連接之後才開始發送請求,為了保持這個連接我們使用FIN和ACK,這樣就可以在一個連接中多次發起請求,因此我們可以說HTTP請求建立在一次TCP連接基礎上,一次TCP請求至少產生一次HTTP請求。
連接限制的語法:
定義空間:
limit_conn_zone key zone=name:size 默認是沒有的,只能在http中配置,如果說我們想對用戶的IP地址做限制,那麼這里的key我們可以配置成$remote_addr,這里的name可以隨便命名,size設置大小
limit_conn zone number;這里的zone必須和上面的limit_conn_zone中的name對應,number表示的是連接數,默認是沒有的,可以在http,server,location中配置。
請求限制的語法:
定義空間:
limit_req_zone key zone=name:size rate=rate默認是沒有的,只能在http中配置
limit_req zone name [burst=number] [nodelay];這里的zone必須和上面的limit_req_zone中的name對應,number表示的是連接數,默認是沒有的,可以在http,server,location中配置;burst爆發的意思,這個配置的意思是設置一個大小為N的緩沖區,當有大量請求(爆發)過來時,超過了訪問頻次限制的請求可以先放到這個緩沖區內;nodelay,如果設置,超過訪問頻次而且緩沖區也滿了的時候就會直接返回503,如果沒有設置,則所有請求會等待排隊.
$binary_remote_addr是限制同一客戶端ip地址,binary_remote_addr和remote_addr其實是一樣的,但是binary_remote_addr要更節省空間。1m 可以儲存 32000 個並發會話。zone=req_zone:1m表示生成一個大小為1M,名字為req_one的內存區域,用來存儲訪問的頻次信息;rate=1r/s表示允許相同標識的客戶端的訪問頻次,這里限制的是每秒1次,還可以有比如30r/m的。這里我使用abtest來演示一下各種情況:
配置每秒鍾最多一次請求:
使用abtest發起請求,設置並發數20,發起20次請求。測試結果,成功1次,失敗19次,符合預期:
查看nginx錯誤日誌,圖中剛好有19個error記錄,而且是被限制了,符合預期:
設置一個大小為3的緩沖區,超過訪問頻次限制的請求將會放入到緩沖區中:
使用abtest發起請求,設置並發數20,發起20次請求。測試結果,成功4次,失敗16次,符合預期,因為第一次成功後,超過了請求限制,放了3個請求到緩沖區中,所以總共成功4個:
查看nginx錯誤日誌,圖中剛好有16個error記錄,而且是被限制了,符合預期:
設置最大連接數為1:
使用abtest發起請求,設置並發數20,發起20次請求。測試結果,成功20次,失敗0次,符合預期:
查看nginx錯誤日誌,無任何錯誤日誌,符合預期。
nginx的http_access_mole模塊實現的,相關語法如下圖所示:
~表示模式匹配,這里我們表示凡是訪問admin.html的請求,阻止180.158.232.219的訪問,同時允許所有的IP訪問。結果如下圖所示:
請求成功:
是nginx的http_auth_basic_mole模塊實現的,使用方式可以具體參考 http://nginx.org/en/docs/http/ngx_http_auth_basic_mole.html 這里不再贅述
Nginx的基礎篇就講到這里,歡迎大家指正,下一篇文章我將介紹如何使用Nginx作為靜態資源Web服務。
『柒』 nginx怎樣設置禁止訪問某類文件
dwt 和lib是文件還是文件夾啊
文件類型例子:
location ~* /Batch/.*\.php$ {
deny all;
}
目錄例子
location /Batch/ {
deny all;
}
『捌』 nginx url 請求地址能夠發現圖片,但是卻不能訪問
伺服器端返回404,是因為對應目錄下的文件未找到
『玖』 如何突破nginx後台ip訪問限制
一、伺服器全局限IP
#vi nginx.conf
allow 10.115.0.116; #允許的IP
deny all;
二、站點限IP
#vi vhosts.conf
站點全局限IP:
location / {
index index.html index.htm index.php;
allow 10.115.0.116;
deny all;
站點目錄限制
location ^~ /test/ {
allow 10.115.0.116;
deny all;
注意事項:
1. deny 一定要加一個ip,否則直接跳轉到403,不往下執行了;如果403默認頁是同一域名下,會造成死循環訪問;
2. allow的ip段
從允許訪問的段位從小到大排列,如127.0.0.0/24 下面才能是10.10.0.0/16
24表示子網掩碼:255.255.255.0
16表示子網掩碼:255.255.0.0
8表示子網掩碼:255.0.0.0
3. deny all;結尾 表示除了上面allow的其他都禁止
如:
deny 192.168.1.1;
allow 127.0.0.0/24;
allo w 192.168.0.0/16;
allow 10.10.0.0/16;
deny all;
『拾』 nginx 怎麼限制訪問
nginx如何限制指定ip訪問?對於NGINX這個後起之秀的反向代理的Http服務軟體,相信做系統管理人員一定不會陌生,便很多時候,對於如何限制指定IP地址訪問NGINX伺服器,我想分享一下這個知識點;
如圖示,首先我們安裝好一台LNMP伺服器:
可以看到,已經出現403 Forbidden,說明此段IP地址已經不能訪問此站;
這里只是講了一種nginx如何限制指定ip訪問站點的方法,其實在實際當中,我們往往是指定某個IP訪問某個站點或限制某個IP訪問某個站點的某個目錄或文件;大家可以舉一返三;