日志切割优化
日志优化的目的,是为了一天日志一压缩,按天存放,超过几天的删除
nginx状态码处理函数
nginx状态码分为五大类:
100-199 用于指定客户端应相应的某些动作。
200-299 用于表示请求成功。
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
400-499 用于指出客户端的错误。
500-599 用于支持服务器错误。
| 状态码 | 说明 |
| 200 | 服务器成功返回网页,这是成功的HTTP请求返回的标准状态码 |
| 201 | CREATED 上传文件成功后显示 |
| 301 | Move Permanently,永久重定向,会返回一个新地址,并告诉我们你所请求的地址将永久挪到那个新地址去了 |
| 302 | Fonud,临时重定向,临时放到某个地方,会在响应报文中使用“Location:新位置”; |
| 304 | Not Modified,资源没有做任何修改 |
| 403 | Forbidden 请求被拒绝,主要是权限问题 |
| 404 | Not Found 请求的资源不存在 |
| 405 | Method Not Allowed 你使用的方法不被允许,不支持 |
| 500 | Internal Server Error:服务器内部错误,无法完成请求 |
| 502 | Bad Gateway,服务器作为网关或代理,从上游服务器收到无效响应 |
| 503 | Service Unavailable,服务暂时不可用,服务器目前无法使用,由于超载或停机维护。通常,这只是暂时状态 |
| 504 | 服务器作为网关或代理,但是没有及时从上游服务器收到响应(web网站被墙了) |
创建日志切割脚本
[root@wzy ~]# cd /usr/local/nginx/logs/
[root@wzy logs]# vim cut_nginx_log.sh #日志切割脚本
#!/bin/bash date=$(date +%F -d -1day) cd /usr/local/nginx/logs if [ ! -d cut ] ; then mkdir cut fi mv access.log cut/access_$(date +%F -d -1day).log mv error.log cut/error_$(date +%F -d -1day).log /usr/local/nginx/sbin/nginx -s reload tar -jcvf cut/$date.tar.bz2 cut/* rm -rf cut/access* && rm -rf cut/error* find -type f -mtime +10 | xargs rm -rf [root@wzy logs]# crontab -e #创建周计划 0 0 * * * /bin/sh /usr/local/nginx/logs/cut_nginx_log.sh >/dev/null 2>&1 #每天执行脚本 [root@wzy logs]# chmod +x cut_nginx_log.sh #添加可执行
去掉不需要的日志统计
健康检查的日志,不用输入到log中,因为这些日志没有意义,我们分析的话只需要分析访问日志,看看一些页面链接,如200,301,404的状态码,在SEO中很重要,而且我们统计PV是页面计算,这些都没有意义,反而消耗了磁盘IO,降低了服务器性能,我们可以屏蔽这些如图片,js,css这些不宜变化的内容
[root@cong11 logs]# vim /usr/local/nginx/conf/nginx.conf
location ~ .*.(js|jpg|jpeg|JPG|JPEG|css|bmp|gif|GIF)$ {
access_log off;
}
注:
error log 关闭
关闭 error log 千万不要写 error_log off; ,这样错误日志会被写到一个叫做 off的文件中
正确关闭错误的方法:
error_log /dev/null ;
日志格式优化
Nginx软件会把每个用户访问网站的日志信息记录到指定的日志文件里,供网站提供者分析用户的浏览行为等,此功能由ngx_http_log_module模块负责。
对应的官方地址为:Module ngx_http_log_module。
访问日志参数
Nginx的访问日志主要由两个参数控制。
Nginx日志格式中默认的参数配置如下:
[root@cong11 logs]# vim /usr/local/nginx/conf/nginx.conf #开启25-29行
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main;
1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;
2.$remote_user :用来记录客户端用户名称;
3.$time_local : 用来记录访问时间与时区;
4.$request : 用来记录请求的url与http协议;
5.$status : 用来记录请求状态;成功是200,
6.$body_bytes_sent :记录发送给客户端文件主体内容大小;
7.$http_referer :用来记录从那个页面链接访问过来的;
8.$http_user_agent :记录客户端浏览器的相关信息;
9. $http_x_forwarded_for:客户端IP地址列表(包括中间经过的代理),当前有代理服务器时,设置web站点记录客户段地址的配置,此参数生效的前提是代理服务器上也进行了相关的x_forwarded_for设置。
目录文件访问控制
主要用在禁止目录下指定文件被访问,当然也可以禁止所有文件被访问!一般什么情况下用?比如是有存储共享,这些文件本来都只是一些下载资源文件,那么这些资源文件就不允许被执行,如sh,py,pl,php等等
禁止访问images下面的php程序文件
修改配置文件
[root@ wzy ~]# vim /usr/local/nginx/conf/nginx.conf
location ~ ^/images/.*.(php|php5|sh|py|pl)$ {
deny all;
}
重启服务
[root@wzy ~]# nginx -s reload
创建测试文件
[root@ wzy ~]# mkdir /usr/local/nginx/html/images
[root@ wzy ~]# echo "" > /usr/local/nginx/html/images/index.php
测试
http://192.168.10.4/images/index.php
配置nginx禁止访问*.txt文件
创建测试文件
[root@wzy ~]# echo Test > /usr/local/nginx/html/a.txt
测试
http://192.168.10.4/a.txt #显示能访问a.txt
配置规则,禁止访问txt
[root@wzy ~]# vi /usr/local/nginx/conf/nginx.conf
location ~* .(txt|doc)$ {
if ( -f $request_filename) {
root /usr/local/nginx/html;
}
deny all;
}
重载nginx
[root@wzy ~]# nginx -s reload
测试
http://192.168.10.4/a.txt
可以错误重定向到某一个URL
[root@wzy ~]# vi /usr/local/nginx/conf/nginx.conf
location ~* .(txt|doc)$ {
if ( -f $request_filename) {
root /usr/local/nginx/html;
}
rewrite ^http://www.baidu.com last;
}
对目录进行访问限制
创建2个目录
[root@wzy ~]# mkdir -p /usr/local/nginx/html/{aa,bb}
创建测试文件
[root@ wzy ~]# echo 'aa' > /usr/local/nginx/html/aa/index.html
[root@ wzy ~]# echo 'bb' > /usr/local/nginx/html/bb/index.html
配置目录拒绝访问
[root@ wzy ~]# vi /usr/local/nginx/conf/nginx.conf
location /aa/ { return 404 ; }
location /bb/ { return 403 ; }
重载nginx
[root@ wzy ~]# nginx -s reload
测试
http://192.168.10.4/aa/index.html
http://192.168.10.4/bb/index.html
也可以配置deny all方式拒绝
[root@wzy ~]# vi /usr/local/nginx/conf/nginx.conf #修改内容
location ~ ^/(aa)/ {
deny all;
}
location /bb/ { return 403 ; }
[root@wzy ~]# nginx -s reload
http://192.168.10.4/aa/index.html
对访问来源控制
这个需要ngx_http_access_module模块支持,不过,默认会安装
修改配置文件
[root@wzy~]# vim /usr/local/nginx/conf/nginx.conf #之前的注释
location ~ ^/aa/ {
allow 192.168.10.0/24; #允许10.0网段IP访问
deny all;
}
location /bb/ { return 403 ; }
重载服务器
[root@wzy ~]# nginx -s reload
测试
192.168.10.4/aa/index.html
对整个网站根目录访问控制
针对整个网站的写法,对/限制就OK,允许1.0网段访问网站
[root@cong11 ~]# vim /usr/local/nginx/conf/nginx.conf
location ~ / {
allow 192.168.10.0/24; #可以写IP段,也可以写IP
deny all;
}
通过if语句控制,给以友好的错误提示
拒绝192.168.1.254访问网站
[root@cong11 ~]# vim /usr/local/nginx/conf/nginx.conf
location ~ / {
allow 192.168.10.0/24;
if ( $remote_addr = 192.168.10.2 ) {
return 404;
}
deny all;
}
[root@cong11 ~]# nginx -s reload
测试:
http://192.168.10.4
IP和301优化
有时候,我们发现访问网站的时候,使用IP也是可以得,我们可以把这一层给屏蔽掉,让其直接反馈给403,也可以做跳转
跳转的做法
修改配置文件
[root@wzy~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.benet.com benet.com;
if ($host = 192.168.10.4) {
rewrite ^ http://www.baidu.com; #跳转到百度
}
}
重置nginx
[root@wzy ~]# nginx -s reload
测试
http://192.168.10.4 跳转到百度了
使用域名也可以,在客户端windows主机上修改hosts文件,添加web站点域名和ip地址的映射
192.168.10.4 www. benet.com benet.com
403反馈的做法
[root@wzy ~]# vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.benet.com benet.com;
if ($host = 192.168.10.4) {
return 403;
}
301跳转的做法
我们域名在解析的过程中,将wzy.com跳转到 www.wzy.com
配置301跳转
[root@wzy ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
root html;
server_name www. wzy.com wzy.com; #上面www.benet.com改成www.wzy.com
if ($host = wzy.com ) {
rewrite ^/(.*)$ http://www. wzy.com/$1 permanent;
}
修改hosts
[root@ wzy ~]# vim /etc/hosts
192.168.10.4 www. wzy.com
192.168.10.4 wzy.com
客户端windows主机上修改hosts文件,添加web站点域名和ip地址的映射
192.168.10.4 www. wzy.com wzy.com
重载nginx
[root@wzy ~]# nginx -s reload
测试
wzy.com #跳转到www.wzy.com
防盗链
防止别人直接从你网站引用图片等链接,消耗了你的资源和网络流量,那么我们的解决办法由几种:
1:水印,品牌宣传,你的带宽,服务器足够
2:防火墙,直接控制,前提是你知道IP来源
3:防盗链策略
直接给予404的错误提示
[root@ wzy~]# vi /usr/local/nginx/conf/nginx.conf
#直接在第一个localtion下面填写以下内容
location ~* .(jpg)$ {
root /var/www/html;
valid_referers none blocked *.wzy.com wzy.com;
if ($invalid_referer) {
return 404;
}
}
参数说明:
location ~* .(jpg)$ { #需要防盗的资源
valid_referers none blocked *.wzy.com wzy.com; #这是可以盗链的域名或IP地址,一般情况可以把google,baidu,sogou,soso,bing,feedsky等域名放进来
none 意思是不存在的Referer头(表示空的,也就是直接访问,比如直接在浏览器打开一个图片)
blocked 意为根据防火墙伪装Referer头,如:“Referer: XXXXXXX”。
server_names 为一个或多个服务器的列表,0.5.33版本以后可以在名称中使用“*”通配符。
防盗链测试
使用apache做为一个测试站点,域名为www.test.com,在测试页上做一个超链接,链接nginx站点的一张图片
安装httpd
[root@wzy ~]# yum -y install httpd
配置httpd
修改监听端口为8080,修改ServerName为www.test.com:8080
[root@wzy ~]# vim /etc/httpd/conf/httpd.conf
Listen 8080
ServerName www.test.com:8080
新建测试文件
Yum安装的httpd,网站根目录为/var/www/html
[root@wzy ~]# vim /var/www/html/test.html
lianjie
上传图片
[root@ wzy ~]# cd /var/www/html
[root@ wzy ~]#rz #上传图片
修改hosts
[root@ wzy html]# vim /etc/hosts
192.168.1.11 www.test.com #最后添加这一行
启动httpd
[root@ wzy ~]# systemctl start httpd
测试
192.168.10.4:8080
192.168.10.4:8080/test.html
点击lianjie字样
可以看到超链接被拒绝了,说明防盗链做成功了
直接打开http://www.wzy.com/wzy.jpg



