阿里云SLB配置不记录回源IP日志

阅读次数: 4,109

  • A+
所属分类:建站 运维

问题:在阿里云搭建的slb 成功后,发现 /usr/local/apache2/logs/ 的 access_log error_log 一直不断的被回源IP请求验证导致 文件迅速变大

后来提交了工单阿里的技术说是开启了健康检查的原因如图

阿里云SLB配置不记录回源IP日志

他们说解决方案就是把数值调大或者关闭

后来找了度娘发现有类似的问题最后解决了 方法如下:

修改Apache的httpd.conf 配置文件看标红的地方就是修改的地方

SetEnvIf Request_URI "^/check.html" dontlog
195 ErrorLog "logs/error_log"
196
197 #
198 # LogLevel: Control the number of messages logged to the error_log.
199 # Possible values include: debug, info, notice, warn, error, crit,
200 # alert, emerg.
201 #
202 LogLevel warn
203
204 <IfModule log_config_module>
205 #
206 # The following directives define some format nicknames for use with
207 # a CustomLog directive (see below).
208 #
209 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
210 LogFormat "%h %l %u %t \"%r\" %>s %b" common
211
212 <IfModule logio_module>
213 # You need to enable mod_logio.c to use %I and %O
214 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
215 </IfModule>
216
217 #
218 # The location and format of the access logfile (Common Logfile Format).
219 # If you do not define any access logfiles within a <VirtualHost>
220 # container, they will be logged here. Contrariwise, if you *do*
221 # define per-<VirtualHost> access logfiles, transactions will be
222 # logged therein and *not* in this file.
223 #
224 CustomLog "logs/access_log" combined env=!dontlog

修改完成后 仔细看发现

SetEnvIf Request_URI "^/check.html" dontlog #匹配请求地址

CustomLog "logs/access_log" combined env=!dontlog#记录日志 combined 中env 不满足 dontlog的才记录 access_log

combined  :  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined   是这句话声明的 好像是获取请求的信息并格式化

这两句话 就跟平时写的程序是差不多的

附:Apache常用配置


<VirtualHost *:80>

    ServerAdmin825536458@qq.com

    DocumentRoot"/data/www/"

    ServerNamewww.test.com

ServerAlias www.hu.com

##设置这些格式的东西不记录到日志

    SetEnvIfRequest_URI ".*\.gif$" image-request

    SetEnvIfRequest_URI ".*\.jpg$" image-request

    SetEnvIfRequest_URI ".*\.png$" image-request

    SetEnvIfRequest_URI ".*\.bmp$" image-request

    SetEnvIfRequest_URI ".*\.swf$" image-request

    SetEnvIfRequest_URI ".*\.js$" image-request

    SetEnvIfRequest_URI ".*\.css$" image-request

    ErrorLog"logs/test.com-error_log"

CustomLog"|/usr/local/apache2/bin/rotatelogs -l/usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400" combinedenv=!image-request   ##(切割每天的日志文件格式是年--_log

##设置域名跳转

   <IfModulemod_rewrite.c>

           RewriteEngine on

           RewriteCond %{HTTP_HOST} ^www.hu.com$

           RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]

##user_agent的设置

           #rewritecond %{http_user_agent} ^.*curl.* [nc,or]

           #rewritecond %{http_user_agent} ^.*chrome.* [nc] 

           #rewriterule .*  - [F]

           RewriteCond %{REQUEST_URI} ^.*/tmp/.* [NC]

          rewriterule .*  - [F]

</IfModule>

##设置网站的静态缓存

 

<IfModule mod_expires.c>

   ExpiresActiveon

   ExpiresByTypeimage/gif "access plus 1 days"

   ExpiresByTypeimage/jpeg "access plus 24 hours"

   ExpiresByTypeimage/png "access plus 24 hours"

   ExpiresByTypetext/css "now plus 2 hours"

   ExpiresByTypeapplication/x-javascript "now  plus2 hours"

   ExpiresByTypeapplication/x-shockwave-flash "now plus 2 hours"

  ExpiresDefault "now plus 0 min"

</IfModule>

##设置防盗链

SetEnvIfNoCase Referer "^$" local_ref

SetEnvIfNoCase Referer"^http://.*\.test\.com" local_ref

SetEnvIfNoCase Referer ".*\.blog.51cto\.com"local_ref

<filesmatch"\.(txt|doc|mp3|zip|rar|jpg|gif|png|css|js)">

Order Allow,Deny

Allow from env=local_ref

</filesmatch>

##设置网站的访问控制

<Directory "/data/www">

   AllowOverride None

    Options None

    Orderallow,deny

    Allow fromall

</Directory>

<filesmatch "(.*)admin(.*)">

      Orderdeny,allow

      Deny fromall

      deny from127.0.0.1

      allow from192.168.75.1

</filesmatch>

</VirtualHost>


附:在Apache服务器上如何从HTTP header中提取客户端X-ClientIP

在很多负载均衡设备的部署过程中,我们都无法更改服务器的网关(Gateway)地址,不能将其指向负载均衡设备,通常我们把这种部署方式称之为“单臂”或者“旁路”部署。在这种部署方式下,往往在负载均衡设备上需要启用源地址转换(Source NAT)功能,以保证服务器返回的数据包都通过负载均衡设备。如图所示,其中“AX-IP”就是配置在负载均衡设备上的Source NAT Pool里的地址:

 

阿里云SLB配置不记录回源IP日志

另外,在部署过程中,开启TCP连接复用功能,也需要在负载均衡设备上启用源地址转换功能,开启这种转换功能最大的一个问题就是,服务器端无法从TCP 数据包头中获取到发送HTTP请求的客户端真实IP地址,这样就会影响到系统的访问统计和审计等。为了给Web服务器提供客户端的真实IP,通常负载均衡设备的做法是将真实IP地址插入到HTTP header中,起一个字段名,例如“X-ClientIP”或者“X-forwarded-for”等。Web服务器提取该字段的值,即客户端真实IP地址,将其作为统计的依据即可。那么如果提取呢?下面,我们以Apache服务器为例给大家简单介绍一下提取的方法:

1、首先,在AX设备上配置相应的HTTP模板,并在VIP的虚拟端口(vport)下启用该HTTP模板;

阿里云SLB配置不记录回源IP日志

2、在Apache服务器上编辑httpd.conf文件

httpd.conf文件缺省是安装在Unix或者Linux的/etc/apache目录下,Windows系统的:\Program files\Apache Software Foundation\Apache\conf目录下。编辑该文件,在以“LogFormat”开头的最后一行下面,添加自定义的log格式,如下红色字体所示:

LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{User-Agent}i\" \"%{Cookie}i\"" common
LogFormat "%{Referer}i -&gt; %U" referer
LogFormat "%{User-agent}i" agent

LogFormat "%{X-ClientIP}i %l %u %t \"%r\" %&gt;s %b" AX-log
3、在httpd.conf文件中,找到以“CustomLog”开头的行,将其注释掉,并添加如下的Log格式:

# Test if header ″X-ClientIP″ is present, log format uses ″AX-log″
SetEnvIf X-ClientIP ″^$″ req-non-proxy
CustomLog logs/access.log AX-log env=req-non-proxy

4、保存httpd.conf文件,并重启Apache服务进程;

我们可以尝试访问AX设备上的虚拟服务器VIP地址,并在对应的Apache服务器日志中,验证是否已经配置成功。

 

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: