1. 程式人生 > >nginx防盜鏈+訪問控制+限制指定目錄運行php+解析支持php+現在user_agent

nginx防盜鏈+訪問控制+限制指定目錄運行php+解析支持php+現在user_agent

訪問控制 防盜鏈 限制目錄允許php 支持php 限制agent

nginx防盜鏈

作用:防止其他網站引用本web站圖片與視頻資源,導致本站流量過大,從而造成不必要的經濟開支;
比如:本網站test.com有圖片文件1.gif,而B網站使用test.com/1.gif 引用我們的圖片,那麽本網站的圖片訪問就會上升,但是帶寬會增加,訪問test.com的用戶量卻沒有增加,出口帶寬成本缺增加了;

編輯虛擬配置文件

vim /usr/local/nginx/conf/vhost/test.com.conf

增加代碼

location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$
{
    expires 7d;
    valid_referers none blocked server_names  *.test.com ;        //定義白名單為*.test.com,如果不是*.test.com就不允許
    if ($invalid_referer) {
        return 403;
    }
    access_log off;
}

註意:如果有配置靜態文件失效時間與不記錄日誌,一定要註釋或先刪除,這裏是重復的;

檢測與生效

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

測試

正常訪問模式

curl -x127.0.0.1:80 test.com/2.doc -I
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Thu, 15 Mar 2018 10:13:16 GMT
Content-Type: application/msword
Content-Length: 0
Last-Modified: Thu, 15 Mar 2018 10:12:05 GMT
Connection: keep-alive
ETag: "5aaa46f5-0"
Expires: Thu, 22 Mar 2018 10:13:16 GMT
Cache-Control: max-age=604800
Accept-Ranges: bytes

模擬其他網站盜用

curl -e "http://www.baidu.com"; -x127.0.0.1:80 test.com/2.doc -I
HTTP/1.1 403 Forbidden
Server: nginx/1.12.2
Date: Thu, 15 Mar 2018 10:15:42 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive

nginx訪問控制

需求:訪問/admin/目錄的請求,只允許某幾個ip訪問;

編輯虛擬配置文件

vim /usr/local/nginx/conf/vhost/test.com.conf

增加代碼


    location /admin/        //定義訪問/admin/目錄規則
    {
        allow 127.0.0.1;        //允許127.0.0.1訪問
        allow 192.168.188.1;        //允許192.168.188.1訪問
        deny all;                    //拒絕所有訪問;一定要先允許再拒絕所有;
    }   

檢測與生效

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

測試

使用白名單訪問

curl -x127.0.0.1:80 test.com/admin/admin.html -I

HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Thu, 15 Mar 2018 10:38:25 GMT
Content-Type: text/html
Content-Length: 34
Last-Modified: Tue, 13 Mar 2018 12:25:30 GMT
Connection: keep-alive
ETag: "5aa7c33a-22"
Accept-Ranges: bytes

使用非白名單訪問

curl -x192.168.188.2:80 test.com/admin/admin.html -I
HTTP/1.1 403 Forbidden
Server: nginx/1.12.2
Date: Thu, 15 Mar 2018 10:38:38 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive

限制目錄運行php

編輯虛擬配置文件

vim /usr/local/nginx/conf/vhost/test.com.conf

location ~ .*(abc|image)/.*\.php$
{
        deny all;
}

檢測生效

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

測試

訪問curl訪問限制abc目錄下的php,403禁止訪問

curl -x127.0.0.1:80 test.com/abc/a.php -I

HTTP/1.1 403 Forbidden
Server: nginx/1.12.2
Date: Thu, 15 Mar 2018 12:42:20 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive

限制user_agent偽裝名稱就行ddos訪問攻擊

編輯虛擬配置文件

vim /usr/local/nginx/conf/vhost/test.com.conf

代碼:

if ($http_user_agent ~* ‘Spider/3.0|YoudaoBot|Tomato‘)
{
      return 403;
}

*註意:代碼代表不區分大小寫,~為匹配的意思;**

檢測與生效

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

測試

定義user_agent名為Tomato123就行訪問,禁止訪問403;

curl -A "Tomato123" -x127.0.0.1:80 test.com/1.html -I
HTTP/1.1 403 Forbidden
Server: nginx/1.12.2
Date: Thu, 15 Mar 2018 12:47:04 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive

nginx解析支持php

編輯虛擬配置文件

vim /usr/local/nginx/conf/vhost/test.com.conf

代碼

location ~ \.php$
    {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-fcgi.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
    }

註意: fastcgi_pass unix:/tmp/php-fcgi.sock;
這個sock目錄必須和/usr/local/php-fpm/etc/php-fpm.conf文件中的listen = /tmp/php-fcgi.sock必須一致;
否則錯誤502;
如果php-fpm.conf文件中的不是監聽sock而是ip地址和端口,比如listen = 127.0.0.1:9000,
那麽test.com.conf中就需要改為fastcgi_pass 127.0.0.1:9000;

檢測生效

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

nginx防盜鏈+訪問控制+限制指定目錄運行php+解析支持php+現在user_agent