Linux


上周一个朋友和我说,他们的网站无法访问了。仔细一问,原来他们的域名备案刚被注销了,机房有白名单,没备案的域名无法访问。
朋友的服务器是自己购买的,托管在广东一家机房,已经付了一年费用,才刚过几个月。他们的网站数据库比较庞大,程序写的又比较烂,一般的服务器跑起来非常慢,备案花费时间据说2个星期到2个月都有可能。大家讨论了几个方案:
一. 干脆搬到国外去,不鸟这个备案了。 缺点:服务器是新买的,托管费也是才交了没几个月,这样子亏大了,他们也不是有钱的人。优点:以后都可以不用管TG的备案了。
二. 注册一个临时域名,将站搬到国外服务器,主域名继续留在国内备案。 缺点:能顺畅运行他们网站的服务器,月租大概要一千元,还是有点贵,网站数据需来回同步。优点:花费比方案一少。
三. 注册一个临时域名,购买一个VPS,通过反向代理方式访问。 缺点: 速度会比较慢,得绕地球一个来回呢。 优点:花费少,对国内速度较好的 linode vps 每月只要130出头。数据不用迁移。

最后大家讨论的结果是使用方案三先测试。

介绍一下环境:
国内服务器: Centos 5.0 32位, nginx 7.x + php 5.2.x 硬件: Cpu Xeon X34xx, 8G 内存 (对于32位系统,容我吐槽一下,安装配置操作系统的人真是天才啊)
国外VPS: Debian 6 64位 , nginx 7.x 硬件: cpu 是Xeon L5520 共享, 512M 内存

做法:
一. 两边服务器都安装openvpn, 建立VPN加密连接。 如果不会,请去Google ,应该有很多文档
二. 在国内服务器上配置nginx:
nginx.conf 的http 部分,增加两行, 10.10.8.0/24 是openvpn使用的IP范围,
set_real_ip_from 10.10.8.0/24;
real_ip_header X-Real-IP

虚拟主机配置上,增加新申请的临时域名
在这里,如果nginx抱怨 set_real_ip_from 是非法的配置,请重新编译你的nginx,加上选项 –with-http_realip_module

三.在国外的vps配置nginx

创建 /var/cache/nginx 目录,权限设为777
在nginx.conf 的http 部分,增加一行
proxy_cache_path /var/cache/nginx levels=2:2 keys_zone=one:100m max_size=5G;
创建一个虚拟主机配置,下面是例子:

server {
listen 80;
server_name newdomain.com www.newdomain.com;
access_log /var/log/nginx/newdomain.com.log;
root /var/www/default;
index index.html index.htm ;

location / {
proxy_pass http://10.10.8.1:80;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}

location ~ .*\.(ico|png|jpg|gif|css|js)?$ {

proxy_cache one;
proxy_pass http://10.10.8.1:80;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_valid 200 304 60m;
proxy_cache_valid 404 1m;

}

}

newdomain.com 是新申请的域名,对于一些不会经常改动的文件,如图片文件,js文件,css文件,我设了让它缓存60分钟,以减少带宽消耗,加快用户速度。 10.10.8.1 是国内服务器的vpn ip。
经过测试,这个方案运作还算不错,除了速度比以前慢,其它表现完全一致。
最后就是一个收尾工作,将原来网站上,使用老域名的绝对连接改为相对连接。
可以将老域名也指到国外服务器上,发个公告通知用户,过几天再将老域名指回国内服务器,申请备案。
备案下来就可以启用老域名了,所有数据都一模一样。

lightwave.net是美国Sanjose的一家小型IDC,提供服务器、vps租用。半个月前申请了他们家的xen tiny vps,过了几天升级到xen small,感觉这家公司提供的产品性价比不错,向大家推荐下,优点如下:
1. 机房位于美国西海岸的Sanjose,接入HE机房带宽,是对国内速度最好的美国机房之一
2. 8个磁盘做的RAID10, IO性能和可靠性都很好
3. 可以使用到8个CPU核心(这家用的是2颗AMD 4核CPU)
4. 磁盘和带宽给的都比较充裕,比Linode的实惠,实际使用性能和Linode 机器接近。
其中最便宜的Xen Tiny配置如下:
256 MB Dedicated Memory
512 MB swap
20 GB Disk
400 GB Transfer
1 Static IPv4 Address
SolusVM Control Panel

exFAT(Extended File Allocation Table File System,扩展FAT,即扩展文件分配表)是Microsoft在Windows Embeded 5.0以上(包括Windows CE 5.0、6.0、Windows Mobile5、6、6.1)中引入的一种适合于闪存的文件系统,为了解决FAT32等不支持4G及其更大的文件而推出。对于闪存,NTFS文件系统不适合使用,exFAT更为适用。详细的介绍可以看Wiki上的介绍。目前,Linux已经支持exFat的读写
在Debian 下可以很方便的安装这个补丁,实现对exfat格式的读写。

  1. apt-get install scons  libfuse-dev subversion
  2. svn co http://exfat.googlecode.com/svn/trunk/ exfat-read-only
  3. cd exfat-read-only
  4. scons
  5. scons install

使用:
mount -t exfat-fuse -o allow_other /dev/sdc1 /mnt/

1. 打开需要的模块
ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/proxy.load
ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load
ln -s /etc/apache2/mods-available/cache.load /etc/apache2/mods-enabled/cache.load
ln -s /etc/apache2/mods-available/disk_cache.load /etc/apache2/mods-enabled/disk_cache.load

2.ReWrite 配置
我这里文章都是这样子的: http://www.example.com/Article.php?id=124323
我希望将它改为更加友好的方式: http://www.example.com/list/124323.html
RewriteEngine On
RewriteRule /articlelist/(.+)\.html$ /Article.php?id=$1 [L]
经过Rewrite配置后,重启确定Rewrite生效.
/etc/init.d/apache2 restart

3. 静态化
虽然这样子外人看起来像是静态化的了,但是每次访问都需要去查一次数据库,为了真正的实现静态化,我们通过mod_proxy和mod_disk_cache模块来实现。
用这个办法的好处是你不需要在前面再架设一个Squid之类的代理服务器,直接用apache2内置模块就可以实现了。性能也足够高,静态化后性能可以提高10倍,这还是在用简单sql查询的前提下,如果sql比较复杂,那性能的提高就更加明显了。

A. 先创建cache目录
mkdir -p /var/cache/apache2/proxy
chmod 777 /var/cache/apache2/proxy
chown -R www-data.www-data /var/cache/apache2/proxy

B.  修改php程序。 mod_cache遵循标准rfc协议,如果你的php输出里面没有过期设置,它将不会cache这个文件。
在php程序前面加入几行代码,注意一定要在输出正文前输出HTTP头
// 过期时间设置为一个月,如果你的文章不可能变,那将这个值设的更大些
$offset = 3600 * 24 * 30;
// 过期日期,当前时间+ 过期时间
$expire = “Expires: ” . gmdate(“D, d M Y H:i:s”, time() + $offset) . ” GMT”;
//输出HTTP 头
Header($expire);

C. 代理配置
www.example.com 是你的实际域名,请在/etc/hosts 文件写入IP解析,避免每次都去查询
127.0.0.1 www.example.com

<IfModule mod_proxy.c>
ProxyPass /staticlist/ http://www.example.com/list/
ProxyPassReverse /staticlist/ http://www.example.com/list/
<IfModule mod_disk_cache.c>
CacheRoot /var/cache/apache2/proxy
CacheEnable disk /staticlist/
CacheDirLevels 3
CacheDirLength 2
</IfModule>
</IfModule>

D. 重启apache 让其生效
/etc/init.d/apache2 restart
记得要将页面的链接改为新的 http://www.example.com/staticlist/1234.html

4. 注意事项:

如果生效了,会在 /var/cache/apache2/proxy 生成目录和文件,这个目录记得要有足够的空间。apache不会自动清理这个目录,你可以用htcacheclean 来清理。

Debian真是非常好用的服务器操作系统啊,磁盘配额也非常容易实现。
Linux下限制磁盘配额可以按每个组或每个用户来限制,下面以每个用户限制为例说明一下:

实现磁盘配额限制步骤:
1. 内核里面打开了配额的支持,绝大部分发行版都打开的
2. 以配额方式加载文件系统
3.安装配额软件:
4.配置配额

原/etc/fstab的一项:

  1. /dev/hda1       /home       ext3    defaults           1       1

做如下修改:

  1. /dev/hda1       /home       ext3    defaults,usrquota           1       1

如何是对组限制就将usrquota改为grpquota
重新加载文件系统:

  1. mount -o remount,usrquota /home

加载内核模块,并让其开机的时候也会自动加载

  1. modprobe quota_v2
  2. echo 'quota_v2' >> /etc/modules

我们要在启用配额的分区创建文件并且限制root才能读写

  1. touch /home/aquota.user
  2. touch /home/aquota.group
  3. chmod 600 /home/aquota.user /home/aquota.group

现在来安装quota软件:

  1. apt-get install quota quotatool

现在到最后一步了,假设我们要对系统里的某个用户skx进行限制配额:

  1. quotatool -u skx -bq 20M -l '25 Mb' /home

对了,如果是20G,那就要写20000M,quotatool好像不认 20G的。
收工~~
其实现在一般情况下也用不到这个磁盘限额。

原来的文章

懒得转贴了,自己到这个网页看吧

花了周末整整两天时间和P牛一起合作,终于将漫游的论坛改为全文搜索了,个中辛苦不足为外人道也。

呵呵,其实开玩笑的。一切进行的都很顺利,最大的问题就是需要整理一个好用的词库。我们用了自带的中文词库,发现很不适合漫游使用,后来找了一个拼音加加的词库,一个google拼音的词库,一个搜狗拼音的词库,还有自己人肉整理了一些资料,终于弄了一个100万字的超大词库。

这个全文搜索程序很简单,核心sql 就一行 “select postid,threadid,title from search where match(title,pagetext) against(‘关键词’)”。我这里采用的是双数据库方案,原来的论坛数据库不动,新安装了一个支持中文全文搜索的Mysql。在里面建立搜索专用数据库,自己写了个程序每天增量将帖子加到这个数据库上就好了。具体的实现可以参考 hightman 的网站。

http://myft.twomice.net/show_hdr.php?xname=ILBS301&xpos=4&dname=

http://php.twomice.net/myft/s2.php

vhcs 开发基本处于停滞状态,今天看到了 ISPConfig, 觉得挺有意思的。有好几个引人注目的优点:

1. 支持的发行版非常多

2. 功能强大

3. 开发社区活跃,文档齐全

ISPConfig

ISPConfig is an open source hosting control panel for Linux. ISPConfig is licensed under BSD license.

Managed Services

  • Httpd (virtual hosts, domain and IP based)
  • FTP
  • Bind (A, CNAME, MX and SPF Records)
  • POP3 Auto-Responder
  • MySQL client-databases
  • Webalizer statistics
  • Harddisk quota
  • Mail-Quota
  • Traffic limits
  • IP-addresses
  • SSL
  • SSI
  • Shell-access
  • Mailscanner (Antivirus)
  • Firewall

Detailed Feature list

System Requirements

Supported Distributions

  • Mandrake Linux starting from version 8.1 to 10.2
  • Mandriva 2006 to 2007
  • Red Hat Linux starting from version 7.3 to 9.0
  • Fedora Core 1 – 6
  • SuSE Linux starting from version 7.2 to 10.2
  • Debian 3.0 (Woody), Debian 3.1 (Sarge), Debian 4.0 (Etch)
  • Ubuntu 5.04 (Hoary Hedgehog), 5.10 (Breezy Badger), 6.06 (Dapper Drake), 6.10 (Edgy Eft)
  • CentOS 4.1 to 4.4

Details

  • Operating System: Linux (Kernel 2.4 or later with glibc6) (the following distributions are supported: Mandrake Linux starting from version 8.1, Mandriva 2006 & 2007, Red Hat Linux starting from version 7.3, Fedora Core 1 – 6, SuSE Linux starting from version 7.2, Debian starting from version 3.0, Ubuntu 5.04, 5.10, 6.06, and 6.10, CentOS 4.1 – 4.4)
  • Apache Webserver version 1.3.12 or later / 2.0.40 or later
  • Sendmail or Postfix
  • Procmail
  • Quota Package
  • ProFTP as standalone version or vsftpd as inetd/xinetd/standalone version
  • Php 4.0.5 or newer as Apache module
  • MySQL data base
  • a POP3/IMAP daemon that supports either the traditional Unix-Mailbox format (e.g. gnu-pop3d, qpopper, ipop3d, popa3d or vm-pop3d) or the Maildir format (e.g. Courier-Imap)
  • OpenSSL and mod_ssl for the creation of SSL virtual hosts
  • BIND8 / BIND9
  • iptables or ipchains

虽然大部分情况下我们只要用ssh登录linux服务器就好了,但是有时候我们的程序需要在图形界面下运行,这时我们就要用到vnc server这个软件了。在Debian下安装vnc server很简单的,只要几步就可以了:

1. 安装软件

apt-get install tightvncserver tightvnc-java

2. 配置每个用户自己的vnc server。
启动命令:

vncserver -depth 24 -name aru_desktop -httpport 9001 -geometry 1024×768 :1
参数解释:

1. -depth 24 使用24位颜色,这里一般用16或者24

2. -name aru_desktop 桌面名字,这个参数并非必要,可以随便起个喜欢的名字

3. -httpport 9001 使用浏览器连接的端口,请用1024以上的端口,如果是多个用户都开vnc server,那每个用户要使用不同的端口
4. -geometry 1024×768 桌面分辨率,根据要求调整

5. :1 会话数字,同3

第一次运行会要求你输入一个密码,这个密码和你的ssh登录密码是分开的,当然你也可以用同样的密码

关闭命令:

vncserver -kill :1

:1 是会话数字,和启动的会话数字一致

3. 输入法和桌面环境

每个用户的vnc server启动脚本是 ~/.vnc/xstartup

下面是我的启动脚本:

#!/bin/sh

xrdb $HOME/.Xresources
xsetroot -solid grey
x-terminal-emulator -geometry 80×24+10+10 -ls -title “$VNCDESKTOP Desktop” &
#x-window-manager &
#gnome-session &
xfce4-session &
scim -d

里面有3个窗口管理服务器:

#x-window-manager &

#gnome-session &

xfce4-session &

最上面两个是被注释掉的,选择自己喜欢的窗口管理就好了,将其余的窗口管理器注释掉。

scim -d

打开scim输入法.

4. 连接vnc server

打开vnc server后,可以通过http方式或者用专用客户端连接

http方式,在浏览器输入 http://ip:9001/

专用客户端,在地址输入 ip:1

Debian默认设置下是开反向域名解析的。我们连接ssh/ftp的时候就会有一个比较明显的延时,大概要等30秒后才能输入账号密码。解决方法有两个:

1. 将客户机IP和域名对应关系加入到 /etc/hosts上

2. 编辑 /etc/nsswitch.conf

找到 hosts  那行,将其改成下面这样:

hosts:          files dns [NOTFOUND=return]

今天终于将maemocjk 的输入法卸载了。因为我找到一个的更好的输入法: scim for maemo. 他有770和N800的版本,由wolfg 移植的。安装 很简单,直接点install 文件就可以了,然后需要重启机器,使用ctrl + 空格i打开输入法。刚才测试了一下,bug还是有不少的,比如要输入目前这个词,老是发现多输入了一个字母的样子,难道是因为我安装的虚拟键盘问题?明天将现在这个虚拟键盘去掉试试。另外当前只有智能拼音输入法,应该将五笔也加进去的。
项目主页

其实还没有正式宣布发布,但是文件已经冻结了,iso也出来了。

下载地址: http://cdimage.debian.org/debian-cd/4.0_r0/

发布声明应该会在一天内宣布的,当各大主力镜像将iso 镜像完毕,就会正式宣布发布了。

上一个稳定版本Debian 3.1 Sarge 是在 2005年6月6日发布的,距离现在已经快2年了。

Debian 的下一个版本代号为 lenny ,让我们祝愿 lenny 能够顺产吧~

update: 正式发布

lighttpd是一个高性能的http服务器,很多大型网站都用它来跑静态文件(图片、文件共享、视频网站)或使用它的fastcgi来跑动态网站。lighttpd 用fastcgi模式跑php据说有问题的,不推荐使用。但是跑其它的fastcgi应用强烈推荐。另外, lighttpd还有一个很强大的mod_proxy模块可以部分替换squid应用。

1.5.0 最振奋人心的功能就是它终于支持了linux aio 模式。在跑静态文件的时候性能能有 80%以上的提升。具体的测试结果大家可以看看这里:

linux-aio-and-large-files

下载: pre-release-lighttpd-1-5-0-r1454-tar-gz

不过现在版本还有很多bug,不推荐使用aio模式 :)

vhcs 2.4.x 发现一个重要的安全漏洞,请使用vhcs 2.4.x 的用户尽快更新。

更新方法:

1. 下载最新的补丁文件 vhcs_patch_2006-02-09.tar.bz2

2. 解压后用里面的 login.php 覆盖 /var/www/vhcs2/gui/include/login.php

3. 完成

The X’mas Edition :)
里面包括了我翻译的中文语言包,请大家指正。
官方下载地址: vhcs 2.4.7
查看更改记录
升级到2.4.7(英文)
我将在最近几天帖上一个完整的安装指南。

下一页 »