1. 程式人生 > >LNMP(3) 靜態文件不記錄日誌和過期時間、Nginx防盜鏈、Nginx訪問控制、解析php

LNMP(3) 靜態文件不記錄日誌和過期時間、Nginx防盜鏈、Nginx訪問控制、解析php

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