现在的位置: 首页 > 综合 > 正文

Apache2 配置–磨难–成功–开心 之记载

2013年04月18日 ⁄ 综合 ⁄ 共 3264字 ⁄ 字号 评论关闭

我在RedHat EL 4上安装了Apache2.20,一开始,我是对如何配置这个东西一窍也不通的。

在网上搜索了一下就按照那些乱七八糟的配法配了,配完了果然不能用……

后来,我的经理过来了,帮我配置了,让我不要用<VirtualDirectory> 他把我要试用的站点直接指向了DocumentRoot,结果这样一配置,就果然可以用了。

然而,我知道,这个不是长久之计,因为这个样子的话,我就只能在一个单一的目录下放置站点了,以后有新的站点,也没有好的管理办法,绝对是要改掉的。

所以,今天我决定重新配置一下。

配置完了,才发现,其实是很简单的东西,但是由于一些东西没有搞对,一些简单的关系没有弄清楚,造成经历了很多麻烦的事情,特别记录如下。

其实,我的目标很简单,我想配置一个标准的简单的,没有任何“麻烦事情的”站点,用类似http://127.0.0.1/~user/ 这样的网址就可以访问的,可以在每个帐户下放一个网站的那种配置,可以按照帐号来把各个站点分开。以下就是我第一次自以为配置完成的文件:

ServerRoot "/usr/local/apache2"

PidFile logs/httpd.pid

Timeout 300

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 15

Listen 80

LoadModule php5_module modules/libphp5.so

<IfModule !mpm_netware_module>

#这里,我特地按照一般推荐的,把apache的uid和gid都改掉了
#免不了groupadd ,useradd等等,在Linux内添加了Apache2的帐户

User www
Group www

</IfModule>

ServerAdmin root@localhost

#这里,我就不取名字了,怎么简单怎么来
ServerName 127.0.0.1

#这里,本来是我试验用的站点的目录,现在还给Apache2
DocumentRoot "/usr/local/apache2/htdocs/"

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Directory "/usr/local/apache2/htdocs/">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

#这里就是我瞎配置的,因为按照网上的说法,添加了UserDir就可以了,我本来加在外面的,但是不行,一直出现我没有Access Permission的错误,后来又看了Apache2的英文文档,就又加到了里面,但是还是不行,就这么瞎摸索了好一阵子,网上多数的建议是Linux的文件系统的权限过严,要用chmod换成777才可以,但是我都试过了,甚至还用chown -R换成了nobody:nobody,仍然没有Access Permission,愤怒啊
#<IfModule userdir_module>
#    UserDir www/
#    DirectoryIndex index.html index.php index.htm index.cgi
#    Order allow,deny
#    Allow from all
#</IfModule>

<IfModule dir_module>
    DirectoryIndex index.html index.php index.htm index.cgi
</IfModule>

<FilesMatch "^/.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

ErrorLog logs/error_log

LogLevel warn

<IfModule log_config_module>

    LogFormat "%h %l %u %t /"%r/" %>s %b /"%{Referer}i/" /"%{User-Agent}i/"" combined
    LogFormat "%h %l %u %t /"%r/" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t /"%r/" %>s %b /"%{Referer}i/" /"%{User-Agent}i/" %I %O" combinedio
    </IfModule>

    CustomLog logs/access_log common

</IfModule>

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
</IfModule>
<IfModule cgid_module>
    #
    # ScriptSock: On threaded servers, designate the path to the UNIX
    # socket used to communicate with the CGI daemon of mod_cgid.
    #
    #Scriptsock logs/cgisock
</IfModule>

<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

DefaultType text/plain

<IfModule mime_module>

    TypesConfig conf/mime.types

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType application/x-httpd-php .php .phtml

</IfModule>

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

其实,发现,如果真的碰到问题,能解决的还是文档,解决的根本还是理解。我最后是在网上发现了一篇httpd.conf中文版,我决定耐下性子来仔细研读,终于发现了问题的症结,抱着尝试的心理,只做了简单的修改,就配置成功了。

关键问题在这个地方:

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

这段,看到了吧,从根目录开始,所有的目录都被Deny了,当然无论怎么chmod都打不开任何页面啦,这个是Apache2做得很好的一个安全机制。先全部关掉,然后要用哪个开哪个,确保了安全。

看懂了这一段,我加了如下一段,马上就可以用http://192.168.0.177/~username/ 看到了phpinfo()了:

<Directory "/home/*/www/">
    Order deny, allow
    Allow from all
<Directory>

总结一下,做什么事情绝不能浮躁啊~~要耐心,认真,踏实,特写下此文作为备忘录。

如果出现了

Forbidden

You don't have permission to access /~xxx/ on this server.

这样的消息,代号403,那么第一个先检查有没有用<Directory>给那个目录开放了权限,如果开了,那么再检查Linux文件系统的权限,一般从根目录开始755就肯定可以解决了。

抱歉!评论已关闭.