浏览模式: 标准 | 列表

前几天在 debian etch 上配置了一个 apache2 反向代理虚拟主机,因为不能实现代理到应用服务器的负载均衡,所以感觉不太完美。今天配置了一下 lighttpd,发现用 lighttpd 实现反向代理虚拟主机比用 apache2 还要简单,而且实现负载均衡也很容易。早知如此,就不捣鼓 apache2 了。

debian etch 中有 lighttpd 这个包,直接 apt-get 就可以安装了。

安装之后,运行一下:

lighty-enable-mod proxy

就打开 proxy 扩展了。

编辑 /etc/lighttpd/conf-enabled/10-proxy.conf,加入:

$HTTP["host"] =~ "gatetest.(ujn.edu.cn|ujn.cn|ujn6.edu.cn|ujn.org.cn)" {
 
proxy.balance = "hash"
 
proxy.server  = ( "" => ( ( "host" => "10.0.0.10" ),
                            
( "host" => "10.0.0.11" ),
                            
( "host" => "10.0.0.12" ),
                            
( "host" => "10.0.0.13" ) ) )

这样的配置信息就可以了。

至于 lighttpd.conf 文件,可以去掉一些模块和配置,一般只需要保留这些就可以了:

server.modules             = ( "mod_accesslog" )
server.document-root       = "/var/www/"
server.errorlog            = "/var/log/lighttpd/error.log"
accesslog.filename         = "/var/log/lighttpd/access.log"
server.pid-file            = "/var/run/lighttpd.pid"
server.dir-listing         = "disable"
server.username            = "www-data"
server.groupname           = "www-data"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

如果要允许 IPv6,可以加入:

server.use-ipv6 = "enable"

选项。

以上配置就实现了一个反向代理。这种方式配置的话不需要修改 /etc/hosts,而且能够实现负载均衡,相当不错。不过 debian 的 lighttpd 包是不带 mod_cache 这个模块的,因为这个模块是第三方模块,需要打补丁自己编译。为了方便,我重新编译了 lighttpd 的 debian 包,这个包里已经包含了 mod_cache 模块了,只需要安装好之后,只需要执行一下:

lighty-enable-mod cache

就可以开启 cache 模块了。

编译好的带 cache 模块的 lighttpd 包可以在这里下载:lighttpd_1.4.13-4_i386.deb.zip

» 阅读全文

最近,学校里又有许多地方要申请开通网站,因为是学校,所以校园网出口主要是教育网,虽然也有电信和网通的出口,但是 IP 跟教育网的公网 IP 比起来稀有的很,所以,一般部门申请开通网站都需要开通教育网出口,而不会给他们一个电信或者网通的 IP。但问题是,教育网出口的收费是按照流量来收费的,费用相当高,所以,如果许多部门都来开通教育网出口的话,那学校在这方面会支出很大一笔。为了解决这个问题,我于是打算搞一个反向代理,出口搞成教育网和网通双线的,属于教育网免费地址的就走教育网,非免费公网地址就走网通出口。因为网通出口是包年的,不用白不用,这样就省了给教育网交钱啦。

至于反向代理是什么我就不说了,不知道的同志上 google 搜一下就知道了。这里主要写一下如何在 debian etch 上用 apache2 配置反向代理虚拟主机。

首先用 debian-40r0-i386-netinst.iso 安装最小化的系统,任何多余的东西都不要。

安装好之后,配置好 sources.list,然后更新一下系统。

用 apt-get install apache2 安装 apache 2。

安装好之后,进入 /etc/apache2/mods-enabled 目录,所有的扩展都可以删除。

然后在 /etc/apache2/mods-enabled 目录下建立 proxy 和 url_rewrite 扩展的软链接。

ln -s ../mods-available/proxy.conf proxy.conf
ln -s ../mods-available/proxy_http.load proxy_http.load
ln -s ../mods-available/proxy.load proxy.load
ln -s ../mods-available/rewrite.load rewrite.load

然后修改 proxy.conf 内容为:

proxy.conf
<IfModule mod_proxy.c>
        ProxyRequests Off
        
<Proxy *>
                AddDefaultCharset off
        
</Proxy>
        ProxyVia Off
</IfModule>

然后再修改 /etc/apache2 目录下的 apache2.conf 文件内容为:

apache2.conf
ServerRoot "/etc/apache2"
LockFile /var/lock/apache2/accept.lock
PidFile /var/run/apache2.pid
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule mpm_worker_module>
    ServerLimit          16
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
User www-data
Group www-data
HostnameLookups Off
ErrorLog /var/log/apache2/error.log
LogLevel warn
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Include /etc/apache2/httpd.conf
Include /etc/apache2/ports.conf
Include /etc/apache2/conf.d/
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
ServerTokens Prod
ServerSignature Off
Include /etc/apache2/sites-enabled/

其中,IfModule mpm_worker_module 段中的具体数据需要根据具体服务器的情况(如内存、CPU 等)进行配置。

接下来修改 /etc/apache2/sites-enabled 目录下的 000-default 文件:

000-default
NameVirtualHost *
<VirtualHost *>
        ServerName webgate1.ujn.edu.cn
        ServerAlias *.ujn.edu.cn *.ujn6.edu.cn *.ujn.org.cn *.ujn.cn
        DocumentRoot /usr/share/apache2/error
        RewriteEngine On
        RewriteCond %{HTTP_HOST} (.*)\.ujn(6*)\.(edu\.cn|org\.cn|cn)
        RewriteRule ^/(.*) http://%{HTTP_HOST}/$1 [P,L]
        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
        ServerSignature Off
</VirtualHost>

这个文件是配置反向代理的关键,ServerName 指定的是该服务器的名字,可以部署多台,然后分别命名 webgate1、webgate2、webgate3 … 即可。

ServerAlias 是指定该服务器的别名,也就是我们要代理的站点的名字,为了方便,这里使用了通配符。这样做,以后增加站点时就不需要再修改该配置文件了。

RewriteEngine On 是打开 URL 重写引擎。

RewriteCond 是进行 URL 重写的条件,这里的条件是要访问的主机名与我们代理的主机名匹配。为了便于以后增加站点不需要修改配置文件,这里匹配的主机名也用了批量匹配的方式。

RewriteRule 是把允许代理的请求强制作为代理请求发送,并立即中断重写处理。

到这一步,apache2 就配置完了。剩下的就是关于 DNS 的配置了。

首先给你的 apache2 反向代理在你所管理的 DNS 服务器上配置好它的域名,例如本例中就可以将它配置为 webgate.ujn.edu.cn,这里,可以将多个反向代理服务器配置为这同一个 webgate.ujn.edu.cn 域名,这样便可以由 DNS 来实现负载均衡。

然后,将你要代理的站点的域名在你所管理的 DNS 服务器上配置为指向 webgate.ujn.edu.cn 的别名,这样所有的请求就会都发送到 webgate.ujn.edu.cn 服务器上了。

在 webgate.ujn.edu.cn 上(也就是运行 apache2 的反向代理服务器上),不要设置任何域名服务器,也就是把 /etc/resolv.conf 和 /etc/network/interfaces 中关于域名服务器的设置项删除或者注释掉。

最后修改 /etc/hosts 文件,将你要代理的站点的域名和它的真实地址写到这个文件中,例如:

192.168.1.1    gatetest.ujn.edu.cn     gatetest.ujn6.edu.cn    gatetest.ujn.org.cn     gatetest.ujn.cn

hosts 文件中,一个 IP 可以对应多个域名,都写在一行当中,用空格和 tab 分割即可。但是不可以多个 IP 对应同一个域名,否则只有最开始的那个 IP 跟域名对应关系有效。

也就是说 hosts 文件不支持这种基于域名的负载均衡。

» 阅读全文

看到不少朋友要求更新该插件,就重写了该插件。

这个版本是完全重写的,从此可以方便的加入新的网摘网站,新版本改用图片显示,包括抓虾、del.icio.us,Google,Yahoo,Windows Live Bookmarks, Digg,365key,baidu搜藏,新浪Vivi,和讯网摘,Spurl,Wists,Simpy,Newsvine,Blinklist,Furl,Reddit,Fark IP,Blogmarks,Smarking,Magnolia,Segnalo,BumpZee。

如果我遗漏重要的网摘网站,请在下面留言,我会加上,还有希望有朋友能提供一套更漂亮的小图标。

安装方法:

1.修改 {WP_HOME}/wp-content/themes/{YOUR_THEME} 目录下的 single.php 文件,

<div class="post" id="post-<?php the_ID(); ?>">

这个 div 的结束处

</div>

之后加上

<div id="blogit"></div>

2.把该插件拷贝到 {WP_HOME}/wp-content/plugins。

3.在后台激活此插件。

下载:blogit.zip

» 阅读全文

在 PHPRPC 3.0 for javascript 客户端中,关于跨域调用的使用,跟非跨域调用没有区别。只要在客户端中使用跨域服务器的绝对地址就可以了。例如上一节中的例子,如果其中客户端初始化语句改为:

var rpc = new PHPRPC_Client('http://www.phprpc.org/samples/sha1.php', ['sha1']);

,并且客户端网页与该网站不在同一个域中的话,那么它就会自动转为跨域调用模式。而服务器端不需要做任何特殊设置。

但跨域调用在 PHPRPC 中是如何实现的呢?

» 阅读全文

本教程不打算写成一份面面俱到但枯燥无味的 API 手册,而是要把 PHPRPC 中从最基本的用法到高级的应用技巧,以生动活泼的实例展示给大家。

如果你对 PHPRPC 感兴趣的话,那么我们就开始 PHPRPC 之旅吧!

大部分 ajax 框架都很庞大,不但处理传输,而且更多的工作是负责显示的处理,更有甚者,还要用服务器端程序生成客户端的 JavaScript,或者把客户端 JavaScript 本身改造一番。

PHPRPC 与其它 ajax 框架不同,PHPRPC 遵循的是“只做一件事,并把它做好”的原则。它只负责数据传输,并且将传输做到最好!它将你以前用传统的 ajax 方式做不到或者很难做到的事情变得轻而易举!

相信好多人选择 PHPRPC 的一个主要原因就是它能够让你开发 ajax 应用变得更加容易!尽管 PHPRPC 的强大之处不仅限于此,但我不得不承认,这确实是 PHPRPC 的一大亮点! 

所以,我们的第一站,就来看看如何用 PHPRPC 3.0 来编写 ajax 应用吧。

» 阅读全文