Penner Blog

Sarah & Penner’s happy life ;)

星期三
4 4,2007

apache2已经用mod_deflate代替了mod_gzip

apache2已经包含了mod_deflate

打开模组

  1. /usr/local/apache2/bin/apxs -i -c /yourpath/httpd-2.2.3/modules/filters/mod_deflate.c

httpd.conf添加

  1. LoadModule deflate_module modules/mod_deflate.so

如果想只压缩html,text,xml 如果下面配置:

  1. AddOutputFilterByType DEFLATE text/html text/plain text/xml

(更多…)

星期二
1 9,2007

硬件上的考虑

其实起50%的作用,当然是越快越好。如果不知道哪个快,就换成越贵越好。可实际上不可能做到这些,因为银子有限,所以按照这个顺序考虑:内存越大越好- >硬盘SCSI好于SATA->CPU越快越好。下面是一个比较极端的高级配置(指运行MySQL数据库级别的网站,想克隆ebay的去扎风投然后买曙光好了):

Dual Xeon 3.x + 4G RAM + SCSI 集群做MySQL服务器
Dual Xeon 3.x + 4G RAM + SCSI 做HTTP。

下面是一个更为靠普的推荐配置:
Dual Xeon 3.x + 4G RAM + SCSI 做MySQL+HTTP的单机服务器

而下面这个也是更为广泛的配置:
Dual Xeon 3.x + 2G RAM + SATA 做MySQL+HTTP的单机服务器
对于这种情况需要用心优化了。

记住,当有更多预算时,首先考虑的是内存,其次是高速硬盘和RAID,最后才是CPU。

软件的版本

软件指操作系统、Apache、MySQL和PHP的版本。对于操作系统,我一直习惯使用RedHat系列,现在用的是32位的Red Hat Enterprise Linux企业版,可能是因为家里的开发PC装的是免费的Fedora Core。而目前流行的被认为最适合做Web服务器的是CentOS,不过我没有用过。

相对于OS的版本,内核的版本更为重要,建议随时升级到最新版本的内核。关于内核比较重要的事情是跟超线程CPU的兼容。早期的超线程功能往往会被禁掉,因为软件不支持,而现在的内核是支持超线程技术的,所以确保内核的更新是很有必要的。(参考文档:Hyper-Threading speeds Linux)

对于Apache、MySQL和PHP,都属于双线版本。即同时维护两个版本的产品线,我建议使用最新版本的Apache 2.0,因为Apache 2.0在HTTP的性能上做了很大的改进(Apache网站语),而MySQL根据自己的爱好,我使用MySQL 4.1系。注意如果你使用MySQL 3.x版,强烈建议你现在就升级到MySQL 4.1,你可以即刻看到网站速度提高。

对于PHP,我依然使用4.4系,因为现有的应用都是在4下面开发的,同时听说很多升级到PHP5后的惨痛故事,我就不冒险了。说到PHP,不得不抱怨几句,因为PHP的发行版经常有一些匪夷所思的BUG,比如有一次我发现某个在开发PC上用的好好的函数在服务器上突然用不了(服务器自动抢鲜升级了PHP),最后折腾1天得知PHP发布新版本的小子忘了把那个函数打包进去了(非常常用的函数apache_note)。

Apache参数的优化

按照前面提到的版本问题,Apache可以直接使用2.0版本产品线。针对Apache的优化主要是针对httpd.conf的优化,当然还有其他地方,如果特别留意的话,网上常有专家惊呼“居然这么多人忽略xxxx处的优化”等等,实际情况也确实如此,因为优化的地方实在太多了,httpd.conf只能做一个出发点。即便如此如果仅仅使用httpd.conf出厂默认值的话还是令人痛心不已。 (更多…)

Apache的ReWrite的应用

星期日
4 17,2005

Apache的mod_rewrite是提供了强大URL操作的杀手级的模块,可以实现几乎所有你梦想的URL操作类型,其代价是你必须接受其复杂性,因为mod_rewrite的主要障碍就是初学者不容易理解和运用,即使是Apache专家有时也会发掘出mod_rewrite的新用途。

换句话说:对mod_rewrite,或者是打退堂鼓永不再用,或者是喜欢它并一生受用。

ReWrite可以应用在以下方面或者解决以下问题:

URL的规划
规范的URL
说明:
在有些网站服务器上,一个资源会拥有多个URL,在实际应用和发布中应该被使用的是规范的URL,其他的则是简写或者是内部使用的。无论用户在请求中使用什么形式的URL,他最终看见的都应该是规范的URL。

方案:
对所有的不规范的URL执行一个外部的HTTP重定向,以改变它在浏览器地址栏中的显示及其后继的请求。下例中的规则集用规范的/u/user替换/~user,并修正了/u/user所遗漏的后缀的斜杠。

  1. RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
  2. RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]

规范的主机名
说明:

方案:

  1. RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
  2. RewriteCond %{HTTP_HOST} !^$
  3. RewriteCond %{SERVER_PORT} !^80$
  4. RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
  5. RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
  6. RewriteCond %{HTTP_HOST} !^$
  7. RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [L,R]

被移动过的DocumentRoot
说明:
通常,网站服务器的DocumentRoot直接对应于URL”/”,但是,它常常不是处于最高一级,而可能只是众多数据池中的一个实体。比如,在Intranet站点中,有/e/www/(WWW的主页)、/e/sww/ (Intranet的主页)等等,而DocumentRoot指向了/e/www/,则必须保证此数据池中的所有内嵌的图片和其他元素对后继请求有效。 (更多…)

星期日
4 17,2005

下载模块:http://www.nowhere-land.org/programs/mod_vhost_limit/

安装:

  1. apxs -c mod_vhost_limit.c -o /path/to/libexec/mod_vhost_limit.so

在 httpd.conf 加入:

  1. LoadModule vhost_limit_module libexec/mod_vhost_limit.so
  2. AddModule mod_vhost_limit.c

配置:

  1. MaxClients 150
  2. ExtendedStatus On
  3.  
  4. NameVirtualHost *
  5. <VirtualHost *>
  6.     ServerName server1
  7.     DocumentRoot /some/where/1
  8.     MaxVhostClients 100
  9. </VirtualHost>
  10.  
  11. <VirtualHost *>
  12.     ServerName server2
  13.     DocumentRoot /some/where/2
  14.     MaxVhostClients 30
  15. </VirtualHost>
  16.  
  17. <VirtualHost *>
  18.     ServerName server3
  19.     DocumentRoot /some/where/3
  20. </VirtualHost>

其中:server1 被限制为 100 个并发线程数。server2 被限制为 30 个并发线程数。server3 没有被限制。
注:需 mod_status 的 ExtendedStatus On 支持!! (更多…)

用Apache实现虚拟主机服务

星期日
4 17,2005

所谓的虚拟主机服务就是指将一台机器虚拟成多台WEB服务器。举个例子来说,一家公司想从事提供主机代管服务,它为其它企业提供WEB服务。那么它肯定不是为每一家企业都各准备一台物理上的服务器,而是用一台功能较强大的大型服务器,然后用虚拟主机的形式,提供多个企业的WEB服务,虽然所有的WEB服务就是这台服务器提供的,但是让访问者看起来却是在不同的服务器上获得WEB服务一样。

具体地说,就是,我们可以利用虚拟主机服务将两个不同公司www.company1.com与www.company2.com的主页内容都存放在同一台主机上。而访问者只需输入公司的域名就可以访问到它想得到的主页内容。

用Apache设置虚拟主机服务通常可以采用两种方案:基于IP地址的虚拟主机和基于名字的虚拟主机,下面我们分别介绍一下它们的实现方法。以便大家在具体的应用中能够选择最合适的实现方法。 (更多…)

IIS和Apache共同使用80端口

星期日
4 17,2005

将apache设为使用80端口,IIS使用其它端口,比如8080,然后将apache作为IIS的代理。

在httpd.conf里面,取消下面四行的注释:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

然后建立一个虚拟主机,将该域名的所有访问转向8080端口。

  1. <VirtualHost *:80>
  2.     ServerName blog.penner.cn
  3.     ProxyPass / http://blog.penner.cn:8080/
  4.     ProxyPassReverse / http://blog.penner.cn:8080/
  5. </VirtualHost>

还有一个方法是:

  1. <VirtualHost 127.0.0.1>
  2.     ServerName youdomian.com
  3.     ProxyPass yourdomain.com:iisport
  4.     ProxyRequests on
  5. </VirtualHost>

但是Apache的官方手册提到
在您没有对您的服务器采取安全措施之前,请不要用ProxyRequests启用您的代理。一个开放的代理服务器不仅对您的网络有威胁,对整个因特网来说也同样如此。

星期日
4 17,2005

ServerType standalone
#设置服务器的形式是单独启动(standalone),还是借由互联网络伺服程序inetd来启动。一般使用前者。

ServerRoot “/usr/local/apache”
#设置服务器的Home目录,用来存放服务器的设置文件、错误文件、记录文件。

PidFile logs/httpd.pid
#程序启动时,把父进程httpd的进程号(process id)存在这个文件中。这个文件名可以配合PidFile指令加以改变。

ScoreBoardFile logs/apache_status
#设置网络上WWW服务器一些执行程序的记录文件。

#ResourceConfig conf/srm.conf
#AccessConfig conf/access.conf
#这两个文件的内容已经包含在httpd.conf文件中了。

|inline

星期三
4 6,2005

关闭整体目录的PHP解析权限

关闭路径为f:/www/site/easy2run/的PHP解析

<Directory "f:/www/site/easy2run/">
    <Files ~ ".php">
        Order allow,deny
        Deny from all
    </Files>
</Directory>

对于某一个特定网址(虚拟主机VirtualHost)进行PHP解析限制

关闭IP为127.0.0.1的PHP解析

<VirtualHost 127.0.0.1>
...
    <Files ~ ".php">
        Order allow,deny
        Deny from all
    </Files>
</VirtualHost>

配置 Apache 实现禁止图片盗链

星期三
11 10,2004

从网上摘抄的,收藏一下~
1、假设充许连结图片的主机域名为:www.demo.com.cn
2、修改httpd.conf

  1. SetEnvIfNoCase Referer "^http://www.demo.com.cn/" local_ref=1
  2. <FilesMatch ".(gif|jpg)">
  3.     Order Allow,Deny
  4.     Allow from env=local_ref
  5. </FilesMatch>

这个简单的应用不光可以解决图片盗链的问题,稍加修改还可以防止任意文件盗链下载的问题。

使用以上的方法当从非指定的主机连结图片时,图片将无法显示,如果希望显示一张“禁止盗链”的图片,我们可以用mod_rewrite 来实现。

首先在安装 apache 时要加上 –enable-rewrite 参数加载 mod_rewrite 模组。

假设“禁止盗链”的图片为abc.gif,我们在 httpd.conf 中可以这样配置:

  1. RewriteEngine on
  2. RewriteCond %{ HTTP_REFERER } !^$
  3. RewriteCond %{ HTTP_REFERER } !^http://(www\.)?demo.com.cn /.*$ [NC]
  4. RewriteRule \.(gif|jpg)$ http://www.demo.com.cn/abc.gif [R,L]

当主机的图片被盗链时,只会看到 abc.gif 这张“禁止盗链”的图片!