12.13 Nginx防盗链
1.编辑配置文件,(可以和之前的配置结合起来)
# vim /usr/local/nginx/conf/vhost/test.com.conf
2. -t && -s reload
3.测试 //-e 用来模拟referer ,当它为baidu时,403;当它为test.com,正常访问,说明配置成功
12.14 Nginx访问控制
需求:访问/admin/目录的请求,只允许某几个IP访问,配置如下
1.针对目录
# vim /usr/local/nginx/conf/vhost/test.com.conf
//针对对admin目录只允许以下2个ip访问
测试
172.31.208.147时本机ip,为了试验先在配置文件里注释掉
访问,403,不允许访问admin目录
# curl -x172.31.208.147:80 test.com/admin/
# curl -x127.0.0.1:80 test.com/admin/ //可以正常访问
2.匹配正则
# vim /usr/local/nginx/conf/vhost/test.com.conf
这里匹配upload或image目录,以.php结尾的都给拒绝掉
试验
# mkdir /data/wwwroot/test.com/upload/
# echo "11111" > /data/wwwroot/test.com/upload/1.php
# curl -x127.0.0.1:80 test.com/upload/1.php
查看一下访问日志
#cat /tmp/1.log
3.根据user_agent限制
编辑配置文件
#vim /usr/local/nginx/conf/vhost/test.com.conf
检查语法重新加载
-t && -s reload
试验
# curl -A "YoudaoBotdadfd" -x127.0.0.1:80 test.com/
# curl # #curl -x127.0.0.1:80 test.com/
另外如果要user_agent不区分大小写,需要在~后加*
可以看到重新加载配置文件后,代码变为403了
12.15 Nginx解析php相关配置
nginx默认是不能解析php的
# vim /data/wwwroot/test.com/3.php //添加如下内容
# curl -x127.0.0.1:80 test.com/3.php //访问测试,不能解析
下面配置解析php
编辑配置文件
# vim /usr/local/nginx/conf/vhost/test.com.conf //添加如下方框中的内容
fastcgi_pass 用来指定php-fpm监听的地址或者socket
检查语法重新加载
# /usr/local/nginx/sbin/nginx -t
# /usr/local/nginx/sbin/nginx -s reload
测试
# curl -x127.0.0.1:80 test.com/3.php //可以解析php了
关于代码502的可能原因
有错误,看日志
首先要把日志记录模式改为debug
# vim /usr/local/nginx/conf/nginx.conf //修改完主配置文件要进行重启/etc/init.d/nginx restart
# tail /usr/local/nginx/logs/nginx_error.log
1.配置socket文件路径错误 //这里故意改错把f删掉
#vim /usr/local/nginx/conf/vhost/test.com.conf
.检查语法,重新加载
测试,可以看到代码是502
查看错误日志
2.php配置文件是监听端口,不监听socket,而nginx是监听socket
# vim /usr/local/php-fpm/etc/php-fpm.conf
# /usr/local/php-fpm/sbin/php-fpm -t
# /etc/init.d/php-fpm reload
# netstat -lntp
访问
#curl -x127.0.0.1:80 test.com/3.php //502
查看日志
改正这个问题需要修改php和nginx配置文件,使他们监听的内容一致,都是端口,或都是socket文件
这里来修改nginx进行监听端口,来改正
#vim /usr/local/nginx/conf/vhost/test.com.conf
访问测试,
3./data/wwwroot/test.com路径要写对,前后要对应
4.php配置文件中listen.mode要设置为666,不定义就会默认为660
下面监听socket并注释掉listen.mode
重启php服务再查看一下sock文件详情 ,可以看到普通用户(包括nginx的用户)是没有权限的
修改nginx配置文件仍监听socket,并进行访问测试,可以看到结果是502
日志显示权限不够
说明:因为socket文件默认权限是660,而nginx的用户和组都是nobody,因此默认是无法读取socket文件的,所以要进行权限设置为666。另一种方法就是,socket文件的属主。
5.还有一种特殊情况,就是php-fpm资源耗尽,这中情况需要去优化
12.16Nginx代理
代理应用场景:用户不能访问web服务器或者访问web服务器比较慢
配置方法
# cd /usr/local/nginx/conf/vhost
# vim proxy.conf //添加如下内容
检查语法重新加载-t && -s reload
测试,访问本机可以访问到论坛,配置成功