码迷,mamicode.com
首页 > Web开发 > 详细

Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

时间:2018-04-27 02:36:05      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:nginx

Nginx防盗链首先进入到/usr/local/nginx/conf/vhost/目录下,编辑配置文件 vim test.com.confvim 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 ; if ($invalid_referer) { return 403; } access_log off;} valid_referers none blocked server_names *.test.com ; if ($invalid_referer) { return 403;这时防盗链的核心部分,第一行的意义为定义白名单,第二行是如果不匹配,第三行是状态码。输入完后保存,检查语法,重新加载。 Nginx访问控制 和httpd一样,Nginx也需要限制某些IP不能访问或者只允许某些IP访问,配制方法和httpd很像。但更加简洁了。不需要像httpd全部都历一遍。
配置访问控制还是要编辑虚拟主机的配置文件
/usr/local/nginx/conf/vhost/
然后再最后面加上访问控制的配置
location /admin/
{
allow 192.168.1.107;
allow 127.0.0.1;
deny all;
}
我们做白名单是时候一定要先allow后deny。allow是允许的意思,deny是拒绝的意思。在每个语句结束的时候一定要用“;”结束。
然后我们做一个实验,创建一个目录mkdir /data/wwwroot/test.com/admin/
然后在里面写入内容
echo “test,test”>/data/wwwroot/test.com/admin/1.html
然后我们做测试
curl -x 127.0.0.1:80 -I test.com/admin/1.html
HTTP/1.1 200 OK
curl -x 192.168.1.107:80 -I test.com/admin/1.html
HTTP/1.1 200 OK
而输入其他的IP访问就不成功了,这就是限制ip访问。这是针对目录的。

我们还可以按照正则去限制它的访问
location ~ .(upload|image)/..php$
{
deny all;
}
小括号中的分隔符“|”是或者的意思,这样就可以将访问的URL中带有关键字的字符串,并且是php的请求禁止访问。这样做的目的是将上传文件的目录禁止解析php,目的是保证安全。
然后我们做一个实验。
首先创建一个upload目录,在里面写一个php的文件,然后访问
curl -x192.168.1.107:80 -I test.com/upload/1.php
HTTP/1.1 403 Forbidden
结果是无法访问,我们的目的也达成了。

如果我们不想让别人知道我们的网站,就可以根据user_agent限制,就像我们的网站被隐藏了一样。
if ($http_user_agent ~ ‘Spider/3.0|YoudaoBot|Tomato‘)
{
return 403;
}
其中~后面的“
”是忽略大小写。

Nginx解析php相关配置
在lamp中,php是作为httpd的一个模块出现,只要模块被加载,就可以解析php脚本了。而在lnmp中,php是作为一个服务(php-fpm)的形式存在的,首先要启动php-fpm服务,然后Nginx再和php通信,也就是说处理php脚本解析的工作是由php-fpm来完成。
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;
}
这个就是Nginx解析php的配置文件。
这里我们需要注意的是 fastcgi_pass unix:/tmp/php-fcgi.sock;容易写错,如果写错,就会显示502。
我们组一个实验,故意将/tmp/php-fcgi.sock写错,然后访问。
curl -x192.168.1.107:80 test.com/3.php
<html>
<head><title>502 Bad Gateway</title></head>
由于我们写错了配置文件,所以显示了502,然后我们查看一下错误日志nginx_error.log
2018/04/26 23:22:39 [crit] 2076#0: *49 connect() to unix:/tmp/php-fgi.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.1.107, server: test.com, request: "GET HTTP://test.com/3.php HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-fgi.sock:", host: "test.com"
它的意思是 到unix:/tmp/php-fgi.sock失败(2:没有这样的文件或目录)。
当我们遇到这样的问题时我们就要仔细思考一下是不是我们配置的地址不对呢?首先我们先看一下错误日志,首先看文件存不存在。如果不存在,我们就要去查看php-fpm的配置文件,看看我们定义的sock是什么。我们必须保持php-fpm中的sock与虚拟主机的配置文件中的sock一致。否则就会报错502.

如果php-fpm监听的是一个端口,比如127.0.0.1:9000,那么我们也需要在虚拟主机的配置文件中做一个更改。
首先找到fastcgi_pass,然后将它改成监听端口的形式。比如fastcgi_pass 127.0.0.1:9000;然后检查语法是否错误,然后重新载入。经过这一系列的操作后,我们就有可以解析php了。所以,虚拟主机中的fastcgi_pass一定要和php-fpm中监听的IP一致,否则就会报502。
在以后如果我们出现解析php出现502的时候一定要检查php-fpm中配置监听ip和sock是否一致,如果不一致就会报502。
还有就是SCRIPT_FILENAME后面跟的路径一定要写对,他是与配置文件上面的root后面跟的路径是一致的,他们一定要对应起来。如果配置不对,在访问的时候会报404。
还有一种情况报502是因为我们的的php-fpm配置文件中有一行listen.mode=666这行配置被注销或者没有了,这样配置是让所有 的用户都可以执行这个文件,如果没有这行配置,则只能root用户可以执行权限。

Nginx代理
当用户不能直接访问服务器,那么我们就可以做一个代理服务器。
首先进入/usr/local/nginx/cnof/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 是定义你要访问的web服务器的IP
server_name是定义域名
然后我们检查语法重新加载。
如果我们在做代理的时候不知道要访问的web服务器的ip时,我们可以用dig +域名的方法获取ip。
安装 dig 命令: yum install -y bind*

Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

标签:nginx

原文地址:http://blog.51cto.com/13067688/2108372

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!