Apache Http Server学习笔记
2014-05-02 15:02
337 查看
第一次接触Apache是数年前了,现在可能会转向Php开发,所以抽时间又一次学习了Apache服务器的使用,不善于总结和做笔记的我总是与残酷的时间抗衡着,时间久了,我无力反抗,那些学过的东西早已被抛到九霄云外了,我有点痛恨自己当初为什么没有能把所有学习的知识总结下来呢?这一次我必须要总结下昨天对Apache的学习。这里很多东西我都参考了《细说php》
存放apache一些可执行文件,包含 ab(用于压力测试) , apachectl(用于操作apache服务) , htpasswd(apache的权限设置)等等。
这里一般存放cgi脚本,如通过perl,c等编写cgi来发布web。
访问apache发布的网站通常会出现一些错误页面,所有的错误页面在这里定义。
该目录非常关键,它是默认apache的根目录,安装完apache并启动之后,通过 http://ip:8080/index.html 便可以找到 htdocs 下的index.html,将文件内容发送给客户端浏览器,浏览器解析并显示。不过apache的根目录可以通过配置文件自定义,后面会讲到。
网站中所有的默认的小图标都存放在这里,如 默认的favicon.ico小图标等。
该目录存放日志信息,也非常重要,用于日常的分析。一般下面会至少有这两个文件 access_log(正常访问的日志) error_log(访问错误的日志)。
该目录存放一些man的帮助文档,不太重要,可以忽略。
该目录存放apache的配置文件,同样也很重要,其中 httpd.conf 为主配置文件,大家应该注意到了该目录下面的 extra/目录,extra/目录下面有很多以功能拆分好了的 *.conf 配置,这是附加配置文件,在httpd.conf 中通过 Include extra/httpd-default.conf 来载入附加配置文件,可以将一些配置信息写入附加配置文件并在主配置文件中引入就Ok了。
附加配置文件默认没有开启,需要修改 httpd.conf 配置文件来开启。
在启动apache之前要学习apache配置的配置与其虚拟主机的设置。
在linux平台下,apache默认会启动一个主进程,主进程会打开5个子进程,客户端连接会与某个子进程通信,各个子进程由主进程管理并共享主进程。(apache会保证至少有5个空闲子进程)
daemon用户开启的进程全部为对应root进程的子进程,具体的可以自己深入研究。
注意:启动apache可能报如下错误
解决办法: 关闭selinux即可。
具体原因可以参考:http://soft.chinabyte.com/os/104/12170104.shtml
apache的主配置文件中各个关键词的作用:
其中配置文件的语法是 指令 + 值 (多个值用空格分开);# 为注释(#前不能有字符);指令太长可以用 "\" 续行;建议指令首字母大写,使用驼峰法,参数值区分大小写;
如果想在一台电脑上发布多个web应用,那么就必须要学会虚拟主机的配置,虚拟主机的配置可以分为两种:
1. 基于IP地址
这种很少用,因为IP地址缺乏,这样做很浪费IP资源。
2. 基于域名
通过dns解析,将多个域名指向同一个ip地址。比如 (www.a.com www.b.com www.c.com)
view
source
print?
Apache介绍
Apache是世界上排名第一的开源的Web服务器软件,同类型的有Nginx反向代理服务器,不过Apache以最具稳定性得到了广大开发者的认可,不过在性能上Nginx会略胜一筹。Apache通过外置模块可以发布CGI,PHP等网站应用。具体的可以参考官网 http://httpd.apache.org/
Apache源代码安装
下载Apache源代码包
1 | cd /home/app/ |
2 | wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.2.25.[/code]tar.gz |
解压源码包并安装
1 | tar xzvf httpd-2.2.45. tar .gz |
2 | cd httpd-2.2.25 |
3 | ./configure prefix=/usr/ local /apache2 |
4 | make |
5 | 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(访问错误的日志)。1 | 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 配置文件来开启。
01 | cd /usr/ local /apache2/ |
02 | conf/httpd.conf //主配置文件 |
03 | conf/extra/ //所有附加配置文件 |
04 | httpd-autoindex.conf //配置目录列表 |
05 | httpd-dav.conf //配置dav协议 |
06 | httpd-default.conf //配置apache服务相关的全局参数 |
07 | httpd-info.conf //配置服务器信息与状态显示 |
08 | httpd-languages.conf //配置语言支持 |
09 | httpd-manual.conf //提供apache文档访问 |
10 | httpd-mpm.conf //多路处理模块(mpm)配置 |
11 | httpd-multilang-errordoc.conf //多语言错误应答配置 |
12 | httpd-ssl.conf //https的ssl模块配置 |
13 | httpd-userdir.conf //用户主目录配置 |
14 | httpd-vhosts.conf //虚拟主机的配置 |
Apache常用操作
1 | cd /usr/ local /apache2/bin/ |
2 | apachectl -l 列出apache的信息,模块之类的 |
3 | apachectl -t 检查配置文件 |
4 | apachectl start 启动apache |
5 | apachectl restart 重启apache |
6 | apachectl stop 关闭apache |
在linux平台下,apache默认会启动一个主进程,主进程会打开5个子进程,客户端连接会与某个子进程通信,各个子进程由主进程管理并共享主进程。(apache会保证至少有5个空闲子进程)
1 | root@debian:/home/app/httpd/bin # ps aux | grep httpd |
2 | root 2979 0.0 0.1 48972 2668 ? Ss 08:53 0:00 /home/app/httpd/bin/httpd -k start |
3 | daemon 2980 0.1 0.3 52300 4856 ? S08:53 0:00 /home/app/httpd/bin/httpd -k start |
4 | daemon 2981 0.1 0.3 52300 4856 ? S08:53 0:00 /home/app/httpd/bin/httpd -k start |
5 | daemon 2982 0.2 0.3 52300 4856 ? S08:53 0:00 /home/app/httpd/bin/httpd -k start |
6 | daemon 2983 0.2 0.3 52300 4856 ? S08:53 0:00 /home/app/httpd/bin/httpd -k start |
7 | daemon 2984 0.1 0.3 52300 4856 ? S08:53 0:00 /home/app/httpd/bin/httpd -k start |
注意:启动apache可能报如下错误
1 | 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 |
1 | setenforce 0 |
Apache配置文件
apache的主配置文件中各个关键词的作用:其中配置文件的语法是 指令 + 值 (多个值用空格分开);# 为注释(#前不能有字符);指令太长可以用 "\" 续行;建议指令首字母大写,使用驼峰法,参数值区分大小写;
01 | ServerRoot "/usr/local/apache2" // apache安装的路径 |
02 |
03 | Listen 80 //监听本机80端口(多网卡下,多个ip都可以访问) |
04 | Listen 192.168.1.200:80 //服务器多网卡情况,监听某个网卡ip的的80端口 |
05 | Listen 192.168.1.200:443 https //非http协议的情况 |
06 |
07 | // IfModule对静态模块的判断,静态模块是编译apache时引入的,动态模块(*.so 如:libphp5.so)是安装完成之后手动外挂上去的,IfModule 可以嵌套,具体这里不再详细列举。 |
08 | <IfModule !mpm_netware_module> |
09 | <IfModule !mpm_winnt_module> //非windows平台 |
10 | User |
11 | Group daemon |
12 | </IfModule> |
13 | </IfModule> |
14 |
15 | ServerAdmin |
16 |
17 | ServerName //服务器名,若有host写入host名,无host写本机ip即可 |
18 |
19 | DocumentRoot "/usr/local/apache/htdocs" // apache根目录 |
20 |
21 | -----其他配置段在下节介绍----- |
22 |
23 | ErrorLog "logs/error_log" // 定义错误日志 |
24 |
25 | LogLevel |
26 |
27 | DefaultType |
28 |
29 | Include |
30 |
31 | LoadModule wsgi_module modules/mod_wsgi.so //载入动态模块,语法 : LoadModule module名 module路径 |
Apache配置段
01 | <IfDefine ClosedForNow> |
02 | </Ifdefine> |
03 |
04 | <IfModule !mod_mime_magic.c> |
05 | <IfModule !bbb> //配置段允许嵌套 |
06 | </ifModule> |
07 | </IfModule> |
08 |
09 | <IfVersion |
10 | </IfVersion> |
11 |
12 | <Directory / dir /> |
13 | AllowOverride |
14 | Options None //不允许列出文件列表,开启使用 Options Indexes |
15 | Order allow,deny//先允许再拒绝 |
16 | Allow from all //允许所有请求 |
17 | Deny from 192.168.1.200 //拒绝ip访问 |
18 | </Directory> |
19 |
20 | <DirectoryMatch 'regx' > |
21 | </DirectoryMatch> |
22 |
23 | <Files demo.html> |
24 | </Files> |
25 |
26 | <FilesMatch "^\.ht" > //禁止直接访问 .htaccess文件等 |
27 | Order allow,deny |
28 | Deny from all |
29 | Satisfy All |
30 | </FilesMatch> |
31 |
32 | <Location '/pic' > //Location通过配置 rewriter.so 模块重写url地址 |
33 | </Location> |
34 |
35 | <LocationMatch 'regx' > |
36 | </LocationMatcn> |
37 |
38 |
39 | // 做几个例子 |
40 | 1.载入php模块 |
41 | LoadModule php5_module modules/libphp5.so |
42 | <IfModule dir_module> |
43 | DirectoryIndex |
44 | AddType application/x-httpd-php .php |
45 | </IfModule> |
46 |
47 | 2. 发布一个目录 /var/www/html/(注意该目录必须是拥有 daemon 用户和组的权限) ,通过 http://ip:8080/[/code]dir/ |
48 | /var/www/html/下有abc.html bbb.html |
49 |
50 | Alias / dir / "/var/www/html/" // |
51 | <Directory "/var/www/html" > <span></span> AllowOverride None (All) 不允许被覆盖 .htaccess文件 |
52 | Options Indexes FolowSymLinks 允许索引,允许符号链接 |
53 | Order Allow,Deny |
54 | Allow from all |
55 | Deny from 192.168.1.101 |
56 |
57 | <Files "bbb.html" > |
58 | Order Allow,Deny |
59 | Deny from all |
60 | </Files> |
61 | </Directory> |
62 |
63 | 同样也可以通过 <Location> 限制URI地址 |
Apache虚拟主机配置
如果想在一台电脑上发布多个web应用,那么就必须要学会虚拟主机的配置,虚拟主机的配置可以分为两种:1. 基于IP地址
这种很少用,因为IP地址缺乏,这样做很浪费IP资源。
2. 基于域名
通过dns解析,将多个域名指向同一个ip地址。比如 (www.a.com www.b.com www.c.com)
01 | // 这里我们可以修改 httpd.conf 同样也可以修改 extra/httpd-vhosts.conf 然后将httpd.conf 中的Include打开 |
02 |
03 | NameVirtualHost |
04 | ServerName 192.168.1.200 |
05 | DocumentRoot /var/www/html |
06 | ErrorLog /usr/ local /apache2/logs/error_log |
07 | CustomLog /user/ local /apache2/logs/access_log combined |
08 | </VirtualHost> |
09 |
10 | <VirtualHost *:80> |
11 | ServerName www.a.com |
12 | DocumentRoot /var/www/a/ |
13 | ErrorLog /var/www/a/logs/error_log |
14 | CustomLog /var/www/a/logs/access_log combined |
15 | </VirtualHost> |
16 |
17 | <VirtualHost *:80> |
18 | ServerName www.b.com |
19 | DocumentRoot /var/www/b/ |
20 | ErrorLog /var/www/b/logs/error_log |
21 | CustomLog /var/www/b/logs/access_log combined |
22 | </VirtualHost> |
23 |
24 | <VirtualHost *:80> |
25 | ServerName www.c.com |
26 | DocumentRoot /var/www/c/ |
27 | ErrorLog /var/www/c/logs/error_log |
28 | CustomLog /var/www/c/logs/access_log combined |
29 | </VirtualHost> |
1 | 有时候我们希望主机的配置有应用发布者自己控制,而不希望他拥有修改apache配置的权力,那么我们可以通过 .htaccess 文件控制。 |
2 | 前提需要开启 AccessFileName .htaccess ,这个默认是开启的;还有 AllowOverride All 必须开启。 |
source
print?
01 | .htaccess 文件内容如下 |
02 | Options +Includes |
03 | AddType text/html shtml |
04 | AddHandler server-parsed shtml |
05 | AuthName "Password Required" |
06 | AuthUserFile /www/passwords/password. file |
07 | AuthGroupFile /www/passwords/group. file |
08 | Require Group admins |
09 |
10 | 这样该应用会覆盖apache中的配置文件,完成应用自己控制访问设置。 |
相关文章推荐
- Apache Storm学习笔记二:基本概念
- apache-shiro 学习笔记
- Apache Ignite 学习笔记(二): Ignite Java Thin Client
- Apache Nutch 1.3 学习笔记十一(页面评分机制 LinkRank 介绍)
- PHP学习笔记【2】--web服务器和apache服务器的安装
- Apache Shiro学习笔记(四)INI配置
- linux 网页服务器apache学习笔记
- 【服务端】【学习笔记】Apache/Tomcat
- linux学习笔记 apache php mysql +linux
- PHP学习笔记【2】--web服务器和apache服务器的安装
- NodeJS学习笔记 - Apache反向代理集成实现
- Apache CMS学习笔记2 - Session
- apache-shiro 学习笔记
- Apache Shiro学习笔记(三)用户授权自定义Permission
- Struts2.5学习笔记——java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepa
- [学习笔记7]Apache及配置文件httpd.conf
- apache-comnons系列之commons-configuration2 学习笔记
- apache Shiro学习笔记(二) Authentication
- Apache Nutch 1.3 学习笔记十二(Nutch 2.0 的主要变化)
- Apache Shiro学习笔记(1)