Apache Http Server学习笔记

本文介绍了Apache服务器的安装过程及配置方法,包括源代码安装步骤、目录结构解析、常用操作命令,并详细阐述了配置文件的各项参数意义及虚拟主机的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    第一次接触Apache是数年前了,现在可能会转向Php开发,所以抽时间又一次学习了Apache服务器的使用,不善于总结和做笔记的我总是与残酷的时间抗衡着,时间久了,我无力反抗,那些学过的东西早已被抛到九霄云外了,我有点痛恨自己当初为什么没有能把所有学习的知识总结下来呢?这一次我必须要总结下昨天对Apache的学习。这里很多东西我都参考了《细说php》

Apache介绍

    Apache是世界上排名第一的开源的Web服务器软件,同类型的有Nginx反向代理服务器,不过Apache以最具稳定性得到了广大开发者的认可,不过在性能上Nginx会略胜一筹。Apache通过外置模块可以发布CGI,PHP等网站应用。具体的可以参考官网 http://httpd.apache.org/ 

Apache源代码安装

下载Apache源代码包

cd /home/app/ 
wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.2.25.tar.gz
解压源码包并安装


tar xzvf httpd-2.2.45.tar.gz
cd httpd-2.2.25
./configure prefix=/usr/local/apache2
make
make install


Apache目录结构

bin目录

    存放apache一些可执行文件,包含 ab(用于压力测试) , apachectl(用于操作apache服务) , htpasswd(apache的权限设置)等等。

cgi-bin目录

    这里一般存放cgi脚本,如通过perl,c等编写cgi来发布web。

error目录

    访问apache发布的网站通常会出现一些错误页面,所有的错误页面在这里定义。

htdocs目录

    该目录非常关键,它是默认apache的根目录,安装完apache并启动之后,通过 http://ip:8080/index.html 便可以找到 htdocs 下的index.html,将文件内容发送给客户端浏览器,浏览器解析并显示。不过apache的根目录可以通过配置文件自定义,后面会讲到。

icons目录

    网站中所有的默认的小图标都存放在这里,如 默认的favicon.ico小图标等。

logs目录

    该目录存放日志信息,也非常重要,用于日常的分析。一般下面会至少有这两个文件 access_log(正常访问的日志)  error_log(访问错误的日志)。


tail -20f /usr/local/apache2/logs/access_log    // 动态查看正常访问日志的后20行


man目录

    该目录存放一些man的帮助文档,不太重要,可以忽略。

conf目录

    该目录存放apache的配置文件,同样也很重要,其中 httpd.conf 为主配置文件,大家应该注意到了该目录下面的 extra/ 目录,extra/ 目录下面有很多以功能拆分好了的 *.conf 配置,这是附加配置文件,在httpd.conf 中通过 Include extra/httpd-default.conf 来载入附加配置文件,可以将一些配置信息写入附加配置文件并在主配置文件中引入就Ok了。

    附加配置文件默认没有开启,需要修改 httpd.conf 配置文件来开启。

cd /usr/local/apache2/
conf/httpd.conf                // 主配置文件
conf/extra/                    // 所有附加配置文件
httpd-autoindex.conf           // 配置目录列表
httpd-dav.conf                 // 配置dav协议
httpd-default.conf             // 配置apache服务相关的全局参数
httpd-info.conf                // 配置服务器信息与状态显示
httpd-languages.conf           // 配置语言支持 
httpd-manual.conf              // 提供apache文档访问
httpd-mpm.conf                 // 多路处理模块(mpm)配置
httpd-multilang-errordoc.conf  // 多语言错误应答配置
httpd-ssl.conf                 // https的ssl模块配置
httpd-userdir.conf             // 用户主目录配置
httpd-vhosts.conf              // 虚拟主机的配置


Apache常用操作


cd /usr/local/apache2/bin/
apachectl -l  列出apache的信息,模块之类的
apachectl -t  检查配置文件
apachectl start  启动apache
apachectl restart 重启apache
apachectl stop   关闭apache
在启动apache之前要学习apache配置的配置与其虚拟主机的设置。

在linux平台下,apache默认会启动一个主进程,主进程会打开5个子进程,客户端连接会与某个子进程通信,各个子进程由主进程管理并共享主进程。(apache会保证至少有5个空闲子进程)

root@debian:/home/app/httpd/bin# ps aux | grep httpd
root      2979  0.0  0.1  48972  2668 ?        Ss   08:53   0:00 /home/app/httpd/bin/httpd -k start
daemon    2980  0.1  0.3  52300  4856 ?        S    08:53   0:00 /home/app/httpd/bin/httpd -k start
daemon    2981  0.1  0.3  52300  4856 ?        S    08:53   0:00 /home/app/httpd/bin/httpd -k start
daemon    2982  0.2  0.3  52300  4856 ?        S    08:53   0:00 /home/app/httpd/bin/httpd -k start
daemon    2983  0.2  0.3  52300  4856 ?        S    08:53   0:00 /home/app/httpd/bin/httpd -k start
daemon    2984  0.1  0.3  52300  4856 ?        S    08:53   0:00 /home/app/httpd/bin/httpd -k start
daemon用户开启的进程全部为对应root进程的子进程,具体的可以自己深入研究。


注意:启动apache可能报如下错误


httpd: Syntax error on line 502 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied
解决办法: 关闭selinux即可。
setenforce 0
具体原因可以参考: http://soft.chinabyte.com/os/104/12170104.shtml 


Apache配置文件

apache的主配置文件中各个关键词的作用:

其中配置文件的语法是 指令 + 值 (多个值用空格分开);# 为注释(#前不能有字符);指令太长可以用 "\" 续行;建议指令首字母大写,使用驼峰法,参数值区分大小写;


ServerRoot "/usr/local/apache2"                      // apache安装的路径

Listen 80                                            // 监听本机80端口(多网卡下,多个ip都可以访问)
Listen 192.168.1.200:80                              // 服务器多网卡情况,监听某个网卡ip的的80端口
Listen 192.168.1.200:443 https                       // 非http协议的情况
                     
// IfModule对静态模块的判断,静态模块是编译apache时引入的,动态模块(*.so 如:libphp5.so)是安装完成之后手动外挂上去的,IfModule 可以嵌套,具体这里不再详细列举。 
<IfModule !mpm_netware_module>  
<IfModule !mpm_winnt_module>                   // 非windows平台
User daemon                                          // 启动apache的用户与组
Group daemon
</IfModule>
</IfModule>

ServerAdmin  ahern88@163.com                         // 使用管理员邮箱即可

ServerName                           // 服务器名,若有host写入host名,无host写本机ip即可

DocumentRoot "/usr/local/apache/htdocs"              // apache根目录

-----其他配置段在下节介绍-----

ErrorLog "logs/error_log"                            // 定义错误日志

LogLevel warn                                        // 定义错误日志级别

DefaultType  text/plain                              // 定义默认http响应文件类型

Include  extra/httpd-vhosts.conf                     // 引入附加配置文件

LoadModule  wsgi_module  modules/mod_wsgi.so         // 载入动态模块,语法 : LoadModule module名 module路径

Apache配置段


<IfDefine ClosedForNow>
</Ifdefine>

<IfModule !mod_mime_magic.c>
      <IfModule !bbb>     // 配置段允许嵌套
      </ifModule>
</IfModule>

<IfVersion >=2.1>            // Apache版本信息
</IfVersion>

<Directory /dir/>
    AllowOverride None        // 允许.htaccess 覆盖此配置
    Options None         // 不允许列出文件列表,开启使用 Options Indexes
    Order allow,deny          // 先允许再拒绝
    Allow from all        // 允许所有请求
    Deny  from 192.168.1.200  // 拒绝ip访问
</Directory>

<DirectoryMatch 'regx'>
</DirectoryMatch>

<Files demo.html>
</Files>

<FilesMatch "^\.ht">         // 禁止直接访问 .htaccess文件等
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

<Location '/pic' >          // Location通过配置  rewriter.so 模块重写url地址
</Location>

<LocationMatch 'regx'>
</LocationMatcn>


// 做几个例子
1.载入php模块
LoadModule php5_module modules/libphp5.so
<IfModule dir_module>
    DirectoryIndex index.php index.html     // 这里可以在给一个通用错误页面屏蔽,目录访问  commons/error.html
    AddType application/x-httpd-php .php
</IfModule>

2. 发布一个目录  /var/www/html/(注意该目录必须是拥有 daemon 用户和组的权限) ,通过 http://ip:8080/dir/
/var/www/html/下有abc.html bbb.html

Alias /dir/ "/var/www/html/"   // 注意,这里一定不要写成  /var/www/html ,最后的 / 必须加上
<Directory "/var/www/html">  AllowOverride None  (All) 不允许被覆盖 .htaccess文件
Options Indexes FolowSymLinks   允许索引,允许符号链接
Order Allow,Deny
Allow from all
Deny from 192.168.1.101

<Files "bbb.html">         // 这里设置了之后无法访问 bbb.html
Order Allow,Deny
Deny from all
</Files>
</Directory>

同样也可以通过 <Location> 限制URI地址


Apache虚拟主机配置

    如果想在一台电脑上发布多个web应用,那么就必须要学会虚拟主机的配置,虚拟主机的配置可以分为两种:
1. 基于IP地址
这种很少用,因为IP地址缺乏,这样做很浪费IP资源。

2. 基于域名
通过dns解析,将多个域名指向同一个ip地址。比如 (www.a.com   www.b.com   www.c.com)


// 这里我们可以修改 httpd.conf 同样也可以修改 extra/httpd-vhosts.conf 然后将httpd.conf 中的Include打开

NameVirtualHost *:80  <VirtualHost *:80>              // 允许通过ip访问本机
ServerName 192.168.1.200 
DocumentRoot /var/www/html
ErrorLog /usr/local/apache2/logs/error_log
CustomLog /user/local/apache2/logs/access_log combined
</VirtualHost>

<VirtualHost *:80>
ServerName www.a.com
DocumentRoot /var/www/a/
ErrorLog /var/www/a/logs/error_log
CustomLog /var/www/a/logs/access_log combined
</VirtualHost>

<VirtualHost *:80>
ServerName www.b.com
DocumentRoot /var/www/b/
ErrorLog /var/www/b/logs/error_log
CustomLog /var/www/b/logs/access_log combined
</VirtualHost>

<VirtualHost *:80>
ServerName www.c.com
DocumentRoot /var/www/c/
ErrorLog /var/www/c/logs/error_log
CustomLog /var/www/c/logs/access_log combined
</VirtualHost>
有时候我们希望主机的配置有应用发布者自己控制,而不希望他拥有修改apache配置的权力,那么我们可以通过 .htaccess 文件控制。
前提需要开启 AccessFileName .htaccess ,这个默认是开启的;还有  AllowOverride  All 必须开启。
.htaccess 文件内容如下
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml  
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file 
Require Group admins

这样该应用会覆盖apache中的配置文件,完成应用自己控制访问设置。

转载于:https://my.oschina.net/aiheng1988/blog/146967

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值