Posts Tagged ‘apache’

隐藏响应头中apache、php的版本信息

Posted by 机器人 on 12th 三月 2010 in linux/server

1. 当apache没有设置出错页时,如果访问一个不存在的资源,系统会给出如下一段服务器的签名信息:

Apache/2.2.3 (CentOS) Server at 192.168.2.100 Port 80

可通过配置文件的ServerSignature选项来隐藏它.

ServerSignature Off

2. 请求php资源时,会在响应头中提供php的版本信息,如下:

X-Powered-By PHP/5.1.6

Read the rest of this entry »

apache cgi程序的简单配置

Posted by 机器人 on 5th 五月 2009 in c/c++, linux/server

首先添加虚拟主机

<virtualhost 127.0.0.1:50001>
</virtualhost>

这里新添加了50001端口来进行监听,所以还需要添加监听端口号

Listen 50001

要让程序能正常运行,还得通过配置ScriptAlias来允许服务器在指定的情况下,以CGI方式运行。

<virtualhost 127.0.0.1:50001>
ScriptAlias /cgi-bin/ /usr/local/ebserver/apache/cgi-bin/
</virtualhost>

所以上述的配置会告诉apache,所以以/cgi-bin/开头的资源都会被映射到/usr/local/webserver/apache/cgi-bin/目录下,并被认为是cgi程序。
然后重启服务器
在apache/cgi-bin/目录里有一些测试例子,我们可能用它来测试下,看看配置是否能正常运行。
比如说apache/cgi-bin/目录下有个test-cgi程序,源码如下:

#!/bin/sh
 
# disable filename globbing
set -f
 
echo "Content-type: text/plain; charset=iso-8859-1"
echo
 
echo CGI/1.0 test script report:
echo
 
echo argc is $#. argv is "$*".
echo
 
echo SERVER_SOFTWARE = $SERVER_SOFTWARE
echo SERVER_NAME = $SERVER_NAME
echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE
echo SERVER_PROTOCOL = $SERVER_PROTOCOL
echo SERVER_PORT = $SERVER_PORT
echo REQUEST_METHOD = $REQUEST_METHOD
echo HTTP_ACCEPT = "$HTTP_ACCEPT"
echo PATH_INFO = "$PATH_INFO"
echo PATH_TRANSLATED = "$PATH_TRANSLATED"
echo SCRIPT_NAME = "$SCRIPT_NAME"
echo QUERY_STRING = "$QUERY_STRING"
echo REMOTE_HOST = $REMOTE_HOST
echo REMOTE_ADDR = $REMOTE_ADDR
echo REMOTE_USER = $REMOTE_USER
echo AUTH_TYPE = $AUTH_TYPE
echo CONTENT_TYPE = $CONTENT_TYPE
echo CONTENT_LENGTH = $CONTENT_LENGTH

然后在浏览器里输入http://127.0.0.1/cgi-bin/test-cgi
如果设置正确就能显示如下信息

CGI/1.0 test script report:
 
argc is 0. argv is .
 
SERVER_SOFTWARE = Apache/2.2.10 (Unix) PHP/5.2.8
SERVER_NAME = 127.0.0.1
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.1
SERVER_PORT = 50001
REQUEST_METHOD = GET
HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
PATH_INFO = 
PATH_TRANSLATED = 
SCRIPT_NAME = /cgi-bin/test-cgi
QUERY_STRING = 
REMOTE_HOST =
REMOTE_ADDR = 127.0.0.1
REMOTE_USER =
AUTH_TYPE =
CONTENT_TYPE =
CONTENT_LENGTH =

当然你也可以选择用其它语言来写一个cgi程序,其中apache提供了一个用pear写的例子。
下面是用C语言写的一个简单的例子。

#include <stdlib .h>
#include <stdio .h>
int main (int argc, char** argv) {
    char a[] = "-100";
    char b[] = "456";
    int c;
    c = atoi(a) + atoi(b);
    char *p;
    p = getenv("QUERY_STRING");
    printf("Content-type: text/html\n\n");
    printf("c=%d",c);
    printf("%s",p);
    return 0;
}
</stdio></stdlib>

实现功能为:打印打印a+b的值,如果有get参数,同时打印get参数
编译

hqlong@ubuntu:/usr/local/webserver/apache/cgi-bin$ gcc test.c -o test

这时我们可以通过http://127.0.0.1:50001/test来访问了。
如果通过http://127.0.0.1:50001/test?name=hqlong
我们的程序就会打印name=hqlong这个查询参数。
参考资料:http://doc.chinahtml.com/Manual/ApacheManual/howto/cgi.html
机器人 2009-05-05 17:52 于 北京

apache之mod_gzip压缩

Posted by 机器人 on 25th 二月 2009 in linux/server

yahoo前端开发工程师提出了14条优化网站性能的规则,其规则4就明确提出了应该将响应的数据进行压缩后,再传到客户端,这样将近压缩70%的数据内容,也就是100KB的页面如果经过压缩最终传输的内容只有30KB。

最近看了国内几大网站,特别是几大搜索引擎界面,均采取了对响应内容进行了压缩。

正好这段时间在做对首页界面的响应优化,先前我们的首页没有经过gzip压缩,所以原始大小有11KB,经过压缩后测试,响应内容减少到了4KB,压缩掉差不多64%,如果再对所有的CSS和JS进行压缩,最近响应内容会减少很多。

配置gzip的模块最终取决于apache的版本,在apache1.x的版本中,使用mod_gzip,而apache2.x则使用mod_deflate.
apache2.x压缩通过mod_deflate来进行,尽管该模块的名字是这样,但它实际上是使用gzip来进行压缩。

基于目前已经是2009年,服务器基本上都已升级至apache2.x,所以这里我们只说mod_defalte.
这个模块在2.x的版本中,就已经自带了,不像mod_gzip,不是apache自身的模块,所以只需要在编译apache时,加上

--enable-deflate

即可.
然后在apache配置文件中,添加

OutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript

意思是对html xml css 和javascript都进行压缩。
然后启动服务器即可。

明显mod_deflate的配置要比mod_gzip方便很多。

然后通过抓包工具或者firebug就能看见服务器的响应信息如下图

图中的
Content-Encoding gzip
则表明响应内容已经是通过gzip压缩过,也就是通过浏览器你们要通过gzip算法来解压数据。

机器人 2009-02-24 11:59 于 北京