Apache2 中的 prefork/worker/event

三种 MPM(Multi-Processing Module) ,最古老的 prefork,worker 以及比较新的 event 模式。
prefork 一个进程一个线程,worker 一个进程多个线程,event 在 worker 基础上做了更大的改进,前两者还是使用的是 select I/O 模型,而 event 则需要 glibc 的 EPoll 的支持。
总结一下,prefork 对线程支持不太好的可以使用,多进程模式,需要经常 fork 子进程,耗资源;worker 在大流量时更适合,消耗资源相对较少。
进程跟线程的关系,区别网上有很多,简单讲,一个程序至少有一个进程,一个进程至少有一个线程。线程划分的尺度更小,并发性更高。
Continue reading

为 domU 添加新存储

为 domU 增加一个数据区,100G:
# dd if=/dev/zero of=data.img bs=1M seek=100000 count=1

修改对应的 cfg 文件:

disk=[….

    "tap:aio:data.img,xvdb1,w"]

写入 fstab。

启动,格式化,fsck.ext4 时出现如下错误

fsck 1.41.4 (27-Jan-2009)
e2fsck 1.41.4 (27-Jan-2009)
fsck.ext4: Group descriptors look bad… trying backup blocks…
fsck.ext4: Bad magic number in super-block while trying to open /dev/xvdb1

The superblock could not be read or does not describe a correct ext4
filesystem.  If the device is valid and it really contains an ext4
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:

解决方法:
# mke4fs -j -O dir_index data.img

 

Apache2 虚拟主机注意点

下面这个是使用 VirtualHost 过程中的注意事项,分 Ip Based 以及 Domain Based。

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:13:3e:13:11:06 
          inet addr:111.111.111.111  Bcast:111.111.111.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:57203592 errors:0 dropped:0 overruns:0 frame:0
          TX packets:21655208 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:85022831734 (85.0 GB)  TX bytes:1540881922 (1.5 GB)
          Interrupt:10

eth1      Link encap:Ethernet  HWaddr 00:13:3e:13:11:17 
          inet addr:10.18.10.252  Bcast:10.18.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6982 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1249 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1122466 (1.1 MB)  TX bytes:535239 (535.2 KB)
          Interrupt:11

eth1:1    Link encap:Ethernet  HWaddr 00:13:3e:13:11:17 
          inet addr:10.18.10.251  Bcast:10.18.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:11

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:984 (984.0 B)  TX bytes:984 (984.0 B)

1.Ip Based

没有必要设置 NameVirtualHost 指令。VirtualHost 紧邻 addr:port,addr 建议使用 IP 的方式而非 FQDN 的方式。如果要使用 * 则必须跟 NameVirtualHost 结合使用,或者下面演示的 _default_ 方式。

$ cat /etc/apache2/sites-available/ip-based

<VirtualHost 10.18.10.252:80>
    DocumentRoot /var/www/a
</VirtualHost>
<VirtualHost 10.18.10.251:80>
    DocumentRoot /var/www/b
</VirtualHost>
<VirtualHost 10.18.10.251:8000>
    DocumentRoot /var/www/a
</VirtualHost>
<VirtualHost _default_:*>
    DocumentRoot /var/www/c
</VirtualHost>

基于 IP 的用的比较少,内部实验性质的可以试试。

Continue reading

Avahi-daemon 问题

CentOS/Ubuntu 默认会开启 avahi-daemon,这玩意在服务器上显然是没用的,会占用大概 250KB 的内存,最重要的是会开 5353 和 32768 两个端口。

在 Ubuntu 下禁用:
# vim /etc/default/avahi-daemon
AVAHI_DAEMON_DETECT_LOCAL=0
# sed -i [email protected] on (filesystem and started dbus)@start on (never and filesystem and started dbus)@ /etc/init/avahi-daemon.conf
# vim /etc/avahi/avahi-daemon.conf

use-ipv4=no

CentOS 下:
# chkconfig avahi-dnsconfd off
# chkconfig avahi-daemon off

以上都不如直接卸了爽:
# /etc/init.d/avahi-daemon stop
# update-rc.d -f avahi-daemon remove
# apt-get remove avahi-daemon

 

HTTP Headers 部分字段笔记

一个简单的 request 可以像下面这样:
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1 
Host: net.tutsplus.com 

而复杂起来可以像下面这样:
Accept    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset    UTF-8,*
Accept-Encoding    gzip, deflate
Accept-Language    zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Cache-Control    max-age=0
Connection    keep-alive
Cookie    fc=fcVal=634513393390715776; __utma=118891282.16916071.13137550.1327303242.1327308483.209; __utmz=118891282.1326609907.194.66.utmcsr=t.co|utmccn=(referral)|utmcmd=referral|utmcct=/CzETxUKX; wp-settings-1=m5%3Do%26m9%3Do%26m8%3Do%26m6%3Do%26m1%3Do%26m7%3Dc%26m4%3Do; wp-settings-time-1=1327827407; Hm_lvt_c83c032e78cf7375a9080f7c7cb11f4d=1329629501454; wordpress_logged_in_291e3cce02324c1995dd5347a4c388d8=jaseywang%7C1330445508%7C1c14af67aebf19f5; Hm_lpvt_c83c032e78cf7375a9080f7c7cb11f4d=1329629501454
Host    jaseywang.me
User-Agent    Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0

Continue reading