« February 2006 | Main | September 2006 »

August 20, 2006

配置Mediawiki支持短URL

为了美化URL,今天花了巨多时间在这个看似简单又讨厌的问题上面。中午觉也没有睡。首先来个惯例的Step by step 安装步骤吧。

1.下载mediawiki

由于测试机是php4.3.9,为了不麻烦,偷懒用了个1.6.8的版本,支持php4.x

2.解包

tar xfz mediawiki-1.6.8.tar.gz
mv mediawiki-1.6.8 /var/www/extsuite/mediawiki

3.设计站点URL

计划要用http://wiki.extmail.org来访问整个wiki,因此所有的http://wiki.extmail.org/index.php?title=article_title 需要影射成为http://wiki.extmail.org/article_title

4.参考
http://meta.wikimedia.org/wiki/Using_a_very_short_URL

注意这个链接访问不了,必须使用代理才能访问,在这里,感叹一下我们的自由是多么脆弱。一点小小信息都不能看,Damn it :-(

5.实施
Apache的虚拟主机配置:


ServerName wiki.extmail.org
DocumentRoot /var/www/extsuite/mediawiki


Options MultiViews
AllowOverride None
Order allow,deny
Allow from all
Options FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /index.php?title=$1 [L,QSA]


Options MultiViews
AllowOverride None
Order allow,deny
Allow from all
# avoid execution of PHP scripts in upload directory
AddType text/plain .php
AddType text/plain .phps

chmod a+w config
然后访问http://wiki.extmail.org/config/
配置完毕,生成数据库后:
mv config/LocalSettings.php .

配置LocalSettings.php

正常默认就是下面:
$wgScriptPath = "";
$wgScript = "$wgScriptPath/";
$wgRedirectScript = "$wgScriptPath/redirect";

然后修改下面:
$wgArticlePath = "$wgScriptPath/$1";

include "extensions/GeshiHighlight.php";

6.配置使用/wiki/的方法

希望访问wiki 的url为http://www.extmail.org/wiki/xxx

1-5的步骤略去。给出apache 的配置:


ServerName www2.extmail.org
DocumentRoot /var/www/extsuite/html
Alias /mediawiki /var/www/extsuite/mediawiki
Alias /wiki /var/www/extsuite/mediawiki/index.php


Options MultiViews
AllowOverride None
Order allow,deny
Allow from all
Options FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /index.php?title=$1 [L,QSA]

LocalSettings.php:

$wgScriptPath = "/mediawiki";
$wgScript = "/wiki";
$wgRedirectScript = "/wiki/redirect";

$wgArticlePath = "$wgScript/$1";
include_once("extensions/GeshiHighlight.php");

唯一的缺点是在登陆或退出时,URL是http://www2.extmail.org/wiki?title=xxx&xxxx=xxx

因为apache配置里将/wiki => index.php了,所以wiki?参数就和index.php?参数一致了。嘿嘿。

Posted by hzqbbc at 05:02 PM | Comments (0)

August 06, 2006

IPtables 规则错误导致DNS查询失败之解决办法

受朋友之托,检查其主机上的iptables规则引起的dns问题。主要现象是打开了如下的规则后,squid就不能正常的查找主机的ip地址,dns解析试销。

# Generated by iptables-save v1.3.4 on Sun Aug  6 11:28:42 2006
*nat
:PREROUTING ACCEPT [293:39183]
:POSTROUTING ACCEPT [5:299]
:OUTPUT ACCEPT [5:299]
COMMIT
# Completed on Sun Aug  6 11:28:42 2006
# Generated by iptables-save v1.3.4 on Sun Aug  6 11:28:42 2006
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [949:834012]
-A INPUT -p tcp -m multiport --dports 21,25,80,81,110,143,3128 -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT     
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
#-A INPUT -p udp -m udp -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec --limit-burst 10 -j ACCEPT      
-A INPUT -i lo -j ACCEPT        
-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT             
-A INPUT -p tcp -m state --state INVALID,NEW -j DROP        
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP      
-A INPUT -p udp -m udp -j DROP
COMMIT
# Completed on Sun Aug  6 11:28:42 2006

当屏蔽了上述规则中#-A INPUT -p udp -m udp -j ACCEPT 的规则后,squid就无法正常工作了。在机器上用nslookup 查询主机名 + 外部dns ip,发现timeout,应该是udp包无法发送到对方的dns服务器53端口。

后来man了一下iptables,发现可以用LOG来记录ip包的情况,于是打开log,增加了如下的规则集:

-A INPUT -j LOG -p udp -m udp --log-prefix "DNS monitor: "

重新启动iptables,在/var/log/message里看到如下信息:

Aug 6 12:00:12 hostname DNS monitor: IN=eth0 OUT= MAC=00:14:5e:41:e0:16:00:0d:65:98:f7:80:08:00 SRC=w.x.y.z DST=a.b.c.d LEN=124 TOS=0x00 PREC=0x00 TTL=47 ID=38895 DF PROTO=UDP SPT=53 DPT=33036 LEN=104

注意这里的SPT=53 DPT=33036,检查一下规则发现放行的是目的地53口,没有发行源端口(即sport),估计问题在这里,于是增加一条记录:

-A INPUT -p udp -m udp --sport 53 -j ACCEPT

重新启动后,正常了。看来,没有log的帮助还一时搞不明白为什么。也怪平时没仔细研究iptables,嘿嘿,通过这次也受到教训了:-)

Posted by hzqbbc at 12:01 PM | Comments (3)