LNMP(3) 靜態文件不記錄日誌和過期時間、Nginx防盜鏈、Nginx訪問控制、解析php
進入到虛擬主機配置文件 cd /usr/local/nginx/conf/vhost
編輯虛擬主機配置文件:vim test.com.conf 添加內容:
配置如下
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 7d; //過期時間
access_log off;
}
location ~ .*\.(js|css)$
{
expires 12h;
access_log off;
}
修改完配置文件後:
(1)測試配置文件是否正確:
/usr/local/nginx/sbin/nginx -t
(2)加載一下配置文件:
/usr/local/nginx/sbin/nginx -s reload
訪問測試:
1.進入到主機訪問目錄:cd /data/wwwroot/test.com
2.創建測試文件:
vim 1.gif vim 2.js
Nginx防盜鏈
(其實就referer)
進入到虛擬主機配置文件 cd /usr/local/nginx/conf/vhost
編輯虛擬主機配置文件:vim 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 ; //server_names可以不寫,設置白名單
if ($invalid_referer) {
return 403;
}
access_log off;
}
修改完配置文件後:
(1)測試配置文件是否正確:
/usr/local/nginx/sbin/nginx -t
(2)加載一下配置文件:
/usr/local/nginx/sbin/nginx -s reload
測試防盜鏈 (-e +referer)
1.(不是制定的referer時報403)
vhost]# curl -e "http://www.baidu.com" -x127.0.0.1:80 test.com/1.gif -I
2.(是制定的referer時訪問成功)
curl -e "http://www.test.com" -x127.0.0.1:80 test.com/1.gif -I
Nginx訪問控制(重要)
1.針對目錄做訪問
進入到虛擬主機配置文件 cd /usr/local/nginx/conf/vhost
編輯虛擬主機配置文件:vim test.com.conf 添加內容:
location /admin/ //針對/admin目錄做訪問控制
{
allow 192.168.136.133;
allow 127.0.0.1;
deny all;
}
(nginx中設置中不分,deny,allow 先後順序)
事前已經創建了我們的控制訪問目錄/admin/
修改完配置文件後:
(1)測試配置文件是否正確:
/usr/local/nginx/sbin/nginx -t
(2)加載一下配置文件:
/usr/local/nginx/sbin/nginx -s reload
測試:
(1)設置有允許白名單的ip,訪問成功:
curl -x127.0.0.1:80 test.com/admin/ -I
(2)設置在沒有允許的白名單的ip,訪問不成功:(403)
2.針對某些目錄以php結尾的文件做訪問控制()
.針對目錄做訪問
進入到虛擬主機配置文件 cd /usr/local/nginx/conf/vhost
編輯虛擬主機配置文件:vim test.com.conf 添加內容:
location ~ .*(upload|image)/.*\.php$
{
deny all;
}
修改完配置文件後:
(1)測試配置文件是否正確:
/usr/local/nginx/sbin/nginx -t
(2)加載一下配置文件:
/usr/local/nginx/sbin/nginx -s reload
測試:
1.mkdir /data/wwwroot/test.com/upload
2.在/upload/目錄下創建1.php且寫入內容“111”
echo "111" > /data/wwwroot/test.com/upload/1.php
訪問測試:
(1)訪問設置了訪問控制的upload目錄下的.php結尾的文件則403錯誤。
curl -x192.168.136.150:80 test.com/upload/1.php
(2)訪問設置了訪問控制的upload目錄下不是.php結尾的文件,則成功!
3.根據user_agent限制(防止cc攻擊,“蜘蛛”爬蟲)
進入到虛擬主機配置文件 cd /usr/local/nginx/conf/vhost
編輯虛擬主機配置文件:vim test.com.conf 添加內容:
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')
//加~* 匹配時不區分大小寫 ,
{
return 403;
}
deny all和return 403效果一樣
(針對Spider/3.0|YoudaoBot|Tomato,這種做訪問控制)
測試:(curl -A "")
(嚴格匹配,區分大小寫)
Nginx解析php相關配置
此時我們的test.com還是不能解析php的
測試
Nginx解析php步驟:
進入到虛擬主機配置文件 cd /usr/local/nginx/conf/vhost
編輯虛擬主機配置文件:vim test.com.conf 添加內容:
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock; //如果sock的路徑不正確,則會出現502
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
}
修改完配置文件後:
(1)測試配置文件是否正確:
/usr/local/nginx/sbin/nginx -t
(2)加載一下配置文件:
/usr/local/nginx/sbin/nginx -s reload
測試:
解析成功)
如果我們在虛擬主機配置文件中的sock文件出錯則解析時會出現502報錯
php-fpm的配置文件中定義.sock文件,及其路徑
虛擬主機中添加解析php 配置內容時兩者的sock文件應該一致。
(重啟php-fpm服務;/etc.init.d/php-fpm restart)
如果我們的 /usr/local/php-fpm/etc/php-fpm.conf 配置文件中監聽的:
不是: listen = /tmp/php-fcgi.sock
而是 :listen = 127.0.0.1:9000 是這種ip+端口
那麽我們在虛擬主機配置文件中解析php配置內容也相應的修改:
修改完配置文件後:
(1)測試配置文件是否正確:
/usr/local/nginx/sbin/nginx -t
(2)加載一下配置文件:
/usr/local/nginx/sbin/nginx -s reload
所以當我們訪問出現502報錯時,先要檢查
(1) /usr/local/php-fpm/etc/php-fpm.conf 配置文件中監聽的sock文件
還是監聽“ip+端口”
然後再虛擬主機配置文件中解析php配置內容也相應的修改
兩者是否一致
(2)查看虛擬主機配置文件中解析php配置內容
(/usr/local/nginx/conf/vhost/test.com.conf)
fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
這個內容的路徑是否是虛擬主機訪問文件路徑
這兩個圖中路徑一致才行。
3.如果監聽sock文件的話,權限要為666
listen mode:666
(502報錯,首先要看錯誤日誌)
LNMP(3) 靜態文件不記錄日誌和過期時間、Nginx防盜鏈、Nginx訪問控制、解析php