设为首页 收藏本站
查看: 546|回复: 0

[经验分享] Apache配置入门笔记

[复制链接]

尚未签到

发表于 2017-1-2 08:27:21 | 显示全部楼层 |阅读模式



  • 随便记录一下,不求严谨,但求无原则性错误。-- DebaoZhang 20111023

Apache是一个http服务器,在无连接的时候,它除了监听配置文件中指定的IP地址和TCP端口号外不做任何工作;当一个请求出现在一个有效的端口时,Apache接受HTTP请求并分析其头部,然后它根据配置文件中设定的规则,做出某种合适的动作。
Apache通过一个配置文件进行设置


  • 配置文件是编译期被指定的(通常叫 httpd.conf)
  • 两个例子:



    • C:\ProgramFiles\ApacheSoftwareFoundation\Apache2.2\conf\httpd.conf



    • /etc/apache2/apache2.conf





  • 可以通过命令行参数-f指定

  • 配置文件内通过include可以包含其他的配置文件


绑定端口与虚拟主机



用 Listen 指定要绑定的端口号


  • 可以指定具体的IP
  • 可以用多条命令指定多个端口号



Listen 80
Listen 127.0.0.1:8080
Listen 10.0.2.15:8081
Listen [fe80::222:5fff:feb9:82d0]:8888

不同的IP和端口组合可以用来做虚拟主机,这需要通过VirtualHost进一步配置(必须先用Listen设置监听地址)


<VirtualHost 127.0.0.1:8080>
...
</VirtualHost>
<VirtualHost 10.0.2.15:8081>
ServerNname host.example.com
...
</VirtualHost>
<VirtualHost 10.0.2.15:8081>
ServerNname host.example2.com
...
</VirtualHost>

虚拟主机可以基于


  • IP地址
  • 端口号
  • 域名(通过HTTP请求header中的Host字段)


路径转换?



我们在浏览器中打交道的是一堆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:pass@www.example.com/

浏览器通过GET或POST想服务器发送请求

GET /index.html HTTP/1.1 Host:www.example.com

服务器此时需要根据这个路径发送一个合适的文件给浏览器。


  • 如果请求的是磁盘上的静态文件,此时需要的是到磁盘文件系统的映射
  • 如果请求的是动态生成的文件,仍需要能找到脚本或程序才行


DocumentRoot



比如,前面请求的 /index.html 对应磁盘的哪个文件。则需要DocumentRoot指定一个目录作为根目录。
比如:

DocumentRoot /var/www



DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"


  • 注:结尾不再加一个斜杠


  • 每一个虚拟主机也都该指定自己的DocumentRoot


还有一个ServerRoot的东西,是用来配置服务器的配置文件、日志文件等所在目录的,与这儿没什么关系。


Alias?



可能还需要访问位于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指令

  • 使用重定向功能 Redirct
  • ...

当然实在不存在的东西,只能404错误了


文件和目录设置



对目录的单独设置是通过Directory进行的

<Directory /var/web/dir1>
Options +Indexes
</Directory>

对文件的单独设置是通过Files进行

<Files private.html>
Order allow,deny
Deny from all
</Files>

在路径上,尽管它们都可以接受shell风格通配符,但更复杂的匹配则需要使用相应的支持正则的版本




  • DirectoryMatch



  • FilesMath



.htaccess



可以通过在目录下放置一个.htaccess文件对该目录进行控制。
主配置文件内的:

<Directory /www/htdocs/example>
AddType text/example .exm
</Directory>

等价于在该目录下的.htaccess文件中放入:

AddType text/example .exm

但这个不建议被使用(除非没有主配置文件的设置权限)了。




  • .htaccess 文件的名字可以改成其他的,通过 AccessFileName指令



  • 该文件内可以使用哪些指令,可通过AllowOverride进行设置



  • AllowOverride 设置为None(默认值是All) 可完全禁止 .htaccess的使用

  • 这个文件与授权控制无关!!


Location



与前面的Directory和Files针对的磁盘文件路径不同,Location设置的是URL地址中路径部分。
比如:

<Location /private>
Order Allow,Deny
Deny from all
</Location>

将禁止访问http://www.example.com/private123等所有以 /private 开头的路径


认证与授权



这个东西会3组模块(真的比较繁...,使用LoadModule加载):
首先设置认证类型(使用AuthType指令,目前只支持两种?)


  • Basic
  • Digest
  • ...

根据认证类型选择认证支持模块(通过AuthBasicProvider或AuthDigestProvider)设置,提供密码等验证信息




  • AuthBasicProvider

    • file (默认值)
    • dbm
    • dbd
    • ...




  • AuthDigestProvider

    • file
    • dbm



设置授权支持模块(参考Require指令?),意图是:如何使用前面的密码信息?


简单例子





AuthType Basic
AuthName "From Example.com"
#AuthBasicProvider file
AuthUserFile /usr/apache2/passwd/passwords
Require user debao




  • AuthType 选择basic认证方式



  • AuthName 是用户看到的信息(同一个name的浏览器也可以自动处理)



  • AuthBasicProvider 选择 file,这是默认值



  • AuthUserFile 设置密码文件

  • Require user 控制密码文件中哪些用户可以通过授权(使用Require valid-user可是使得所有密码正确的用户通过授权)

密码文件通过htpasswd来生成,对于digest方式,则需要使用htdigest来生成密码文件。


Deny Allow



这二者可以提供简单的基于IP地址的访问控制

Order deny,allow
Deny from all
Allow from 192.168.0.2


文件类型



当浏览器请求一个文件时,服务器一般都需要同时提供mime信息




  • TypesConfig 指令指定一个包含扩展名和mime对应关系的文件



  • 使用 AddType 指令添加新的对应关系



  • MimeMagicFile 指定一个包含文件开头的魔串和mime对应关系的文件



  • DefaultType 指定默认类型


对于纯文本文件,如果让服务器提供编码信息。AddDefaultCharset指令可以做到,不过这会覆盖html等文件自身提供的编码信息。


CGI



使用 ScriptAlias指令可以设置cgi目录

ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/

如果在该目录之外的以某种后缀结尾(.py)的文件作为脚本,则需要使用

<Directory /home/*/public_html>
Options +ExecCGI
AddHandler cgi-script .py
</Directory>

首先是Options中允许CGI脚本执行,然后使用AddHandler设置。
如果某个目录下全是cgi脚本,则可以使用

SetHandler cgi-script


wsgi



对于python来说,CGI方式应该不怎么使用了吧。主要是wsgi这种方式了。




  • 下载 wsgi :http://code.google.com/p/modwsgi/

  • 在apache配置文件中使用



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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-322608-1-1.html 上篇帖子: Apache + Tomcat 的群集配置 下篇帖子: Apache启用mod_expires模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表