为了账号安全,请及时绑定邮箱和手机立即绑定

apache2.2.4的安装及扩展配置

标签:
MySQL


apache2.2.4的安装及扩展配置

 

当前系统

redhat9

apache2.0.54  /usr/local/apache2

mysql5.0.16  /usr/local/mysql

php 5.0.4    /usr/local/php5

 

现在需要安装apache2.2.4

过程如下

编译:安装目录为--prefix=/usr/local/apache22

./configure --prefix=/usr/local/apache22 --with-layout=apache --enable-module=so --enable-module=setenvif --enable-module=rewrite --with-mpm=prefork --enable-ssl

安装

make

make install

 

在安装了apache2.2.4之后,直接启动,会报有关ServerName的警告,但是还是可以启动的.通过客户端访问看到的默认页面是一句话 it works

在配置文件中修改如下:

#ServerName [url]www.example.com:80[/url]

ServerName 127.0.0.1

就不会报错了

 

修改网站主目录如下

#DocumentRoot "/usr/local/apache22/htdocs"

DocumentRoot "/var/www/html"

访问的时候会报错

403 禁止访问

您无权查看该网页

您可能没有权限用您提供的凭据查看此目录或网页

例如在网站的主目录/var/ww/html下有1.html.在客户端访问[url]http://IP/1.html[/url]就会报这个错.

解决办法:

<Directory />

    Options FollowSymLinks

    AllowOverride None

#    Order deny,allow

#    Deny from all

   Order allow,deny

   Allow from all

</Directory>

 

分析错误原因

查看配置文件httpd.conf,相关部分内容如下:

# Each directory to which Apache has access can be configured with respect

# to which services and features are allowed and/or disabled in that

# directory (and its subdirectories).

#

# First, we configure the "default" to be a very restrictive set of

# features.

# 首先配置的缺省的限制,这个限制是非常严格的

<Directory />

    Options FollowSymLinks

    AllowOverride None

   Order deny,allow  次序是先拒绝,再允许

    Deny from all  默认是拒绝所有

</Directory>

 

#

# Note that from this point forward you must specifically allow

# particular features to be enabled - so if something's not working as

# you might expect, make sure that you have specifically enabled it

# below.

#从这里开始你必须指定允许启用特定的功能,如果某些不能正常工作,需要查看你是否已经启用了它.

 

#

# This should be changed to whatever you set DocumentRoot to.

#这里应该改为你设的DocumentRoot

<Directory "/usr/local/apache22/htdocs">  可以看到这里是对缺省的主目录的设置

    #

    # Possible values for the Options directive are "None", "All",

    # or any combination of:

    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews

    #

    # Note that "MultiViews" must be named *explicitly* --- "Options All"

    # doesn't give it to you.

    #

    # The Options directive is both complicated and important.  Please see

    # [url]http://httpd.apache.org/docs/2.2/mod/core.html#options[/url]

    # for more information.

    #

    Options Indexes FollowSymLinks

 

    #

    # AllowOverride controls what directives may be placed in .htaccess files.

    # It can be "All", "None", or any combination of the keywords:

    #   Options FileInfo AuthConfig Limit

    #

    AllowOverride None

 

    #

    # Controls who can get stuff from this server.

    #控制谁能访问这个网站

    Order allow,deny  顺序是先允许再拒绝

    Allow from all  默认是允许所有

 

</Directory>

 

所以缺省状态下只是对默认的主目录/usr/local/apache22/htdocs设的是允许所有访问,而对于其他的目录,采用默认的设置是拒绝所有访问的.

所以我们之前做的修改

<Directory />

    Options FollowSymLinks

    AllowOverride None

#    Order deny,allow

#    Deny from all

   Order allow,deny

   Allow from all

</Directory>

是将默认的限制调大了,让默认对所有的目录都允许所有人访问.或许会带来安全威胁.

安全的做法是按照文档说的

# This should be changed to whatever you set DocumentRoot to.

#这里应该改为你设的DocumentRoot

<Directory "/usr/local/apache22/htdocs"> 把它改为你设的主目录

启动以后就可以正常访问了.

 

做多端口的虚拟主机

2.2.4里面一个很大的不同就是将很多的配置以单独的文件存放(路径是conf/extra),如ssl,虚拟主机vhost等.在使用的时候先要在主配置文件里面包含此配置文件,然后到相应的配置文件里面去具体配置.下面来配置虚拟主机

修改httpdconf,增加监听端口

Listen 80

Listen 81

 

启用虚拟主机配置

# Virtual hosts

#Include conf/extra/httpd-vhosts.conf

Include conf/extra/httpd-vhosts.conf

 

编辑配置文件目录下的/extra/httpd-vhosts.conf

[root@server1 extra]# vi httpd-vhosts.conf

 

#

# Virtual Hosts

#

# If you want to maintain multiple domains/hostnames on your

# machine you can setup VirtualHost containers for them. Most configurations

# use only name-based virtual hosts so the server doesn't need to worry about

# IP addresses. This is indicated by the asterisks in the directives below.

#

# Please see the documentation at

# <URL:[url]http://httpd.apache.org/docs/2.2/vhosts/>[/url]

# for further details before you try to setup virtual hosts.

#

# You may use the command line option '-S' to verify your virtual host

# configuration.

 

#

# Use name-based virtual hosting.

#

NameVirtualHost *:80

 

#

# VirtualHost example:

# Almost any Apache directive may go into a VirtualHost container.

# The first VirtualHost section is used for all requests that do not

# match a ServerName or ServerAlias in any <VirtualHost> block.

#

<VirtualHost *:80>

    ServerAdmin [email]webmaster@dummy-host.example.com[/email]

    DocumentRoot /www/docs/dummy-host.example.com

    ServerName dummy-host.example.com

    ServerAlias [url]www.dummy-host.example.com[/url]

    ErrorLog logs/dummy-host.example.com-error_log

    CustomLog logs/dummy-host.example.com-access_log common

</VirtualHost>

 

<VirtualHost *:80>

    ServerAdmin [email]webmaster@dummy-host2.example.com[/email]

    DocumentRoot /www/docs/dummy-host2.example.com

    ServerName dummy-host2.example.com

    ErrorLog logs/dummy-host2.example.com-error_log

    CustomLog logs/dummy-host2.example.com-access_log common

</VirtualHost>

 

做如下修改

[root@server1 extra]# vi httpd-vhosts.conf

 

#

# Virtual Hosts

#

# If you want to maintain multiple domains/hostnames on your

# machine you can setup VirtualHost containers for them. Most configurations

# use only name-based virtual hosts so the server doesn't need to worry about

# IP addresses. This is indicated by the asterisks in the directives below.

#

# Please see the documentation at

# <URL:[url]http://httpd.apache.org/docs/2.2/vhosts/>[/url]

# for further details before you try to setup virtual hosts.

#

# You may use the command line option '-S' to verify your virtual host

# configuration.

 

#

# Use name-based virtual hosting.

#

#NameVirtualHost *:80  注释掉此句的原因见我有关虚拟主机的文章

 

#

# VirtualHost example:

# Almost any Apache directive may go into a VirtualHost container.

# The first VirtualHost section is used for all requests that do not

# match a ServerName or ServerAlias in any <VirtualHost> block.

#

<VirtualHost *:80>

    ServerAdmin [email]webmaster@dummy-host.example.com[/email]

    DocumentRoot /var/www/html/s1

    ServerName dummy-host.example.com

    ServerAlias [url]www.dummy-host.example.com[/url]

    ErrorLog logs/dummy-host.example.com-error_log

    CustomLog logs/dummy-host.example.com-access_log common

</VirtualHost>

 

<VirtualHost *:81>

    ServerAdmin [email]webmaster@dummy-host2.example.com[/email]

    DocumentRoot /var/www/html/s2

    ServerName dummy-host2.example.com

    ErrorLog logs/dummy-host2.example.com-error_log

    CustomLog logs/dummy-host2.example.com-access_log common

</VirtualHost>

 

配置ssl

# Secure (SSL/TLS) connections

#Include conf/extra/httpd-ssl.conf

Include conf/extra/httpd-ssl.conf

 

将之前生成的server的那些证书文件copy到conf目录下(因为是按照httpd-ssl.conf文件中的证书路径和名称配置的)

 

 [root@server1 conf]# ../bin/httpd -S

VirtualHost configuration:

wildcard NameVirtualHosts and _default_ servers:

*:80                   dummy-host.example.com (/usr/local/apache22/conf/extra/httpd-vhosts.conf:27)

*:81                   dummy-host2.example.com (/usr/local/apache22/conf/extra/httpd-vhosts.conf:36)

_default_:443          [url]www.example.com[/url] (/usr/local/apache22/conf/extra/httpd-ssl.conf:74)

Syntax OK

 

重启服务以后通过https访问

 

安装php

原来想用现成的php,不想重新编译安装php.毕竟我感觉需要的也只是那个so文件而已.

首先我想用原来的apache那个php的模块文件,将他copy到现在的模块目录

cp /usr/local/apache2/modules/libphp5.so /usr/local/apache2/modules/libphp5.so

然后修改httpd.conf来支持php

# Example:

# LoadModule foo_module modules/mod_foo.so

#

LoadModule php5_module        modules/libphp5.so

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

 

# DirectoryIndex: sets the file that Apache will serve if a directory

# is requested.

#

<IfModule dir_module>

    DirectoryIndex index.html index.php

</IfModule>

 

启动报错

[root@server1 conf]# ../bin/httpd -k start

httpd: Syntax error on line 54 of /usr/local/apache22/conf/httpd.conf: API module structure `php5_module' in file /usr/local/apache22/modules/libphp5.so is garbled - perhaps this is not an Apache module DSO?

唉,失败了.(个人觉得如果是相同版本的apache应该是可以的copy使用的,但未测试)

 

经过sery指点想用apxs独立生成PHP的dso模块.可就是不知道该编译PHP里面哪个文件是模块的源文件.只得放弃.没办法了重新编译安装一个PHP.(如果有谁知道如何用apxs来生成php的dso模块而不用编译安装php就告诉我一声哈.)

其实安装的过程与apache2.0.x一样.我写在这里留给自己以后参考

编译php:新装在另一个目录php5.04(这是为了不影响现有php的运行,节省空间的话就直接安装在原目录下),指向的apache也是新的apache的路径.

./configure --prefix=/usr/local/php5.04 --with-apxs2=/usr/local/apache22/bin/apxs --enable-track-vars  --enable-url-includes --enable-sockets --enable-force-cgi-redirect --enable-calendar --with-config-file-path=/usr/local/lib --with-jpeg-dir=/usr/local/jpeg6 --enable-gd-native-ttf --with-ttf --with-gdbm --with-gettext --with-iconv --with-png-dir=/usr/local/libpng2 --with-freetype-dir=/usr/local/freetype2 --with-libxml --with-zlib --with-zlib-dir=/usr/local/zlib2 --with-gd --enable-soap --with-curl --with-curlwrappers --with-java=/usr/java/j2sdk1.4.2_14 --with-mysql=/usr/local/mysql/

注意--with-mysql=/usr/local/mysql/,我之前使用的是—with-mysql这一步过不去,我停掉mysql还是不行,关掉apache也不行,所以就用这个来明确指向mysql的安装目录就搞定了

 

安装PHP

make

make install

报错如下

Installing PHP SAPI module:       apache2handler

make: execvp: /home/yahoon/php-5.0.4/build/shtool: Permission denied

make: [install-sapi] Error 127 (ignored)

/bin/sh: line 1: /home/yahoon/php-5.0.4/build/shtool: Permission denied

make: *** [install-sapi] Error 126

知道是权限问题,把这个文件提权

[root@server1 php-5.0.4]# chmod 777 build/shtool

[root@server1 php-5.0.4]# make install

最后的信息为

Installing PHP SAPI module:       apache2handler

/usr/local/apache22/build/instdso.sh SH_LIBTOOL='/usr/local/apache22/build/libtool' libphp5.la /usr/local/apache22/modules

/usr/local/apache22/build/libtool --mode=install cp libphp5.la /usr/local/apache22/modules/

cp .libs/libphp5.so /usr/local/apache22/modules/libphp5.so

cp .libs/libphp5.lai /usr/local/apache22/modules/libphp5.la

libtool: install: warning: remember to run `libtool --finish /home/yahoon/php-5.0.4/libs'

chmod 755 /usr/local/apache22/modules/libphp5.so

[activating module `php5' in /usr/local/apache22/conf/httpd.conf]

Installing PHP CLI binary:        /usr/local/php5.04/bin/

Installing PHP CLI man page:      /usr/local/php5.04/man/man1/

Installing PEAR environment:      /usr/local/php5.04/lib/php/

[PEAR] Archive_Tar    - installed: 1.1

[PEAR] Console_Getopt - installed: 1.2

[PEAR] PEAR           - installed: 1.3.5

Wrote PEAR system config file at: /usr/local/php5.04/etc/pear.conf

You may want to add: /usr/local/php5.04/lib/php to your php.ini include_path

[PEAR] HTML_Template_IT- installed: 1.1

[PEAR] Net_UserAgent_Detect- installed: 2.0.1

[PEAR] XML_RPC        - installed: 1.2.2

Installing build environment:     /usr/local/php5.04/lib/php/build/

Installing header files:          /usr/local/php5.04/include/php/

Installing helper programs:       /usr/local/php5.04/bin/

  program: phpize

  program: php-config

  program: phpextdist

红色的字说明了像apache的目录写入模块的过程. [activating module `php5' in /usr/local/apache22/conf/httpd.conf]这句话引起了我的注意.看来并不用手动添加对php的支持它会自动修改配置文件来激活模块.

到/usr/local/apache22/conf/下看到出现了一个httpd.conf.bak,即它将原来的文件备份了.

这样重启apache就能访问php的页面了.

 

其实这时新安装的php路径/usr/local/php5.04即使删掉这个目录也是可以正常工作的.因为我们需要的so文件已经在apache的modules目录下了

 

 

©著作权归作者所有:来自51CTO博客作者yahoon的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消