静态文件不记录日志和过期时间
进入到虚拟主机配置文件 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报错,首先要看错误日志)