12.13 Nginx防盜鏈php
•配置以下,能夠和不記錄日誌和過時時間配置結合起來html
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$nginx
{web
expires 7d;數據庫
valid_referers none blocked server_names *.test.com ;vim
#這裏定義.test.com爲白名單瀏覽器
if ($invalid_referer) {服務器
return 403;curl
#這裏表示若是不在白名單內直接回饋403socket
}
access_log off;
}
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
curl -I -e "http://www.baidu.com/1.txt" -x127.0.0.1:80 test.com/1.gif 顯示403
curl -I -e "http://www.test.com/1.txt" -x127.0.0.1:80 test.com/1.gif 顯示200
說明配置成功
12.14 Nginx訪問控制
限制某些ip不能訪問,或者只容許一部分訪問
須要製做白名單,先allow寫ip地址,再把其餘ip所有限制deny all
配置以下:
location /admin/
{
allow 192.168.153.130;
allow 127.0.0.1;
deny all;
}
建立location指定的目錄
• 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.204.131:80 test.com/admin/1.html -I 這兩個ip均可以訪問到
上面配置ip也能夠是ip段,就能夠寫成allow 192.168.153.0/24
若是隻拒絕幾個ip的訪問就是
location /admin/
{
deny 192.168.188.1;
deny 192.168.8.8;
}
• 能夠匹配正則來限制
網站被黑,數據庫被盜竊,沒有禁止上傳圖片的php解析
這樣能夠把訪問的URL中帶有abc或者image的字符串,而且爲php請求的拒絕訪問
location ~ .*(abc|image)/.*\.php$
{
deny all;
}
測試:
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
mkdir /data/wwwroot/test.com/abc
echo "111" > /data/wwwroot/test.com/abc/1.php
curl -x127.0.0.1:80 test.com/abc/1.php -I
結果爲403拒絕訪問
echo "111" > /data/wwwroot/test.com/abc/1.txt
curl -x127.0.0.1:80 test.com/abc/1.php -I
結果200能夠訪問,實驗成功,禁止了abc的php解析
•根據user_agent限制,用的不少
需求:受到cc攻擊,要禁掉百度蜘蛛,想作被隱藏的網站
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')
{
return 403;
}
這裏~指匹配符號,只要有Spider/3.0或YoudaoBot或Tomato字符串的直接被拒絕,返回403
• deny all和return 403效果同樣
實驗:
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
模擬user_agent的方法:
-A 隨意指定本身此次訪問所宣稱的本身的瀏覽器信息
curl -A 「Tomatoabcabcabc」-x127.0.0.1:80 test.com/abc/1.txt
顯示爲403拒絕訪問
若是關鍵詞大小寫有改動就恢復200,須要忽略大小寫就~*(~後面加*)
12.15 Nginx解析php相關配置
•vim /usr/local/nginx/conf/vhost/test.com.conf配置以下:
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock; (此處錯誤出現502,找不到sock)
#fastcgi_pass 127.0.0.1:9000
#fastcgi_pass 兩種監聽格式,可是要保證Nginx和php-fpm中格式一致
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
#這裏的地址和最上面的root保持一致
}
• fastcgi_pass 用來指定php-fpm監聽的地址或者socket
• php文件目錄usr/local/php-fpm/var/php-fpm.log中sock地址要寫到虛擬主機配置文件fastcgi_pass中
不監聽sock換成監聽ip和端口,兩個配置文件修改後保持一致不然502,須要重啓
netstart -lntp 查看監聽端口
測試:
vim /data/wwwroot/test.com/3.php
寫入<?php phpinfo();
curl -x127.0.0.1:80 test.com/3.php 出現不能解析
配置後再次curl能夠解析
502報錯問題:
檢查虛擬主機配置文件sock和php文件目錄定義的sock是否一致
修改fastcgi_pass後報錯502
nginx錯誤日誌:cat /usr/local/nginx/logs/nginx_error.log
vim /usr/local/php-fpm/etc/php-fpm.conf 查看php文件目錄定義的sock
修改成監聽ip端口
查看端口是否監聽
而後去修改虛擬主機配置文件
兩邊配置文件修改完成,這時curl -x127.0.0.1:80 test.com/3.php解析成功
此外502還有一種可能,php-fpm資源耗盡,查詢很慢,解決爲優化
12.16 Nginx代理
用戶須要訪問web服務器,須要找一箇中間者,中間者與兩面都互通,就能作一個代理者
中國到美國很慢,到香港快,香港到美國快,就能夠經過香港代理訪問美國服務器
建立新的配置文件
該虛擬主機只用做代理服務器,不須要訪問本地文件,因此不須要設置站點根目錄
• 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/;
#這裏是告訴Nginx代理服務器,真正要被訪問的web服務器ip是多少
proxy_set_header Host $host;
#Host指的是要訪問的域名servername,就是代理服務器真正訪問的域名ask.apelearn.com
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
代理先後對比
curl -x127.0.0.1:80 ask.apelearn.com/robots.tx
顯示爲404
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
curl -x127.0.0.1:80 ask.apelearn.com/robots.txt
顯示成功
這裏測試是指經過本地ip訪問到遠程站點,這裏設置的代理服務器是虛擬機,web服務器是阿銘論壇
出現代理需求就定義遠程服務端,就是web服務器的ip
擴展
http://ask.apelearn.com/question/9109502問題彙總
http://blog.lishiming.net/?p=100location優先級