nginx的日志切割处理
[
2010/06/03 20:06 | by xiaoyuwxz ]
2010/06/03 20:06 | by xiaoyuwxz ]
在把apache迁移成nginx之后,就要着手解决web日志的问题了。
由于我们分域名网站众多,以前通过cronolog将apache的log自动按照yyyy-mm-dd截断成每天的各分网站日志,然后通过bash脚本使用awstat生成所有分网站的log分析页面,以便所有网站日志的统一管理和浏览。但是nginx的配置文件中不支持cronolog的管道,只好通过手动的方式来截取生成每天的各网站日志。
在nginx.conf中定义log:
在http{}内定义log格式:
log_format combined ‘$remote_addr – $remote_user [$time_local] ‘
‘”$request” $status $apache_bytes_sent ‘
‘”$http_referer” “$http_user_agent”‘;
log_format表示log格式,combined表示定义的格式名称,后面表示格式样式。
在server{}内定义日志文件的位置和相应的格式:
access_log /data/weblogs/www1_access.log combined;
nginx可接受的信号如下:
Signal Action
TERM, INT Terminate the server immediately
QUIT Stop the server
HUP Configuration changes, start new workers, graceful stop of old workers
USR1 Reopen log files
USR2 Upgrade the server executable
WINCH Graceful Stop (parent process advise the children to exit)
kill -HUP pid 重新应用配置文件
kill -USR1 pid 重新刷新log
通过如下方式达到日志轮询的目的:
# vi logcron.sh
log_dir=”/data/weblogs”
date_dir=`date +%Y/%m/%d/%H`
/bin/mkdir -p ${log_dir}/${date_dir} > /dev/null 2>&1
/bin/mv ${log_dir}/access.log ${log_dir}/${date_dir}/access.log
kill -USR1 `cat /opt/nginx/logs/nginx.pid`
定义一个cron,在每天晚上23:59:50执行这个脚本,后面的事情就交给awstats了。
由于我们分域名网站众多,以前通过cronolog将apache的log自动按照yyyy-mm-dd截断成每天的各分网站日志,然后通过bash脚本使用awstat生成所有分网站的log分析页面,以便所有网站日志的统一管理和浏览。但是nginx的配置文件中不支持cronolog的管道,只好通过手动的方式来截取生成每天的各网站日志。
在nginx.conf中定义log:
在http{}内定义log格式:
log_format combined ‘$remote_addr – $remote_user [$time_local] ‘
‘”$request” $status $apache_bytes_sent ‘
‘”$http_referer” “$http_user_agent”‘;
log_format表示log格式,combined表示定义的格式名称,后面表示格式样式。
在server{}内定义日志文件的位置和相应的格式:
access_log /data/weblogs/www1_access.log combined;
nginx可接受的信号如下:
Signal Action
TERM, INT Terminate the server immediately
QUIT Stop the server
HUP Configuration changes, start new workers, graceful stop of old workers
USR1 Reopen log files
USR2 Upgrade the server executable
WINCH Graceful Stop (parent process advise the children to exit)
kill -HUP pid 重新应用配置文件
kill -USR1 pid 重新刷新log
通过如下方式达到日志轮询的目的:
# vi logcron.sh
log_dir=”/data/weblogs”
date_dir=`date +%Y/%m/%d/%H`
/bin/mkdir -p ${log_dir}/${date_dir} > /dev/null 2>&1
/bin/mv ${log_dir}/access.log ${log_dir}/${date_dir}/access.log
kill -USR1 `cat /opt/nginx/logs/nginx.pid`
定义一个cron,在每天晚上23:59:50执行这个脚本,后面的事情就交给awstats了。
Nginx防盗链详细设置
[
2010/06/03 20:04 | by xiaoyuwxz ]
2010/06/03 20:04 | by xiaoyuwxz ]
根据网友文章,自己实践,介绍3种Nginx防盗链的方法,节省你的宽带
一:一般的防盗链如下:
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.ingnix.com ;
if ($invalid_referer) {
rewrite ^/ http://www.ingnix.com/retrun.html;
#return 404;
}
}
第一行:gif|jpg|png|swf|flv
表示对gif、jpg、png、swf、flv后缀的文件实行防盗链
第二行: 表示对www.ingnix.com这2个来路进行判断
if{}里面内容的意思是,如果来路不是指定来路就跳转到http://www.ingnix.com/retrun.html页面,当然直接返回404也是可以的。
二:针对图片目录防止盗链
location /images/ {
alias /data/images/;
valid_referers none blocked server_names *.xok.la xok.la ;
if ($invalid_referer) {return 403;}
}
三:使用第三方模块ngx_http_accesskey_module实现Nginx防盗链
实现方法如下:
实现方法如下:
1. 下载NginxHttpAccessKeyModule模块文件:Nginx-accesskey-2.0.3.tar.gz;
2. 解压此文件后,找到nginx-accesskey-2.0.3下的config文件。编辑此文件:替换其中的”$HTTP_ACCESSKEY_MODULE”为”ngx_http_accesskey_module”;
3. 用一下参数重新编译nginx:
./configure --add-module=path/to/nginx-accesskey
4. 修改nginx的conf文件,添加以下几行:
location /download {
accesskey on;
accesskey_hashmethod md5;
accesskey_arg "key";
accesskey_signature "mypass$remote_addr";
}
其中:
accesskey为模块开关;
accesskey_hashmethod为加密方式MD5或者SHA-1;
accesskey_arg为url中的关键字参数;
accesskey_signature为加密值,此处为mypass和访问IP构成的字符串。
访问测试脚本download.php:
$ipkey= md5("mypass".$_SERVER['REMOTE_ADDR']);
$output_add_key="download_add_key
";
$output_org_url="download_org_path
";
echo $output_add_key;
echo $output_org_url;
?>
访问第一个download_add_key链接可以正常下载,第二个链接download_org_path会返回403 Forbidden错误。
Nginx怎么打开目录浏览功能?
[
2010/06/03 20:00 | by xiaoyuwxz ]
2010/06/03 20:00 | by xiaoyuwxz ]
你还记得apache下打开目录浏览功能的参数吗
Options FollowSymLinks
AllowOverride None
Options Indexes #就加这句就可以了,目录按需要选择
在Nginx下默认是不允许列出整个目录的。如需此功能,
先打开nginx.conf文件,在location server 或 http段中加入
另外两个参数最好也加上去:
autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
注意:改为on后,显示的文件时间为文件的服务器时间
server{
listen 80;
servername www.A.com;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
root /home/www/;
}
详细参照:http://wiki.nginx.org/NginxChsHttpAutoindexModule
Options FollowSymLinks
AllowOverride None
Options Indexes #就加这句就可以了,目录按需要选择
在Nginx下默认是不允许列出整个目录的。如需此功能,
先打开nginx.conf文件,在location server 或 http段中加入
引用
autoindex on;
另外两个参数最好也加上去:
autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
注意:改为on后,显示的文件时间为文件的服务器时间
server{
listen 80;
servername www.A.com;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
root /home/www/;
}
详细参照:http://wiki.nginx.org/NginxChsHttpAutoindexModule
Nginx的几个常用的命令参数
[
2010/06/03 19:57 | by xiaoyuwxz ]
2010/06/03 19:57 | by xiaoyuwxz ]
一、nginx的几个命令参数
Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信号机制对 Nginx 进程本身进行控制的。 Nginx 的参数包括有如下几个:
-c
:使用指定的配置文件而不是 conf 目录下的 nginx.conf 。
-t:测试配置文件是否正确,在运行时需要重新加载配置的时候,此命令非常重要,用来检测所修改的配置文件是否有语法错误。
-v:显示 nginx 版本号。
-V:显示 nginx 的版本号以及编译环境信息以及编译时的参数。
二、检测新的conf文件
测试当请目录下nginx.conf文件是否正确,使用命令:
nginx -t -c nginx.conf
2009/04/27 22:17:57 [info] 54240#0: the configuration file nginx.conf syntax is ok
2009/04/27 22:17:57 [info] 54240#0: the configuration file nginx.conf was tested successfully
得到如此结果,说明新conf文件没有错误。
如果有错,他会提示你在哪行出了错,在修改错误就可以了
Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信号机制对 Nginx 进程本身进行控制的。 Nginx 的参数包括有如下几个:
-c
:使用指定的配置文件而不是 conf 目录下的 nginx.conf 。
-t:测试配置文件是否正确,在运行时需要重新加载配置的时候,此命令非常重要,用来检测所修改的配置文件是否有语法错误。
-v:显示 nginx 版本号。
-V:显示 nginx 的版本号以及编译环境信息以及编译时的参数。
二、检测新的conf文件
测试当请目录下nginx.conf文件是否正确,使用命令:
nginx -t -c nginx.conf
2009/04/27 22:17:57 [info] 54240#0: the configuration file nginx.conf syntax is ok
2009/04/27 22:17:57 [info] 54240#0: the configuration file nginx.conf was tested successfully
得到如此结果,说明新conf文件没有错误。
如果有错,他会提示你在哪行出了错,在修改错误就可以了





