win2003平台下的apache相关配置

    貌似已经很久很久没有记些东西了,去年12月份的时候从F2blog转为WP,并在Host2ez上找了个免费空间后就一直没有再更新了,这月初Host2ez被持续攻击直至放弃国内虚拟主机服务,虽然我这个免费空间一直能正常使用,但是心里一直觉得不太放心,想想还是搬回自己的服务器算了。
    由于自己的服务器上一直都是IIS和apache同时运行,并且各自使用不同的端口,这次把WP搬回来后放IIS上运行总觉得不爽,而apache上运行的又是一套不对外的系统,需要在网址后加上端口号才能正常访问。于是想着干脆彻底放弃IIS,把80端口也配置到apache上算了,经过一番摸索,apache使用多个端口来运行多个网站顺利运行。

以下内容均来自网络,在此做个笔记。
1、apache使用多个端口(我使用的是第一种方法)

1、建立虚拟主机,用不同的端口
修改httpd.conf
增加 listen 8080
NameVirtualHost www.xxx.com:8080
<VirtualHost www.xxx.com:8080>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “E:/fanf/actova ”
ServerName dummy-host.example.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
就可以了

2、创建新的httpd.conf 文件
你可以这个样子,把httpd.conf 文件拷贝一份,起一个新的名字例如httpd-test.conf
修改其中的pid 等信息
例如PidFile logs/httpd-test.pid
DocumentRoot
listen 8080
等信息
然后启动apache
/home/apache/bin/apachectl -f /home/apache/conf/httpd-test.conf -k start

2、Apache 防盗链

1、使用 rewrite 技术实现 Apache 防盗链
  Apache 防盗链的第一种实现方法,可以用 rewrite 实现。首先要确认 Apache 的 rewrite module 可用:能够控制 Apache httpd.conf 文件的,打开 httpd.conf,确保有这么一行配置: 
LoadModule rewrite_module modules/mod_rewrite.so
然后在找到自己网站对应的 配置的地方,加入下列代码:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://example.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://example.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.example.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.example.com$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.example.com/about/nolink.png [R,NC]

防盗链配置的说明:
1. 红色部分: 表示自己的信任站点。
2. 绿色部分: 要保护文件的扩展名(以|分开)。以这些为扩展名的文件,必须通过红色标注的网址引用,才可以访问。
3. 蓝色部分: 盗链后的重定向页面。用以输出警示信息,这张图片应该尽可能的小。

以上代码也可以写在虚拟主机对应的.htacess文件中,不过需要注意的是,要使.htacess文件生效,一定要将AllowOverride None改为AllowOverride All,我就是在这里折腾了半天…

2、使用 SetEnvIfNoCase 和 access 技术实现 Apache 防盗链
编辑httpd.conf 或 .htaccess 文件,加入如下代码:
SetEnvIfNoCase Referer “^http://www.yourdomin.com” local_ref=1
SetEnvIfNoCase Referer “^http://yourdomin.com” local_ref=1
<FilesMatch “\.(txt|doc|mp3|zip|rar|jpg|gif)”>
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>
其中红色的是您的网址,如果有多个,就加多行
绿色的是您需要防盗链的文件后缀,中间用|隔开

还一种写法,是用正则的,这种写法在各个版本的apache比较通用。
写法是
SetEnvIfNoCase Referer “^http://.*\.yourdomin\.com” local_ref=1
SetEnvIfNoCase Referer “.*\.yourdomin\.com” local_ref=1

<FilesMatch “\.(txt|doc|mp3|zip|rar|jpg|gif)”>
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>
其中红色的部分有一点区别,用正则写法, \ 符号代表转义,因为.本身在正则中有自己的作用。
这样的设置有一个小问题。直接在地址栏中输入一个图片或者mp3的地址的时候,也无法访问。
如果允许能直接访问这些文件,需要在刚才的配置中加上一句 
SetEnvIfNoCase Referer “^$” local_ref=1
如果要通过ip也能访问到这些文件,需要在上述配置中再加一句
SetEnvIfNoCase Referer “^http://000\.000\.000\.000\.*” local_ref=1
如果你有多台服务器,并且他们在一个ip段中
那么上面这句可以写为 
SetEnvIfNoCase Referer “^http://000\.000\.000\.*” local_ref=1
上面两句配置都要主意其中第一个000前面没有那个“.”
保存退出重起apache