Apache是一个http服务器,在无连接的时候,它除了监听配置文件中指定的IP地址和TCP端口号外不做任何工作;当一个请求出现在一个有效的端口时,Apache接受HTTP请求并分析其头部,然后它根据配置文件中设定的规则,做出某种合适的动作。
Apache通过一个配置文件进行设置
- 配置文件是编译期被指定的(通常叫 httpd.conf)
- 两个例子:
-
可以通过命令行参数-f指定
- 配置文件内通过include可以包含其他的配置文件
绑定端口与虚拟主机
用 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设置监听地址)
<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"
还有一个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
其他
比如:
当然实在不存在的东西,只能404错误了
文件和目录设置
对目录的单独设置是通过Directory进行的
<Directory /var/web/dir1>
Options +Indexes
</Directory>
对文件的单独设置是通过Files进行
<Files private.html>
Order allow,deny
Deny from all
</Files>
在路径上,尽管它们都可以接受shell风格通配符,但更复杂的匹配则需要使用相应的支持正则的版本
.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指令,目前只支持两种?)
根据认证类型选择认证支持模块(通过AuthBasicProvider或AuthDigestProvider)设置,提供密码等验证信息
-
AuthBasicProvider
-
AuthDigestProvider
设置授权支持模块(参考Require指令?),意图是:如何使用前面的密码信息?
简单例子
AuthType Basic
AuthName "From Example.com"
#AuthBasicProvider file
AuthUserFile /usr/apache2/passwd/passwords
Require user debao
密码文件通过htpasswd来生成,对于digest方式,则需要使用htdigest来生成密码文件。
Deny Allow
这二者可以提供简单的基于IP地址的访问控制
Order deny,allow
Deny from all
Allow from 192.168.0.2
文件类型
当浏览器请求一个文件时,服务器一般都需要同时提供mime信息
对于纯文本文件,如果让服务器提供编码信息。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"
参考
分享到:
相关推荐
本笔记涵盖了从 HTML 到 PHP 的知识点,总共 149 讲,涵盖了 HTML 基本结构、CSS 选择器、浮动、盒子模型、PHP 基本介绍、Apache 服务器安装和配置等知识点。 HTML 基本结构 HTML 文件基本结构由 `<!DOCTYPE ...
【Maven快速入门笔记】 Maven,作为一款强大的项目管理工具,是Java开发中的必备利器,旨在解决项目构建和依赖管理的复杂性。本笔记将带你快速掌握Maven的基本概念和使用方法,让你从零开始轻松入门。 **1. Maven...
【Hadoop的xmind入门笔记概述】 Hadoop是Apache软件基金会开发的一个开源分布式计算框架,主要处理和存储大规模数据。这个“Hadoop的xmind入门笔记”系列涵盖了从基础概念到高级应用的全面学习路径,旨在帮助初学者...
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter <filter-name>struts2 <url-pattern>/* ``` 这段配置指定了Struts2的过滤器,并将其应用于所有URL请求路径。 以上...
### 韩顺平HTML+JS+PHP+MySQL从入门到精通全套笔记 #### HTML 运行原理与基本概念 1. **HTML简介** - **定义**:HTML(HyperText Markup Language)即超文本标记语言,是一种用于创建网页的标准标记语言。 - **...
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长...
"Java笔记从入门到精通"是一份全面的教程,旨在帮助初学者掌握Java编程的基础,并逐步提升为专家。以下是从这份资料中提炼出的一些关键知识点: 1. **JDK(Java Development Kit)**:JDK是Java开发的核心,包含了...
Struts是Apache软件基金会 Jakarta项目下的一个开源框架,主要用于构建基于Java的企业级Web应用程序。它引入了MVC(Model-View-Controller)设计模式,帮助开发者更好地组织代码结构,提高开发效率,同时提供了强大...
本资源为韩顺平的 PHP+Mysql 入门开发笔记,主要涵盖 PHP 基础知识、WEB 开发介绍、PHP 的特点、发展历程、开发工具、APACHE 服务器安装和管理、WEB 服务器、安全配置、虚拟主机配置等方面的知识点。 PHP 基础知识 ...
### structs 入门笔记 #### 一、Struts框架概览 **Struts** 是一个开源的MVC(Model-View-Controller)架构框架,它主要用于简化Java Web应用程序的开发。Struts由Apache软件基金会维护和支持,是Java企业级开发中...
### Hive入门文档笔记 #### 一、Hive简介与安装配置 Hive 是一个构建在 Hadoop 之上的数据仓库工具,它通过提供 SQL 查询功能,使得用户可以更方便地处理存储在 Hadoop 分布式文件系统(HDFS)中的大规模数据集。...
总之,"入门必备Java学习笔记"是一份全面的资源,涵盖了Java初学者需要掌握的所有基础知识,包括JavaSE API的使用,Javalang的基本概念,以及数据库连接技术JDBC和Apache Derby的应用。通过深入阅读和实践,学习者...
Linux 运维从入门到高级学习笔记 Linux 运维从入门到高级学习笔记是一个涵盖了 Linux 运维的方方面面内容的学习笔记。该笔记从 Linux 的基本概念和安装开始,到 Linux 系统管理、服务部署和 Linux 编程等高级话题。...
Git 和 Gradle 入门学习笔记 Git 是一个分布式版本控制系统,Gradle 是一个基于 Apache Ant 和 Maven 的构建自动化工具。在本笔记中,我们将学习如何安装和使用 Git 和 Gradle。 Git 安装 要安装 Git,可以从 ...
【PHP入门到精通学习笔记】 PHP(Personal Home Page)是一种广泛使用的开源脚本语言,尤其在Web开发领域中。PHP最初是由Rasmus Lerdorf创建的,后来由Zend公司负责维护和商业化。PHP的设计目标是使得编写过程更...
这个入门教程和学习笔记是针对初学者设计的,帮助他们快速理解和掌握Struts2的核心概念和实践操作。 Struts2的学习首先需要理解MVC模式。MVC模式将应用逻辑分为三个部分:模型负责业务逻辑,视图负责展示数据,而...
【Mybatis基础入门学习笔记】 Mybatis是一款广泛使用的Java持久层框架,它的主要目标是简化对数据库的操作,提供更加灵活的SQL映射机制。Mybatis起源于Apache组织的ibatis框架,历经发展,在2010年迁移到Google ...