apache 2.4的Substitute模块使用注意

apache 2.4 的 Substitute 模块是个好东西,可以用来实时修改页面内容,做些替换什么的工作,比如

ProxyPass /  http://other_web_site.com
ProxyPassReverse / http://other_web_site.com
AddOutputFilterByType SUBSTITUTE text/html
Substitute “s|http://other_web_site.com|http://localhost|i”

可以把网页里面的 http://other_web_site.com 字样替换为 http://localhost

那么有时候 你会发现这个没生效,没法替换,但是这也没什么错误啊,
其实问题很可能是因为你proxy的那个站点用来压缩,导致在Substitute看起来页面是压缩的内容,他当然替换不了,那么必须在压缩前进行解压缩,其实并不需要解压,只需要告诉对方的服务器,我这里不接受压缩的文件,那么就需要另外一个模块了
LoadModule headers_module modules/mod_headers.so

这个模块可以更改proxy模块发到对方的header
RequestHeader set Accept-Encoding “”

那么完整就可以可以这样写

ProxyPass /  http://other_web_site.com
ProxyPassReverse /   http://other_web_site.com
RequestHeader set Accept-Encoding ""
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|http://other_web_site.com|http://localhost|i"

一共需要启用如下模块

LoadModule filter_module modules/mod_filter.so
LoadModule headers_module modules/mod_headers.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule substitute_module modules/mod_substitute.so

 

附:有关nginx里面proxy的时候碰到gzip

看这里  http://www.zjpro.com/nginx-substitutions4nginx.html

 

Discuz用户上传头像提示can not write to the data tmp folder。

Discuz用户上传头像提示can not write to the data tmp folder。 142513516573d35eadf807

解决方法:

通过chrome 的F12功能发现,上传图片调用 uc_server/control/user.php里面的函数 onuploadavatar,返回值是 -4,通过查找 -4的来源,

avatar1

得到 getimagesize 函数出错,返回false,

那么写一点调试代码就能看到问题所在了

avatar2

图中红圈是调试语句,根据这个的错误提示,就会发现是apache无权限读取上传的临时文件,根据提示修改apache的配置文件里面的 php_admin_value open_basedir XXXXX
通过注释掉此语句,或者修改到合适的目录使得可以读取上传文件的临时目录就可以解决此问题了。

禁止 某些可写目录执行 php的方法

首先说下分析为啥这个是正确的,
httpd.conf里面 AddType application/x-httpd-php5 .php
并不区分大小写,从而导致 .php .PHP .Php .pHp .phP 都可以正确执行,那么就需要防止这类漏洞,采用apache rewrite方法的时候用 NC 表示不区分大小写匹配 ,F表示forbidden

RewriteRule ^images/.*\.php – [NC,F]

apache 泛域名伪静态的一点备忘

匹配所有非 www bbs 开头的域名,可以匹配 111.domain.com aaa.domain.com

RewriteCond %{HTTP_HOST} ^(?!www|bbs)([^.]+).domainname.com [NC]
RewriteRule ^$   test.php?uid=%1 [QSA,L]
或者
RewriteCond %{HTTP_HOST} ^(.+)\.domainname.com$ [NC]
RewriteCond %1 !^(www|bbs)$ 
RewriteRule ^$   test.php?uid=%1 [QSA,L]

test.php 这样写

 
print_r($_GET);
 

关于最近网络攻击防护的总结

一些服务器出问题,如服务器死机,如网站瘫痪,如被挂木马

整体思路是 如果正在攻击的服务器,就查看当前的 webserver 的log ,根据特征进行屏蔽

有的是 user-agent 一致 有的是 ip 一致,有的是 refer 一致

apache的相应设置可以做如下调整

BrowserMatchNoCase 特征1 bad_bot
BrowserMatchNoCase 特征2 bad_bot
Order Deny,Allow
Deny from env=bad_bot

可以写到 .htaccess 或者配置文件里面
关于特征字串有几点要说的 就是括号和加号 需要加\ 斜线
比如
"Mozilla/5.0 \(compatible; Googlebot/2.1; \+http://www.google.com/bot.html\)" 
才可以
同样也可以用rewrite 方法来对付这些
RewriteCond %{HTTP_USER_AGENT} "特征串1"
RewriteRule ^(.*)$ http://127.0.0.1
RewriteCond %{HTTP_USER_AGENT} "特征串2"
RewriteRule ^(.*)$ http://127.0.0.1
用的参数很多
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond

针对对特定user-agent 的apahce,nginx攻击的防护

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} “^特征字符串正则表达式$”
RewriteRule ^(.*)$ http://127.0.0.1

 

nginx 的配置如下

if ( $http_user_agent = “特征串”) { return 444; };
或者
if ( $http_user_agent ~* “特征串”) { return 444; }

注意特征串如果这正则情况下  斜线 / 括号 () 都是要加斜线的

 

apache time_wait 过多,修改 keepalive 解决

最近一朋友的centos apache 2.2 发现大量的ip 出现 time_wait 显现

即 netstat -an | grep “:80” 的结果大量显现 time_wait

初期以为是 被Ddos 了,后发现即使是就一个ip访问,也产生大量time_wait

遂修改 apache 配置文件 httpd.conf

KeepAlive On
MaxKeepAliveRequests 120
KeepAliveTimeout 15

观察后问题解决