1. 程式人生 > >nginx防盜鏈、訪問控制、解析php、代理服務

nginx防盜鏈、訪問控制、解析php、代理服務

11月28日任務

12.13 Nginx防盜鏈
12.14 Nginx訪問控制
12.15 Nginx解析php相關配置
12.16 Nginx代理

1.Nginx防盜鏈

示例一:

  • 配置如下,可以和上面的配置結合起來
  • vi /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 ; 定義白名單    

if ($invalid_referer) {         如果不是白名單,返回403

return 403;    

   }    

access_log off;

}

  • 配置完成如圖

  • -t && reload 檢測語法並重新載入配置檔案

  • 用curl 測試一下,-e 指定

 

2.Nginx訪問控制

示例一:

  • 需求:訪問/admin/目錄的請求,只允許某幾個IP訪問,配置如下:
  • vi /usr/local/nginx/conf/vhost/test.com.conf

location /admin/

{    

allow 192.168.133.1;    

allow 127.0.0.1;    

deny all;

}  

  • mkdir /data/wwwroot/test.com/admin/  
  • echo “test,test”>/data/wwwroot/test.com/admin/1.html  
  • -t && -s reload  檢查語法並重新載入配置檔案
  • 測試:
  • curl -x127.0.0.1:80 test.com/admin/1.html -I  

  • curl -x192.168.133.130:80 test.com/admin/1.html -I

  • curl -x 192.168.142.128:80 test.com/admin/

 

示例二:禁止解析php

  • 可以匹配正則
  • vi /usr/local/nginx/conf/vhost/test.com.conf

location ~ .*(abc|image)/.*\.php$

{        

deny all;

}

  • -t && reload 檢測語法,並重新載入配置檔案

  • 用curl測試一下

 

示例三:根據user-agent限制

  • vi /usr/local/nginx/conf/vhost/test.com.conf

if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')

{      

return 403;

}  

  • deny all和return 403效果一樣
  • -t && reload 檢測語法,並重新載入配置檔案

  • 用curl 檢測一下

  • 如果想忽略大小寫,就如下在~ 後新增一個*號就行了

 

 

3.Nginx解析PHP相關配置

示例一:

  • vi /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 用來指定php-fpm監聽的地址或者socket
  •  

4.Nginx代理

示例一:

  • cd /usr/local/nginx/conf/vhost  進入目錄下
  • vim proxy.conf //加入如下內容

server

{    

listen 80;    

server_name ask.apelearn.com;     定義一個域名

location /    

{        

proxy_pass      http://121.201.9.155/;         配置真實IP

proxy_set_header Host   $host;       要訪問的域名 

proxy_set_header X-Real-IP      $remote_addr;   指定ip的 

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    

   }

}

  • /use/local/nginx/sbin/nginx -t  檢測語法錯誤
  • /use/local/nginx/sbin/nginx -s reload 重新載入一下配置檔案
  • curl 測試一下,訪問成功,通過本地地址訪問到遠端的網址