娱乐新地带论坛  

返回   娱乐新地带论坛 > 电脑技术 > 『软件使用』

『软件使用』 交流对软件的使用心得、经验窍门、好的软件要让大家一起用

发表新主题 回复
 
主题工具 显示模式
旧 2011-09-07, 12:44 PM   #1
No1
Tony
坛主
级别:199 | 在线时长:40426小时 | 升级还需:374小时级别:199 | 在线时长:40426小时 | 升级还需:374小时级别:199 | 在线时长:40426小时 | 升级还需:374小时级别:199 | 在线时长:40426小时 | 升级还需:374小时
 
Tony 的头像
 
注册日期: 2003-10-22
帖子: 11,053
积分:6
精华:24
现金:14348金币
资产:29325305金币
Tony 是一位成功的新星Tony 是一位成功的新星Tony 是一位成功的新星Tony 是一位成功的新星
Nginx目录保护、防盗链、限速及多域名处理

NGiNX 是个非常优秀的HTTP 服务器软件,可以通过设置有实现许多功能,如目录保护、IP访问限制、防盗链、下载限速及设置多域名等等

一、目录保护及访问限制

Nginx保护目录的配置如下,目录密码保护文件是 /usr/local/nginx/htpasswd
location ~ /admin {
#admin为要保护的目录名称,location 的意思就是保护从网页根目录算起的admin 目录
auth_basic ”PLEASE LOGIN”; #就是进入资料夹时会显示的信息
auth_basic_user_file /usr/local/nginx/htpasswd;

#验证用户及密码文件,我这边设定是放在 /usr/local/nginx/htpasswd
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/bbs$fastcgi_script_name;
include fastcgi_params;

}

注意,设置目录密码保护时,请注意配置区块的位置,如果放在location ~ \.php$ {}区块后面,如果打开的是静态页面或图片等非php文件,会提示要输入密码,但是,如果打开的是php文件,则设置无效,会直接执行php文件并显示。因此,一定要注意把要设置目录密码保护的区块放在location ~ \.php$ {}区块之前。

生成密码文件:
htpasswd -b -c /usr/locla/nginx/htpasswd username password;





二、防盗链

另外 NGiNX 防盗链,防止别人偷图(视频、flash、软件…)当然也是 OK 滴! 一样也是在 server 的区段加上



location ~* \.(txt|ico|gif|png|bmp|jpg|jpeg|zip|rar|gz|7z|exe|mp3|flv|swf)$ {

valid_referers none blocked fxzc.net www.fxzc.net ;

if ($invalid_referer) {

rewrite ^/ http://www.fxzc.net/notlink.html;

}

}



这时候 location 的意思就是保护从网页根目录算起,所有的指定类型的文件都依照此规则

valid_referers none blocked 的意思就是不阻挡从哪些地方来的囉~ 这边以空格来分隔允许的域名或 ip 位置

$invalid_referer 的意思就是不允许连结

rewrite ^/ http://www.fxzc.net/notlink.html; 的意思就是指定不允许的连结自动转向到一个页面,或是已经有设定 404 转址的也可以先注解掉这行再把 #return 404 的注解拿掉,就会自动跑到你设定的 404 页面了。

三、下载限速

NGiNX 还能限速再限制下载线程! 先在 http 区段找到 limit_zone,再把注释拿掉~



# 设定一个叫做 crawler 的区域,大小为 20MB

limit_zone crawler $binary_remote_addr 20m;



然后在 server 的区段加上



# 限制档案类型只能单线下载

location ~ .*\.(zip|rar|gz|tar|exe|mp3|flv|swf|jpg|jpeg)$

{

limit_conn crawler 1;

limit_rate 500k; # 再加上限速

}



# 限制特定资料夹底下只能单线下载

# location /download/ {

# limit_conn crawler 1;

# limit_rate 500k; # 再加上限速

# }



四、多域名处理

今天在配置PHP+Nginx时出现一个严重的问题,在Nginx虚拟主机上绑定了泛域名,在程序中需要用二级域名指向不同的内容,但无论如何访问都只跳转到主域名上!为了找到问题,一个一个试验,得出如下结论:不管绑定多少域名,用 $_SERVER["SERVER_NAME"] 只会返回虚拟主机中绑定的第一个域名!

比如绑定域名如下:

server_name www.fxzc.com *.fxzc.com fxzc.com

现在我不管用什么域名访问, $_SERVER["SERVER_NAME"] 都只会返回 www.fxzc.com !!这是个很严重的问题,对泛域名造成了致命的影响!

既然有问题,就肯定有解决方案。。在wiki主翻了N久,终于找到了需要的资料!

原来:$_SERVER["SERVER_NAME"] 返回的值是由 Nginx 的 fastcgi_param 中 SERVER_NAME 提供的,而默认的配置为:

fastcgi_param SERVER_NAME $server_name;

Nginx中 $server_name 变量就是上面设置的域名,只会返回第一个!

这下好办了,把上面的配置改成:



fastcgi_param SERVER_NAME $host;



就行了。



另外还需要在server_name配置后面加一行:



server_name_in_redirect off;



意思是 让 nginx 在处理自己内部重定向时不默认使用 server_name 设置中的第一个域名!到此问题顺利解决。
 
Tony 的签名
古代人有点功夫就研究长生不老,现代人忙完一天只有不想活了!
Tony 当前离线  
回复时引用此帖
发表新主题 回复

书签


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码

论坛跳转


所有时间均为北京时间。现在的时间是 05:21 PM


©2003-2024 1819.net All rights reserved.