2008-08
15

今天在开发时突然apache无法启动了。表现为,输入 httpd -X 后片刻自动退出, 同时在error_log中有如下内容:

[Fri Aug 15 10:54:31 2008] [emerg] (28)No space left on device: Couldn't create accept lock

df一下发现不是磁盘空间的问题。Google了一下就找到了解决方案,原来是系统的信号量(?)不够用了。 用以下命令可以查看所有的信号量:

# ipcs -s
------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0x00000000 19234816   nobody    600        1
0x00000000 19267585   nobody    600        1
0x00000000 19300354   nobody    600        1
0x00000000 19398659   nobody    600        1
0x00000000 19431428   nobody    600        1
0x00000000 19464197   nobody    600        1
0x00000000 19562502   nobody    600        1

然后用这行命令删除所有的信号量即可:

ipcs -s | grep nobody | perl -lane 'print `ipcrm sem $F[1]`'


2007-08
09

今天说说Apache的优化。为什么要优化?因为服务器资源不够用。 资源有很多方面,但根据木桶理论,只要有一种资源不够用, 整个服务器的性能就会受到影响(所谓瓶颈)。

服务器资源

那么服务器的资源包括哪些?对于网站来说主要是CPUTCP连接数这两者。 CPU表现在任务数上,在Linux下使用平均负载(loadavg)来衡量。 可通过以下命令来查看(参考这篇文章):

cat /proc/loadavg

对于单CPU的服务器,loadavg高于1,表明任务队列出现了等待,CPU忙不过来了。 超过2以上就会明显感到性能降低了。

TCP连接数可通过以下命令查看:

netstat -ant | grep :80 | wc -l 

如果要实时监控服务器资源,可参考OpenNMS项目。

注1:内存不算,低廉的价格使得网站服务器很少有因为内存不够而down掉的。
注2:CPU%是瞬时的CPU使用率,通常无法反映出整体负载。

阅读全文 »

2006-12
26

这个话题似乎是老调重弹了,也有很多人给出了相应的方法。我的方法如下:

RewriteCond %{REQUEST_URI} !^/wp-includes/images/noimage.png$ [NC]
RewriteCond %{HTTP_REFERER} !^http://[0-9a-z]+\.inspiremedia\.org/.*$ [NC]
RewriteRule \.(jpg|gif|png|zip|gz|rar)$ http://tech.inspiremedia.org/wp-includes/images/noimage.png [R,L]

主要功能位于第二行,当请求的HTTP_REFERER头不输入本站所在的域时,则执行第三行的重写规则,重定向至 noimage.png。 第二行最后的[NC]表示匹配时忽略大小写。第一行用于防止死循环。

2006-12-26

接受建议,将重写规则仅适用于 wp-content/uploads 下的文件。

RewriteCond %{HTTP_REFERER} !^http://[0-9a-z]+\.inspiremedia\.org/.*$ [NC]
RewriteRule wp-content/uploads/.*\.(jpg|gif|png|zip|gz|rar)$ http://tech.inspiremedia.org/wp-includes/images/noimage.png [R,L]


2006-10
01

本文参考了 mod_perl 的官方文档之一, 但并不是原文档的翻译。

阅读全文 »

2006-09
23

下载并安装 httpd 2.2。

$ tar xjvf httpd-2.2.3.tar.bz2
$ cd httpd-2.2.3/
$ ./configure --enable-rewrite --enable-so
$ make
$ sudo make install

下载并安装 mysql-3.23

$ sudo tar xzvf mysql-3.23.58-pc-linux-i686.tar.gz -C /usr/local/mysql
$ sudo groupadd mysql
$ sudo useradd -d /usr/sbin -s /bin/false -g mysql mysql
$ sudo chown -R mysql.mysql /usr/local/mysql
$ cd  /usr/local/mysql
$ sudo ./scripts/mysql_install_db
$ sudo cp support-files/mysql.server /etc/init.d/mysql
$ /etc/init.d/mysqld start

下载并安装 php 5.1.6。

$ sudo apt-get install flex bison libxml2-dev
$ tar xjvf php-5.1.6.tar.bz2
$ cd php-5.1.6/
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-gd
                  --with-gettext --with-mysql --with-zlib-dir=/usr/lib 
                  --with-mysql=/usr/local/mysql


2006-08
31

本文介绍了在Windows下安装Apache、PHP、mod_perl、mod_python、subversion的方法。
阅读全文 »


2006-04
25

Windows+Apache2下安装php5的方法:

1. 解压php到某个地方

2. 修改apache的httpd.conf,添加如下几行:

LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x-httpd-php .php
PHPIniDir "C:/php"

3. 将php目录下的php5ts.dll复制到%PATH%环境变量指定的地方,比如C:\Windows\system32下,或者与apache.exe放到同一目录下

4. 修改php目录下的php-dist.ini为php.ini

5. 编辑php.ini,修改extension_dir为“php所在的路径” + \ext



2006-04
24

Apache的默认配置是会显示服务器信息的,比如访问一个服务器上不存在的页面,Apache会返回“Not Found”的错误,这个错误页面的最下方写着“Apache/2.0.55...”等等关于服务器的信息。这无疑为入侵者提供了可用的信息。

使用下面的配置可以使其仅显示Apache的字样:

ServerTokens Prod

而使用下面的配置可以干脆不显示服务器信息:

ServerSignature Off


2006-04
07

发文日期:2006/4/7

在Windows环境下,由于这三个软件的编译环境不同,造成结合上的一些版本限制。使用的编译器有两种:MSVC和VC.NET。

Apache: 最新版本为 2.2.0(VC.NET),前一版本为2.0.55(MSVC)。

Python: 2.3系列的最新版本为2.3.5(MSVC);2.4系列的最新版本为2.4.2(VC.NET)。

subversion:最新版本为1.3.1(MSVC)。由于编译环境不同,该版本所附带的 mod_dav_svn.so 不支持Apache 2.2.0,仅支持 2.0.55;subversion的python binding也是不支持Python 2.4系列,仅支持Python 2.3系列。

因此,如果你仅仅是要绑定 Apache 和 Python,那么 Apache 2.0.x + Python 2.3.x 的组合或者是 Apache 2.2.x + Python 2.4.x 的组合都可以;但是如果还要绑定subversion,那么就只能选择 Apache 2.0.x + Python 2.3.x + subversion 1.3.1了。

估计subversion在近期内会推出使用 VC.NET 编译的版本。



2006-04
06

本文将介绍Windows下subversion作为Apache module的安装方法。
阅读全文 »