前端squid反向代理到nginx
nginx根據http_user_agent防DDOS
首先查看訪問日誌,找出可疑訪問 找到http_user_agent 的特徵,而後再做過濾
"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)Cache-Control: no-store, must-revalidate"
if ($http_user_agent ~ must-revalidate) {
return 503;
}
#這樣就返回503錯誤
location = / {
include proxy.conf;
if ( $http_user_agent ~* "MSIE 5.01" ) {
proxy_pass http://www.qq.com;
#access_log /usr/local/nginx/logs/k.log main;
}
proxy_pass http://windows.abc.com;
}
#判斷一下user-agent,若是是MSIE 5.01就把它丟到另一個地方去就能夠了,好比指向www.qq.com,看看能不能抗得住,哈哈
proxy_hide_header Cache-Control;
最後開回Cache-Control,訪問一下頁面
這下這個連接就緩存到前端squid了,應用服務器不會死機了
#########################################################
nginx中location模塊的詳細參數介紹
Nginx的Location能夠有如下幾個匹配:
1. = 嚴格匹配這個查詢。若是找到,中止搜索。
2. ^~ 匹配路徑的前綴,若是找到,中止搜索。
3. ~ 爲區分大小寫的正則匹配
4. ~* 爲不區分大小寫匹配
5.!~和!~*分別爲區分大小寫不匹配及不區分大小寫不匹配
文件及目錄匹配
* -f和!-f用來判斷是否存在文件
* -d和!-d用來判斷是否存在目錄
* -e和!-e用來判斷是否存在文件或目錄
* -x和!-x用來判斷文件是否可執行
一些可用的全局變量
nginx的全局變量參數解釋:
$arg_PARAMETER
#這個變量包含GET請求中,若是有變量PARAMETER時的值。
$args
#這個變量等於請求行中(GET請求)的參數,例如foo=123&bar=blahblah;
$binary_remote_addr
#二進制的客戶地址。
$body_bytes_sent
#響應時送出的body字節數數量。即便鏈接中斷,這個數據也是精確的。
$content_length
#請求頭中的Content-length字段。
$content_type
#請求頭中的Content-Type字段。
$cookie_COOKIE
#cookie COOKIE變量的值
$document_root
#當前請求在root指令中指定的值。
$document_uri
#與$uri相同。
$host
#請求主機頭字段,不然爲服務器名稱。
$hostname
#Set to the machine’s hostname as returned by gethostname
$http_HEADER
$is_args
#若是有$args參數,這個變量等於」?」,不然等於」",空值。
$http_user_agent
#客戶端agent信息
$http_cookie
#客戶端cookie信息
$limit_rate
#這個變量能夠限制鏈接速率。
$query_string
#與$args相同。
$request_body_file
#客戶端請求主體信息的臨時文件名。
$request_method
#客戶端請求的動做,一般爲GET或POST。
$remote_addr
#客戶端的IP地址。
$remote_port
#客戶端的端口。
$remote_user
#已經通過Auth Basic Module驗證的用戶名。
$request_completion
#若是請求結束,設置爲OK. 當請求未結束或若是該請求不是請求鏈串的最後一個時,爲空(Empty)。
$request_method
#GET或POST
$request_filename
#當前請求的文件路徑,由root或alias指令與URI請求生成。
$request_uri
#包含請求參數的原始URI,不包含主機名,如:」/foo/bar.php?arg=baz」。不能修改。
$scheme
#HTTP方法(如http,https)。
$server_protocol
#請求使用的協議,一般是HTTP/1.0或HTTP/1.1。
$server_addr
#服務器地址,在完成一次系統調用後能夠肯定這個值。
$server_name
#服務器名稱。
$server_port
#請求到達服務器的端口號。
$uri
#不帶請求參數的當前URI,$uri不包含主機名,如」/foo/bar.html」。該值有可能和$request_uri 不一致。$request_uri是瀏覽器發過來的值。該值是rewrite後的值。例如作了internal redirects後。
rewrite後面的flag能夠是:
last
break
redirect
permanent
proxy_pass http://localhost:80;
proxy_set_header Host $host;
能夠自動改變轉發之後的域名信息