随便记录一下,不求严谨,但求无原则性错误。-- DebaoZhang 20111023
Apache是一个http服务器,在无连接的时候,它除了监听配置文件中指定的IP地址和TCP端口号外不做任何工作;当一个请求出现在一个有效的端口时,Apache接受HTTP请求并分析其头部,然后它根据配置文件中设定的规则,做出某种合适的动作。
Apache通过一个配置文件进行设置
C:\ProgramFiles\ApacheSoftwareFoundation\Apache2.2\conf\httpd.conf
/etc/apache2/apache2.conf
可以通过命令行参数-f指定
用 Listen 指定要绑定的端口号
Listen 80 Listen 127.0.0.1:8080 Listen 10.0.2.15:8081 Listen [fe80::222:5fff:feb9:82d0]:8888
不同的IP和端口组合可以用来做虚拟主机,这需要通过VirtualHost进一步配置(必须先用Listen设置监听地址)
... ServerNname host.example.com ... ServerNname host.example2.com ...
虚拟主机可以基于
我们在浏览器中打交道的是一堆url:
http://www.example.com/index.html http://www.example.com/faq.html?#question10 http://www.example.com:8080/cgi-bin/draw.cgi?type=rect http://user:[email protected]/
浏览器通过GET或POST想服务器发送请求
GET /index.html HTTP/1.1 Host:www.example.com
服务器此时需要根据这个路径发送一个合适的文件给浏览器。
比如,前面请求的 /index.html 对应磁盘的哪个文件。则需要DocumentRoot指定一个目录作为根目录。
比如:
DocumentRoot /var/www
或
DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"
每一个虚拟主机也都该指定自己的DocumentRoot
还有一个ServerRoot的东西,是用来配置服务器的配置文件、日志文件等所在目录的,与这儿没什么关系。
可能还需要访问位于DocumentRoot之外的文件
Alias /docs /var/web
这样一来,http://www.exemaple.com/docs/...被映射到该目录
还有一个ScriptAlias,功能类似,只是其内容均被视为脚本。
ScriptAlias /cgi-bin/ "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/"
这两个命令还有两个对应的支持正则匹配的版本
AliasMatch
ScriptAliasMatch
比如:
linux 可以使用soft link方式(并在Option中设置FollowSymLinks)
使用mod_userdir模块的UserDir指令
当然实在不存在的东西,只能404错误了
对目录的单独设置是通过Directory进行的
Options +Indexes
对文件的单独设置是通过Files进行
Order allow,deny Deny from all
在路径上,尽管它们都可以接受shell风格通配符,但更复杂的匹配则需要使用相应的支持正则的版本
DirectoryMatch
FilesMath
可以通过在目录下放置一个.htaccess文件对该目录进行控制。
主配置文件内的:
AddType text/example .exm
等价于在该目录下的.htaccess文件中放入:
AddType text/example .exm
但这个不建议被使用(除非没有主配置文件的设置权限)了。
.htaccess 文件的名字可以改成其他的,通过 AccessFileName指令
该文件内可以使用哪些指令,可通过AllowOverride进行设置
AllowOverride 设置为None(默认值是All) 可完全禁止 .htaccess的使用
与前面的Directory和Files针对的磁盘文件路径不同,Location设置的是URL地址中路径部分。
比如:
Order Allow,Deny Deny from all
将禁止访问http://www.example.com/private123等所有以 /private 开头的路径
这个东西会3组模块(真的比较繁...,使用LoadModule加载):
首先设置认证类型(使用AuthType指令,目前只支持两种?)
根据认证类型选择认证支持模块(通过AuthBasicProvider或AuthDigestProvider)设置,提供密码等验证信息
AuthBasicProvider
AuthDigestProvider
设置授权支持模块(参考Require指令?),意图是:如何使用前面的密码信息?
AuthType Basic AuthName "From Example.com" #AuthBasicProvider file AuthUserFile /usr/apache2/passwd/passwords Require user debao
AuthType 选择basic认证方式
AuthName 是用户看到的信息(同一个name的浏览器也可以自动处理)
AuthBasicProvider 选择 file,这是默认值
AuthUserFile 设置密码文件
密码文件通过htpasswd来生成,对于digest方式,则需要使用htdigest来生成密码文件。
这二者可以提供简单的基于IP地址的访问控制
Order deny,allow Deny from all Allow from 192.168.0.2
当浏览器请求一个文件时,服务器一般都需要同时提供mime信息
TypesConfig 指令指定一个包含扩展名和mime对应关系的文件
使用 AddType 指令添加新的对应关系
MimeMagicFile 指定一个包含文件开头的魔串和mime对应关系的文件
DefaultType 指定默认类型
对于纯文本文件,如果让服务器提供编码信息。AddDefaultCharset指令可以做到,不过这会覆盖html等文件自身提供的编码信息。
使用 ScriptAlias指令可以设置cgi目录
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
如果在该目录之外的以某种后缀结尾(.py)的文件作为脚本,则需要使用
Options +ExecCGI AddHandler cgi-script .py
首先是Options中允许CGI脚本执行,然后使用AddHandler设置。
如果某个目录下全是cgi脚本,则可以使用
SetHandler cgi-script
对于python来说,CGI方式应该不怎么使用了吧。主要是wsgi这种方式了。
下载 wsgi :http://code.google.com/p/modwsgi/
LoadModule wsgi_module modules/mod_wsgi.so WSGIScriptAlias /wiki "F:/Moin/mywiki/moin.wsgi"
http://lamp.linux.gov.cn/Apache/ApacheMenu/urlmapping.html
http://lamp.linux.gov.cn/Apache/ApacheMenu/urlmapping.html
http://docstore.mik.ua/orelly/linux/apache/ch01_01.htm