栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Nginx调优(2)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nginx调优(2)

日志切割优化

日志优化的目的,是为了一天日志一压缩,按天存放,超过几天的删除

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944135.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号