Chinaunix首页 | 论坛 | 博客
  • 博客访问: 161921
  • 博文数量: 48
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 370
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-08 18:10
文章分类

全部博文(48)

文章存档

2009年(2)

2007年(46)

我的朋友

分类: LINUX

2007-12-27 21:28:22

 

忙乎了一个通宵,没搞定Apache 2.2.6配置PHP 5.24的环境,到处gg来的信息,也都是空谈,毫无见效.
发现Apache新版把一些配置分开了,分别由几个conf文件分担,各司其职,并且加强了proxy的性能.
现在就讲讲在Apache2.2.6中配置php5.24的环境吧.
首先假设php5的文件是C:\PHP中
httpd.conf中找到:

  代码:
#LoadModule ssl_module modules/mod_ssl.so

在下面加入:

  代码:
LoadModule php5_module C:/PHP/php5apache2_2.dll

找到:

  代码:
DirectoryIndex index.html

替换为:

  代码:
DirectoryIndex index.html index.php

找到:

  代码:
AddType application/x-gzip .gz .tgz

下面添加:

  代码:
AddType application/x-httpd-php .php

和:

  代码:
AddType application/x-httpd-php-source .phps

如果要用到虚拟主机配置,请继续:
找到

  代码:
ServerAdmin

前面打上"#"(不含双引号),也就是把这段注释掉.

找到

  代码:
DocumentRoot "D:/Program Files/Apache2.2/htdocs"

把这段也打上"#",注释掉.

假如,虚拟空间的各个站点都在D盘的wwwroot目录下,那么请添加这段

  代码:

Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all

这个很重要,接下来,就把各个站点都放在wwwroot目录下,才能正常访问.

找到

  代码:
#Include conf/extra/httpd-vhosts.conf

取消前面的#注释,使之生效

接着就可以到extra目录中,对httpd-vhosts.conf进行设置,添加站点
例子如下:

  代码:
NameVirtualHost 77.77.88.77:80



DirectoryIndex index.html index.php

ServerAdmin 88877@qq.com
DocumentRoot D:/wwwroot/cms
ServerName
ServerAlias

如果,需要用到rewrite的html静态功能,
请在httpd.conf文件中,找到

  代码:
#LoadModule rewrite_module modules/mod_rewrite.so

取消掉前面的#注释,使mod_rewrite.so模块生效

并且把所有的

  代码:
AllowOverride None

更改为

  代码:
AllowOverride All

好了,一切都ok了,别忘记restat Apache

[ 本帖最后由 冰男 于 2007-10-4 11:14 编辑 ]

Apache下禁止目录列表
将Options Indexes FollowSymLinks注释掉

或者修改为

Options None

问题:修改这段,会影响到虚拟主机的配置!有待解决...

[ 本帖最后由 冰男 于 2007-10-3 20:07 编辑 ]

Windows平台下Apache的SSL配置过程
打开conf/httpd.conf文件

目录为:C:\Program Files\Apache Software Foundation\Apache2.2\conf

将下面两行前面的#号去掉:

LoadModule ssl_module modules/mod_ssl.so

Include conf/extra/httpd-ssl.conf

修改httpd-ssl.conf

这个文件主要是配置项的路径名没有加上引号,所以有问题。
查找所有具有文件路径的配置加上""。

到这一步,剩下的就是如何生成SSL配置所需要的两个文件了:
server.crt
server.key

首先需要下载openssl,或者使用apache winth ssl版已经打包在bin目录下的openssl。

下载地址:



然后需要下载一个配置文件:

http://www.securityfocus.com/data/tools/openssl.conf

将openssl压缩包中的文件全部解到c:\program files\OpenSSL目录下
将openssl.conf也放到这个目录中

运行cmd.exe
切换到c:\program files\openssl目录
首先需要建立证书签名请求和私钥文件:

openssl req -new -out server.csr

openssl req -new -out server.csr -config openssl.conf

它会问一系列的问题,要注意的是commonName要输入和你的网站域名一样:比如
然后RSA签名:

openssl rsa -in privkey.pem -out server.key

最后创建自签证书:

openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650

完成之后,将生成的server.crt和server.key这两个文件拷贝到apache的conf目录下。

现在使用,应该就可以看到It works了。

加速APACHE访问速度及节省网络带宽
APACHE提供了一个mod_deflate模块,用于内容输出压缩过滤功能,可以有效的提高网站的访问速度及节省大量的带宽,所付出的成本是会对CPU增加微量的负担,因 此对于那些访问量非常大而带宽又不足的网站是个非常不错的选择。

本文依然以CentOS 4.4下的APACHE为例,默认安装下已经安装了mod_deflate模块,所要做的就是少量的配置而已。

# vi /etc/httpd/conf/httpd.conf
去掉下面这句的注释

LoadModule deflate_module modules/mod_deflate.so

当然也可以把下面的这段配置放在相应的节点里:

  代码:


SetOutputFilter DEFLATE

# DeflateFilterNote Input instream
# DeflateFilterNote Output outstream
# DeflateFilterNote Ratio ratio

# LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
# CustomLog logs/deflate_log deflate

SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|tgz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(pan>pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary

AddOutputFilterByType DEFLATE text



Apache服务器配置技巧
1、如何设置请求等待时间
  在httpd.conf里面设置:
  TimeOut n
  其中n为整数,单位是秒。
  设置这个TimeOut适用于三种情况:
  
  2、如何接收一个get请求的总时间
  接收一个post和put请求的TCP包之间的时间
  TCP包传输中的响应(ack)时间间隔   3、如何使得apache监听在特定的端口
  修改httpd.conf里面关于Listen的选项,例如:
  Listen 8000
  是使apache监听在8000端口
  而如果要同时指定监听端口和监听地址,可以使用:
  Listen 192.170.2.1:80
  Listen 192.170.2.5:8000
  这样就使得apache同时监听在192.170.2.1的80端口和192.170.2.5的8000端口。
  当然也可以在httpd.conf里面设置:
  Port 80
  这样来实现类似的效果。
  4、如何设置apache的最大空闲进程数
  修改httpd.conf,在里面设置:
  MaxSpareServers n
  其中n是一个整数。这样当空闲进程超过n的时候,apache主进程会杀掉多余的空闲进程而保持空闲进程在n,节省了系统资源。如果在一个apache非常繁忙的站点调节这个参数才是必要的,但是在任何时候把这个参数调到很大都不是一个好主意。
  同时也可以设置:
  MinSpareServers n
  来限制最少空闲进程数目来加快反应速度。
  5、apache如何设置启动时的子服务进程个数
  在httpd.conf里面设置:
  StartServers 5
  这样启动apache后就有5个空闲子进程等待接受请求。
  也可以参考MinSpareServers和MaxSpareServers设置。
  6、如何在apache中设置每个连接的最大请求数
  在httpd.conf里面设置:
  MaxKeepAliveRequests 100
  这样就能保证在一个连接中,如果同时请求数达到100就不再响应这个连接的新请求,保证了系统资源不会被某个连接大量占用。但是在实际配置中要求尽量把这个数值调高来获得较高的系统性能。
  7、如何在apache中设置session的持续时间
  在apache1.2以上的版本中,可以在httpd.conf里面设置:
  KeepAlive on
  KeepAliveTimeout 15
  这样就能限制每个session的保持时间是15秒。session的使用可以使得很多请求都可以通过同一个tcp连接来发送,节约了网络资源和系统资源。
  8、如何使得apache对客户端进行域名验证
  可以在httpd.conf里面设置:
  HostnameLookups on|off|double
  如果是使用on,那么只有进行一次反查,如果用double,那么进行反查之后还要进行一次正向解析,只有两次的结果互相符合才行,而off就是不进行域名验证。
  如果为了安全,建议使用double;为了加快访问速度,建议使用off。
  9、如何使得apache只监听在特定的ip
  修改httpd.conf,在里面使用
  BindAddress 192.168.0.1
  这样就能使得apache只监听外界对192.168.0.1的http请求。如果使用:
  BindAddress *
  就表明apache监听所有网络接口上的http请求。
  当然用防火墙也可以实现。
  10、apache中如何限制http请求的消息主体的大小
  在httpd.conf里面设置:
  LimitRequestBody n
  n是整数,单位是byte。
  cgi脚本一般把表单里面内容作为消息的主体提交给服务器处理,所以现在消息主体的大小在使用cgi的时候很有用。比如使用cgi来上传文件,如果有设置:
  LimitRequestBody 102400
  那么上传文件超过100k的时候就会报错。
  11、如何修改apache的文档根目录
  修改httpd.conf里面的DocumentRoot选项到指定的目录,比如:
  DocumentRoot /www/htdocs
  这样就是对应/www/htdocs/index.html
  12、如何修改apache的最大连接数
  在httpd.conf中设置:
  MaxClients n
  n是整数,表示最大连接数,取值范围在1和256之间,如果要让apache支持更多的连接数,那么需要修改源码中的httpd.h文件,把定义的HARD_SERVER_LIMIT值改大然后再编译。
  13、如何使每个用户有独立的cgi-bin目录
  有两种可选择的方法:
  (1)在Apache配置文件里面关于public_html的设置后面加入下面的属性:
  ScriptAliasMatch ^/~([^/]*)/cgi-bin/(.*) /home//cgi-bin/
  (2)在Apache配置文件里面关于public_html的设置里面加入下面的属性:
  
    Options ExecCGI
    SetHandler cgi-script
  
  14、如何调整Apache的最大进程数
  Apache允许为请求开的最大进程数是256,MaxClients的限制是256.如果用户多了,用户就只能看到Waiting for
  reply....然后等到下一个可用进程的出现。这个最大数,是Apache的程序决定的--它的NT版可以有1024,但Unix版只有256,你可以在src/include/httpd.h中看到:
    #ifndef HARD_SERVER_LIMIT
    #ifdef WIN32
    #define HARD_SERVER_LIMIT 1024
    #else
    #define HARD_SERVER_LIMIT 256
    #endif
    #endif
    你可以把它调到1024,然后再编译你的系统。
  15、如何屏蔽来自某个Internet地址的用户访问Apache服务器
  可以使用deny和allow来限制访问,比如要禁止202.202.202.xx网络的用户访问:
  
  order deny,allow
  deny from 202.202.202.0/24
  
  16、如何在日志里面记录apache浏览器和引用信息
  你需要把mod_log_config编译到你的Apache服务器中,然后使用下面类似的配置:
  CustomLog logs/access_log "%h %l %u %t "%r" %s %b "%i"
  "%i""
  17、如何修改Apache返回的头部信息
  问题分析:当客户端连接到Apache服务器的时候,Apache一般会返回服务器版本、非缺省模块等信息,例如:
  Server: Apache/1.3.26 (Unix) mod_perl/1.26
  解决:
  你可以在Apache的配置文件里面作如下设置让它返回的关于服务器的信息减少到最少:
  ServerTokens Prod
  注意:
  这样设置以后Apache还会返回一定的服务器信息,比如:
  Server: Apache
  但是这个不会对服务器安全产生太多的影响,因为很多扫描软件是扫描的时候是不顾你服务器返回的头部信息的。你如果想把服务器返回的相关信息变成:
  Server: It iS a nOnE-aPaCHe Server
  那么你就要去修改源码了。

Apache可以配置成为代理服务器
一、前向代理服务器和逆向代理服务器

1.前向代理服务器

前向代理服务器通常位于用户主机和要访问的远程网络之间。它从远程服务器
取得所要求的资源,然后返回给用户,同时存在磁盘上,以供下次使用。

在这种情况下,客户端的主机知道它们正在使用代理服务器,因为每个主机都
必须配置为使用代理服务器。

例如,必须告诉WWW浏览器使用代理服务器,它才能使用代理服务器。所有的远
程请求都通过代理服务器传输。

这类代理服务器也称为缓冲代理服务器。逆向服务器也可以缓冲数据,但它的
作用愉好与前向服务器相反。

2.逆向代理服务器

逆向代理服务器位于互联网资源前面,逆向服务器从原始服务器找到被请求的
资源,并反它返回给用户主机。

与前向代理服务器不同的是,逆向代理服务器的用户并不知道它们连接的是代
理服务器而不是资源服务器本身。其结构如下图所示:

二、配置代理服务器


  为了允许Apache作为代理服务器,需要将ProxyRequests设为On,然后根据
你希望代理服务器做什么而增加什么附加配置。无论你希望做什么,你所选的
代理配置都应该放入一个特殊?lt;Directory>容器中。








实例一:将私有IP网连到互联网

假设私有网上只有一台计算机被分配了互联网上合法的IP地址,这台计算

机运行Apache代理服务器,ProxyRequest设置为On,并且不需要附加其他配
置,所有请求均可由这台代理服务器代理服务。

实例二:让Apache允当远程WWW站点的缓冲

第一步:将ProxyRequest设置为On

第二步:创建配置如下:



CacheRoot /www/cache

CacheSize 1024

CacheMaxExpire 24



这里的意思是设置Cache目录为/www/cache;大小为1024KB,即1MB;缓冲中的
内容在24小时后失效。

实例三:建立镜像站点(其实这也就是所谓的逆向代理服务器)

第一步:将ProxyRequest设置为On

第二步:创建配置如下:



ProxyPass / /

CacheRoot /www/cache

CacheDefaultExpire 24



10.3 一些提示

代理服务器,我们将会在后面的章节中详细介绍,这里只是针对Apache的功能
介绍的。用Apache作代理服务器的性能并不高,效果并不好。不建议使用。

安裝 Apache+PHP+MySQL+imap+GD+Ldap+opens

注意事项:

1.如果妳是用 Redhat based 的 Linux 的话,请执行 ntsysv 将 httpd 和
1.Mysql 不要执行

2.将 DOWNLOAD 的档案放到相同的目录,再用 tar zxvf xxxxxxxx.tar.gz 来
2.解压缩,请依照要安装的软件进入适当的目录。

3.可以到 来下载所需的程序。

MySQL:

---------------------------------------------------------------

./configure --prefix=/usr/local/mysql --with-charset=big5

make

make install

cd scripts

./mysql_install_db

cd /usr/local/mysql/share/mysql/

chmod 611 mysql.server

./mysql.server start

#编辑 /etc/rc.d/rc.local 加入底下这行以便开机时自动执行 mysql

/usr/local/mysql/share/mysql/mysql.server start

imap:

---------------------------------------------------------------

make slx

cp ipopd/ipop*.* /usr/sbin

cp imapd/imapd /usr/sbin

cp c-client/c-client.a /usr/local/lib

#请确定你有 /usr/local/include 这个目录

cp c-client/rfc822.h /usr/local/include

cp c-client/mail.h /usr/local/include

cp c-client/linkage.h /usr/local/include

GD:

---------------------------------------------------------------

make

make install

Ldap:

---------------------------------------------------------------

./configure --prefix=/usr/local/ldap

make

make depend

cd tests

make

cd ..

make install

Apache:

---------------------------------------------------------------

./configure --prefix=/usr/local/apache

openssl:

---------------------------------------------------------------

./config

make

make test

make install

mod_ssl:

---------------------------------------------------------------

./configure --with-apache=../apache_1.3.19
--with-ssl=../openssl-0.9.6 --prefix=../apache_1.3.19

php:

---------------------------------------------------------------

./configure --with-mysql=/usr/local/mysql
--with-apache=../apache_1.3.19 --enable-track-vars
--with-gd=../gd-1.8.4 --with-imap=../imap-4.7c --enable-ftp
--with-ldap=/usr/local/ldap

make

make install

Apache:

---------------------------------------------------------------

./configure --prefix=/usr/local/apache
--activate-module=src/modules/php4/libphp4.a --enable-module=ssl

make

make certificate

#这时会问你一些问题,就是有关于加密的问题,最后要要求输入启动的密码,
如果输入密码的话以后启动 httpd 的时候会询问密码,若不输

#入密码的话启动就不会问了

#PS.启动http

#要加密:apachectl startssl

#不加密:apachectl start

make install

修改 /etc/rc.d/rc.local 加入 /usr/local/apache/bin/apachectl start 来
开机时自动启动 Apache

再来就是修改 /usr/local/apache/conf/httpd.conf 的设定档,将 php 的支
持加入

建立Apache站点的基本安全机制

对于WWW服务来说,在WWW服务器和WWW浏览器之间并不始终维持对话过程。办要
WWW服务器完成对一个URL请求的服务,连接就断开了。

在这种情况下,在WWW上保证可以使用的唯一认证机制是由HTTP本身提供 的。
在标准的Apache服务器实现了这样的认证,它能控制哪些主机可能访问特定的
站点或特点的站点的一部分。

这种认证可以分为两种,一种是基于主机的的认证,另一种是基于用户名/口令
的认证。由于互联网上的决大多数用户的IP地址是动态获得的,所以基于主机
的认证方式并不总适用。所以在大多数情况下,传统的基于用户名/口令的认证
方式更为现实。下面我们就对这两种认证的实现做一简要的介绍。

1. 基于主机的认证方式

在种认证模式顾名思义,访问是用主机名或主机IP地址来控制的。支持这种认
证方式的是Apache的mod_access模块,这个模块缺省状态下是被安装了的。该
模块用以下几种Apache命令来提供访问控制功能。

allow命令

语法:allow from host1 host2 host3 ...

这个命令定义了允许访问站点或目录的主机清单。主机清单可以用以下几

种形式表示:

ALL:代表所有主机;

主机的全域名,;

主机的部分域名,如:.mot.com;

完整的IP地址,如:202.98.2.32;

部分IP地址,如:202.98

网络地址/网络掩码对,如:202.98.0.0/255.255.0.0

网络地址/nn(CIDR定义),如:202.98.0.1/16

deny命令

语法:deny from host1 host2 host3 ...

这个命令定义了禁止访问站点或目录的主机清单,其他与allow命令相似。

order命令

语法:order deny,allow | allow,deny

这个命令定义评价allow和deny命令的先后顺序。

例如:



order deny,allow

deny from

allow all



这组命令设置了访问/home/httpd/html目录下的文件。

请大家注意,顺序是先deny后allow,如果是:order allow,deny 那么,先允
许所有的主机访问,然后再禁止,这样是无效的,所有主机仍然能够访问。

2. 基于用户名/口令的认证方式

这种认证方式其实相当简单,当WWW浏览器请求经此认证模式保护的URL

时,将会出现一个对话框,要求用户键入用户名和口令。用户输入后,传给
WWW服务器,WWW服务器验证它的正确性,如果正确,返回页面,否则返回401错
误。要说明的一点是,这种认证模式是基本的,并不能用于安全性要求极高的
场合。

Apache 中有许多模块可以支持这种认证方式,下面我们就介绍一下最基本、最
标准的mod_auth模块。正如前面提到的一样,mod_auth模块使用存储在文本文
件中的用户名、组名和口令来实现认证。这种方法非常适合处理少量用户,它
能工作得很好。如果你需要对大量的用户,如数以千计的用户做认证时,这种
方法的性能将急剧下降到不可忍受,所以当这种情况下,就需要考虑使用
mod_dbm模块或mod_mysql模块来获得更好的性能。

实例一:需要用户名和口令的访问控制

下面我们就一起来看一下如何建立需要用户名/口令才能进行访问的目录。

基本情况:

的站点有设置为:

DocumentRoot /home/httpd/html

AccessFileName .htaccess

AllowOverride All

需求:限制/home/httpd/html/backup/目录的访问,只允许用户"super"以口令
"fill-06"访问此目录。

实现步骤:

使用htpasswd建立用户文件

htpasswd -c /home/httpd/secr/.htpasswd super

此程序会询问用户"super"的口令,你输入"fill-06",两次生效。

建立.htaccess文件

用vi在/home/httpd/html/backup/目录下建立一个文件.htaccess,写入

以下几行:

AuthName My Friend Only (注:这个名字是任取的)

AuthType Basic

AuthUserFile /home/httpd/secr/.htpasswd

require user super

设置文件权限,确保Apache用户有读的权限

这样就完成了设置工作,你可以试一试效果了。

实例二:允许一组用户访问一个目录

假设,想让myfriend组中的mf1与mf2两个用户分别能

使用口令"mf001-1""mf002-2"访问/home/httpd/html/backup/目录。

实现步骤:

使用htpasswd建立用户文件

htpasswd -c /home/httpd/secr/.htpasswd mf1

htpasswd -c /home/httpd/secr/.htpasswd mf2

建立组文件

用vi/home/httpd/secr/目录下建立一个文件.htgroup,写入:

myfriend:mf1 mf2

建立.htaccess文件

用vi在/home/httpd/html/backup/目录下建立一个文件.htaccess,写入

以下几行:

AuthName My Friend Only

AuthType Basic

AuthUserFile /home/httpd/secr/.htpasswd

AuthGroupFile /home/httpd/secr/.htgroup

require group myfriend

配置工作到此结束,试一试吧!

实例三:混合使用基于主机与基于用户名/口令的认证方式

如果你除了只允许让mf1与mf2两个用户访问外,还想禁

外的主机访问这个目录的话,就将/home/httpd/html/backup/.htaccess修改成
为:

AuthName My Friend Only

AuthType Basic

AuthUserFile /home/httpd/secr/.htpasswd

AuthGroupFile /home/httpd/secr/.htgroup

require group myfriend

order deny,allow

deny from all
阅读(1906) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-09-08 19:45:58

大哥,您的文件真有幫助,感恩耶~