lnmp(四)——nginx防盜鏈、訪問控制、解析php、代理服務
12.13 Nginx防盜鏈
12.14 Nginx訪問控制
12.15 Nginx解析php相關配置
12.16 Nginx代理
12.13 Nginx防盜鏈
配置如下,可以和靜態檔案不記錄日誌的配置結合起來:
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) { return 403; } access_log off; }
先定義valid_referers白名單為一級域名test.com,下面是條件判斷,如果訪問域名不為白名單,則返回403狀態。
12.14 Nginx訪問控制
需求:訪問/admin/目錄的請求,只允許某幾個IP訪問,配置如下:
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 -
和apache不一樣,nginx對allow、deny語句匹配就執行,即找到第一個匹配的條件就不再判斷後面對語句。
可以匹配正則
location ~ .*(abc|image)/.*\.php$
{
deny all;
}
上面例子deny了abc或amage目錄下對php檔案。打到了apache禁止某目錄解析php的效果。
根據user_agent限制
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')
{
return 403;
}
deny all和return 403效果一樣。
12.15 Nginx解析php相關配置
配置如下:
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。如果不一致或者寫錯,就會返回502狀態碼。配置一致指的是和php-fpm的配置檔案中規定對監聽途徑一致。還有一種可能導致502,就是資源耗盡,比如mysql讀取很慢nginx卡死。這需要優化架構、提升硬體等措施。
此外,在php5.4以後對版本,如果監聽socket,需要在php-fpm配置檔案中寫上“listen.mode=666”。否則/tmp/php-fcgi.sock預設許可權為440,屬主、屬組都是root,所以訪問時會被許可權拒絕。
12.16 Nginx代理
web伺服器只有私網,使用者不在私網內,這時可以通過nginx代理訪問web伺服器。也就是說nginx代理連線公網和私網,公網的使用者可以通過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/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
proxy_pass是要訪問的地址。proxy_set_header表示訪問的域名與上面定義對server_name一致。