Monthly Archives: March 2009

如何在firefox里面设置java环境

公司是做JAVA开发的,平常用的JAVA版本都比较高,而firefox自带的jre版本相对来说比较低,不想安装firefox的java插件,而想用firefox直接调用我最新的JAVA版本,找了些资料,终于在这里找到了答案:
http://linux.chinaunix.net/techdoc/develop/2008/12/29/1055607.shtml

我是在ubuntu上安装的JDK,有些不同

myhnet@laptop:~$ echo $JAVA_HOME
/usr/local/java
myhnet@laptop:~$ cd /usr/lib/firefox-3.0.7/plugins
myhnet@laptop:/usr/lib/firefox-3.0.7/plugins$ sudo ln -s /usr/local/java/jre/plugin/i386/ns7/libjavaplugin_oji.so libjavaplugin_oji.so
myhnet@laptop:/usr/lib/firefox-3.0.7/plugins$  sudo ln -s /home/myhnet/java/jre/lib/i386/libnpjp2.so libnpjp2.so

重启firefox,就什么都正常了

ssl_error_rx_record_too_long

今天早上换了服务器的ssl证书,却有人报告说在外网打不开网站。
我一测试,用IE还真的是打不开。换firefox,发现报了这个错误

SSL 接收到一个超出最大准许长度的记录。

(错误码: ssl_error_rx_record_too_long)

英文:

SSL received a record that exceeded the maximum permissible length.

在网上一搜,很快就在这里找到了答案。

<VirtualHost>

这个标签里面,我的同事也在里面写上了自己的域名,我把这个记录改成了

<VirtualHost *:443>

然后就可以了。

用xinetd来监听sshd

上课的时候给学生留了个作业,让学生用xinetd来配置sshd,结果我自己没有搞定,太丢了。。。

按理说,sshd进程运行的时候,是不需要参数的,但是配置到xinetd之后,就是只能监听端口不能登陆系统。每次登陆,都会报如果错误:

ssh_exchange_identification: read: Connection reset by peer

如果加上-v参数查看的话,就会有这么一个报告:

debug1: ssh_exchange_identification: sshd re-exec requires execution with an absolute path

查到最后,后来是sshd如果用于inetd(xinetd)模式的时候,需要加上一个参数-i
因为在inetd(xinetd)模式下,sshd在响应客户端之前要花上大约十秒的时候来重新生成一个服务器端的key,客户端不会花那么长的时间等待,所以就会报错。
而且,这个参数只用于inetd(xinetd)模式。

附正确的配置文件:

service ssh
{
socket_type = stream       
wait = no
user = root
server = /usr/sbin/sshd
server_args =  -i
disable = no
}

为phpwind做代理加速镜像

今天给风云墙做了一个教育网的代理服务器来给教育网的用户加速。本来以为是一个很简单的问题,结果却大费周折。

第一打算是用squid来做,结果却由于原来的80端口被占用,暂时找不到一个圆满的解决方案,只好放弃。

80端口已经被apache占用了,也就只好用mod_proxy来做了。
在apache中加上这么一个vhost,理论上应该是可以了,但是,里面的链接还是指向原来的http://bbs.clwind.net,并不像反向代理所期待的http://edu.clwind.net.

<VirtualHost *:80>
    ServerAdmin myhnet@gmail.com
    DocumentRoot /none
    ServerName  edu.clwind.net
    ProxyRequests Off
    ProxyPass  / http://bbs.clwind.net
    ProxyPassReverse / http://bbs.clwind.net
</VirtualHost>

开始一直以为是反向代理的问题(我对反向代理不太熟悉),查找了好久,也没发现问题所在(本来就不是他的问题,怎么可能发现得了)。最好做了一个最简单的网站来做源站,才发现原来是phpwind的head部分的问题。

在phpwind的header.html中,给页面加上了一个base标签

<base id="headbase" href="$db_bbsurl/" />

base标签的作用是给网页中的链接指定一个默认的URL前缀或者是指定一个target,比如:

<base target="_blank" />

而在phpwind中,$db_bbsurl这个变量是由PHP系统变量$_SERVER[HTTP_HOST]得来的。

但是这个变量在使用了反向代理之后,并不是我们访问的URL,这个时候介入了一个新的变量,只有在使用代理访问之后才会有的变量:$_SERVER[HTTP_X_FORWARDED_HOST]。这个变量才是我们访问的URL。

这样,为了反向代理能够正常使用,我们需要更改phpwind的代码。
打开global.php

解决base标签的问题
找到:

$R_url = $db_bbsurl = Char_cv("http://$_SERVER[HTTP_HOST]".substr($tmp,0,strrpos($tmp,'/')));

修改为:

if ($_SERVER[HTTP_X_FORWARDED_HOST]) {
        $R_url = $db_bbsurl = Char_cv("http://$_SERVER[HTTP_X_FORWARDED_HOST]".substr($tmp,0,strrpos($tmp,'/')));
} else {
        $R_url = $db_bbsurl = Char_cv("http://$_SERVER[HTTP_HOST]".substr($tmp,0,strrpos($tmp,'/')));
}

解决前台发帖的非法操作问题
同样在global.php中:
找到:

list($http_host) = explode(':',$_SERVER['HTTP_HOST']);

修改为:

if ($_SERVER[HTTP_X_FORWARDED_HOST]){
                        list($http_host) = explode(':',$_SERVER['HTTP_X_FORWARDED_HOST']);
                } else {
                        list($http_host) = explode(':',$_SERVER['HTTP_HOST']);
                }

解决多重代理IP unknow问题
还是global.php
找到:

$onlineip = $_SERVER['HTTP_X_FORWARDED_FOR'];

改为:

$ip_temp=explode(",",$_SERVER['HTTP_X_FORWARDED_FOR']);
        $onlineip = $ip_temp[0];

这样子做有一个BUG:如果访问者用内网代理,得到的IP将会是内网IP。我正在想办法解决。

最后,要做的就是解决后台操作非法的问题。由于有我前面说的那个BUG,我不建议修改这个,可以说明的就是修改的方法跟前台类似。

GoogleEarthLinux

今天装GoogleEarth碰到了这个问题

./googleearth-bin: relocation error: /usr/lib/i686/cmov/libssl.so.0.9.8: symbol BIO_test_flags, version OPENSSL_0.9.8 not defined in file libcrypto.so.0.9.8 with link time reference

找了好久,原来是googleEarth自带的libcrypto的问题。解决办法很简单,只要用系统自带的libcrypto.so把google带的替换了就可以了

进入googleearth的安装目录(应该是: ~/google-earth)

# cd ~/google-earth
# sudo mv libcrypto.so.0.9.8  libcrypto.so.0.9.8.old
# sudo ln -s /usr/lib/libcrypto.so libcrypto.so.0.9.8

然后再点击桌面上google earth的图标, google earth可以运行 了