`
tomhibolu
  • 浏览: 1383193 次
文章分类
社区版块
存档分类
最新评论

Apache配置入门笔记

 
阅读更多
  • 随便记录一下,不求严谨,但求无原则性错误。-- 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这种方式了。

LoadModule wsgi_module modules/mod_wsgi.so

WSGIScriptAlias /wiki "F:/Moin/mywiki/moin.wsgi"

参考


分享到:
评论

相关推荐

    Apache_Mina2.0学习笔记

    最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长...

    linux入门教程 linux入门教程

    7) 加入了一些新的系统配置工具来方便用户管理以及Linux系统使用,例如apacheconf, bindconf, 和printconf等,这些工具能方便的分别让用户通过GUI图形用户界面来配置APACHE,BIND,和打印机。要知道,以往版本中要...

    HBase学习笔记(个人整理)

    个人笔记整理(带目录),共8个章节: ...二.Apache HBase配置 三.Hbase数据存储 四.HBase协处理器与二级索引 五.PHOENIX操作HBASE 六.HBase设计与优化 七.HBase与Spark集成 八.Trafodion操作HBase 共146页

    Mybatis学习笔记整合架构

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 MyBatis是一个优秀的持久层框架,它对jdbc的操作...

    Linux 运维 入门到高级

    linux企业实战运维入门到高级系列 ubuntu Centos 面试题合集 MySQL Nginx 搭建私有Yum仓库 搭建本地第三方源epel 升级内核 脚本合集 修改自动获取ip .ubuntu换国内源 CentOS硬盘分区 搭建网站 8.1linux上配置环境...

    SpringBoot笔记-上篇.pdf

    一、Spring Boot 入门 1、Spring Boot 简介 简化Spring应用开发的一个框架; 整个Spring技术栈的一个大整合; J2EE开发的一站式解决方案; 2、微服务 2014,martin fowler 微服务:架构风格(服务微化) 一个应用...

    Java秒杀系统方案优化高性能高并发学习实战源代码以及笔记..zip

    &lt;groupId&gt;org.apache.maven.plugins &lt;artifactId&gt;maven-war-plugin &lt;failOnMissingWebXml&gt;false 添加tomcat依赖 &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-tomcat &lt;scope&gt;...

    Hadoop学习笔记(一)Hadoop快速入门:3.编译

    1. 前期准备工作1.1 CentOS联网配置CentOS能连接外网。Linux虚拟机pingwww.baidu.com是畅通的注意:采用root角色编译,减少文件夹权限出现问题1.2 jar包准备(hadoop源码、JDK8、maven、ant、protobuf)(1)hadoop-...

    day01_eesy_01mybatis.zip

    学习笔记——mybatis的起步(1) 1.什么是框架? 他是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。 使用框架的好处: 框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高...

    initializr:Spring项目的快速入门生成器

    使用Apache Maven和Gradle的实现构建系统抽象。 .gitignore支持。 定制资源生成的几个挂钩点。 项目的各种选项以元数据模型表示,该模型使您可以配置依赖项列表,支持的JVM和平台版本等。 Spring Initializr还公开...

    Spark Core 笔记02

    Spark Core学习 对最近在看的赵星老师Spark视频中关于SparkCore的几个...//创建spark配置,设置应用程序名字 //val conf=new SparkConf().setAppName(ScalaWordCount) //设置本地调试 val conf=new SparkConf().setAp

    组件:Drupal 8 Pattern Lab入门实例

    Twig基于组件的主题 该存储库提供了详细的指南,用于设置...为了消除可能涉及不同AMP(Apache / MySQL / PHP)堆栈的各种设置的需求,我们建议使用基于容器的设置,并使用Docker和Lando。 您可以通过导航到“页面并按照

    MQ之ActiveMQ.mmap

    从零基础入门到熟练掌握ActiveMQ,能够结合Spring/SpringBoot进行实际开发配置并能够 进行MQ多节点集群的部署,最后学习MQ的高级特性和高频面试题的分析。 希望通过本次的学习, 能够帮助同学们取得更大的进步,加油...

    毕业设计电商网站源码-flask-blog:《FlaskWeb开发》的个人部署版本,包含学习笔记

    Flask入门学习笔记 配合《Flask Web开发:基于Python的Web应用开发实战》学习 部署 书本第17章部署到Heroku平台上,我并没有按照书本的来,而是部署到了DigitalOcean上,基本上是参考了这里: ,但细节上有些更改,...

    getting_started_with_activemq:模子

    ActiveMQ 入门该项目包括许多示例配置,显示了各种 ActiveMQ 高可用性场景。 其中包括:主从、经纪人网络和主从经纪人网络。 该项目还包括一个简单的 JMS 队列(点对点)消息生产者和消息消费者。 笔记: 所有说明都...

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ │ apache-tomcat-7.0.57.tar.gz │ │ JVM调优实战.doc │ │ Tomcat7优化.docx │ │ 深入理解Java内存模型.pdf │ │ │ └─课后资料 │ ├─笔记 │ │ 淘淘商城_day20_课堂笔记.docx │ │ │ └─视频 ...

    apigee-deploy-maven-plugin

    为自述提供了快速入门的入门步骤和命令。 视频 了解更多信息,请观看此视频! 使用插件的详细文档 内容 样品 parent-pom / pom.xml样本 pom.xml示例 Config.json示例 指令 配置代理 OAuth和两因素身份验证 Node.js...

    asp.net知识库

    将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005 ASP.NET 2.0 中的数据源控件 使用 ASP.NET 2.0 ObjectDataSource 控件 ASP.NET 2.0 的内部变化 使用SQL Cache Dependency 代替 ...

    springmybatis

    (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看...

Global site tag (gtag.js) - Google Analytics