PHP基础(023)---Apache

Apache:

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。同时Apache音译为阿帕奇.

 

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
 
Apacheweb服务器软件拥有以下特性:
  • 支持最新的HTTP/1.1通信协议
  • 拥有简单而强有力的基于文件的配置过程
  • 支持通用网关接口
  • 支持基于IP和基于域名的虚拟主机
  • 支持多种方式的HTTP认证
  • 集成Perl处理模块
  • 集成代理服务器模块
  • 支持实时监视服务器状态和定制服务器日志
  • 支持服务器端包含指令(SSI)
  • 支持安全Socket层(SSL) ---apache加密TCP/IP网络产品的标准是SSL ,对于Internet上普遍使用的超文本传输协议(HTTP)而言,其加密后的协议称为 HTTPS,缺省采用443端口。HTTPS数据是加密以后传输的,因此能有效保护在网络上传输的个人隐私信息。
  • 提供用户会话过程的跟踪
  • 支持FastCGI
  • 通过第三方模块可以支持JavaServlets
  • 如果你准备选择Web服务器,毫无疑问Apache是你的最佳选择。
图书《Apache服务器配置与使用工作笔记

目录

第1章 关于Apache
1.1 Apache 1.3.x介绍
1.2 Apache 2.0/2.2 介绍
1.3 Apache 2.3/2.4 介绍

第2章 Apache的安装
2.1 使用二进制程序安装
2.1.1 使用rpm或deb格式安装
2.1.2 使用已经编译好的包安装
2.2 使用源代码安装Apache
2.2.1 编译安装Apache
2.2.2 使用Apache Toolbox编译
2.3 常见问题解答(FAQ)
2.3.1 常用的优化参数
2.3.2 关于-O参数的设置
2.3.3 不知道该使用哪种参数进行优化
2.3.4 make install出错
2.3.5 安装mod_deflate模块出错
2.3.6 suEXEC模块的安装
2.3.7 无法安装mod_authnz_ldap模块

第3章 运行、监控Apache
3.1 运行Apache
3.1.1 手动启动Apache服务器
3.1.2 自动启动Apache服务器
3.1.3 停止Apache服务器
3.1.4 使用apachectl程序控制Apache
3.1.5 运行多个Apache服务器
3.1.6 使用<IfDefine>容器实现不同的配置
3.1.7 httpd命令行参数
3.2 监控Apache
3.2.1 Apache自带的Web监视器
3.2.2 使用第三方的工具来监控Apache
3.3 常见问题解答(FAQ)
3.3.1 Apache启动后通过浏览器访问提示:“您没有权限访问此服务器上的/”
3.3.2 启动Apache时提示的常见错误

第4章 Apache模块
4.1 模块的类型
4.2 使用apxs编译安装模块
4.3 使用静态链接模块
4.4 使用动态链接模块
4.4.1 Apache 2.x动态链接模块使用方法
4.4.2 Apache 1.3.x动态链接模块使用方法
4.5 为Apache增加新模块
4.5.1 Perl
4.5.2 PHP
4.6 常见问题解答(FAQ)
4.6.1 以静态的方式编译PHP到Apache 1.3.x中
4.6.2 能否将PHP静态编译到Apache 2.x中
4.6.3 如何测试已经安装的PHP
4.6.4 编译了mod_perl模块,但是Apache无法加载它
4.6.5 编译mod_perl模块出错
4.6.6 如何测试Apache的CGI是否支持Perl
4.6.7 如何测试mod_perl已经启动
4.6.8 测试mod_perl是否工作
4.6.9 使用mod_perl来加速Perl脚本

第5章 配置Apache
5.1 http.conf文件
5.1.1 主服务器部分
5.1.2 容器部分
5.1.3 服务器扩展部分
5.2 .htaccess文件
5.2.1 映射用户到目录
5.2.2 目录的索引
5.2.3 GUI配置工具
5.3 常见问题解答(FAQ)
5.3.1 使用httpd -D来指定ServerRoot目录
5.3.2 Port 和Bindaddress指令
5.3.3 容器的处理顺序
5.3.4 目录、文件、网络容器的安全问题
5.3.5 关于Perl和PHP指令
5.3.6 .htaccess文件中写入了配置指令没有生效
5.3.7 使用suEXEC
5.3.8 将目录放入高速缓存中

第6章 虚拟主机配置
6.1 基于名字的虚拟主机
6.2 基于IP的虚拟主机
6.3 动态虚拟主机
6.3.1 使用vhost_alias_module模块建立动态虚拟主机
6.3.2 使用rewrite_module模块建立大量的虚拟主机
6.4 常见问题解答(FAQ)
6.4.1 使用IPv6的地址配置虚拟主机
6.4.2 取消默认主机
6.4.3 使用ServerAlias指令定义的网站别名无法访问
6.4.4 如何支持古老的浏览器
6.4.5 为虚拟主机使用日志
6.4.6 合并虚拟主机日志
6.4.7 在多个地址上显示同样的内容
6.4.8 让虚拟主机支持SSL
6.4.9 使用虚拟主机的建议

第7章 CGI、FastCGI、SSI
7.1 CGI
7.1.1 mod_cgi模块
7.1.2 mod_actions模块
7.1.3 CGI环境变量
7.1.4 修改CGI、SSI环境变量
7.1.5 mod_cgid模块
7.2 FastCGI
7.2.1 安装mod_fcgid
7.2.2 配置mod_fcgid
7.2.3 mod_fcgid模块指令
7.3 SSI
7.3.1 启用SSI支持
7.3.2 SSI标记符
7.3.3 流控制
7.3.4 其他SSI指令
7.4 常见问题解答(FAQ)
7.4.1 很多人使用Perl来编写CGI脚本,我是否也需要使用Perl
7.4.2 使用fixconf.sed替换指令时遇到错误
7.4.3 为什么Perl脚本无法执行
7.4.4 安装了Perl的FCGI模块,但脚本还是无法运行
7.4.5 为什么Apache服务器没有为SSI页面发送最后的修改日期
7.4.6 让Apache对特定的HTML类型文件进行SSI解析
7.4.7 Apache所带的SSI功能太少了,如何得到更多功能的SSI
7.4.8 不在由ScriptAlias所定义的目录下使用CGI脚本
7.4.9 如何在Windows系统中使用CGI
7.4.10 为特定的文件调用CGI处理器

第8章 别名和重定向
8.1 mod_alias模块
8.1.1 别名的定义
8.1.2 重定向的定义
8.2 mod_rewrite模块
8.2.1 工作流程
8.2.2 规则集
8.2.3 重写指令
8.3 常见问题解答(FAQ)
8.3.1 如何提高mod_rewrite模块的工作效率
8.3.2 如何完全禁止重写日志
8.3.3 目录级改写中的查询字符串
8.3.4 让用户首先访问某一目录
8.3.5 规范化URL
8.3.6 将多个URL重定向到一个位置
8.3.7 将多个CGI目录重定向到一个CGI目录中
8.3.8 无视URL中所有的大小写区分
8.3.9 将部分地址的URL重定向到SSL服务器上

第9章 代理服务器与缓存
9.1 代理服务器
9.1.1 正向代理
9.1.2 逆向代理
9.1.3 Apache的代理模块
9.1.4 Apache的其他代理模块
9.2 缓存模块
9.2.1 mod_cache模块
9.2.2 mod_mem_cache模块
9.2.3 mod_disk_cache模块
9.2.4 维护磁盘缓存区
9.2.5 mod_file_cache的文件缓存支持
9.3 常见问题解答(FAQ)
9.3.1 为什么需要使用缓存模块
9.3.2 缓存多个文件
9.3.3 缓存调用了CGI程序的页面,但还是很慢
9.3.4 使用其他服务器作为图片服务器
9.3.5 禁止代理服务器转发电子邮件
9.3.6 在代理服务器中禁止所指定的网站
9.3.7 htcacheclean的使用

第10章 数据库连接管理
10.1 mod_dbd模块
10.2 mod_ldap模块
10.3 常见问题解答(FAQ)
10.3.1 在启动Apache时遇到DBD:Can't load driver file apr_dbd_ pgsql.so错误
10.3.2 出现DBD: Can't connect to pgsql,FATAL:sorry,too many clients already/n错误
10.3.3 对LDAP缓冲区的监控

第11章 Apache日志控制
11.1 错误日志
11.1.1 LogLevel指令:指定记录错误级别
11.1.2 ErrorLog指令:定义错误文件的位置
11.2 访问日志
11.2.1 普通日志 (公共日志 Common Log Format、CLF)
11.2.2 扩充普通日志(复合日志 Extended Log File Format、ECLF)

 

关于《.htaccess》文件的配置

在苹果电脑中,可以直接以".htaccess"为文件名的文件存储;但在windows中需要将Apache相关的代码存到txt文件中,再另存为".htaccess"即可。

“.htaccess”文件的内容如下:

1 <IfModule mod_rewrite.c>
2 RewriteEngine on
3 RewriteCond %{REQUEST_FILENAME} !-d
4 RewriteCond %{REQUEST_FILENAME} !-f
5 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
6 </IfModule>
View Code

 

今天本地调试PHP程序,用到了.htaccess,而默认配置里面开启.htaccess,在网上找到了开启.htaccess的可行方法,供朋友们借鉴。(开启的我他的方法不行,查找了一下AllowOverride None全部的都给换成AllowOverride All就了,原因不明,记得修改完httpd.conf以后一定要重启下apache才的哦~ )
1 . 如何让的本地APACHE器.htaccess
如何让的本地APACHE器&quot;.htaccess&quot;呢?其实只要简朴修改一下apache的httpd.conf设置就让APACHE.htaccess了,来看看操作

打开httpd.conf(在那里? APACHE目录的CONF目录里面),用文本编纂器打开后,查找
(1)
Options FollowSymLinks
AllowOverride None

改为
Options FollowSymLinks
AllowOverride All

(2)去掉下面的注释
LoadModule rewrite_module modules/mod_rewrite.so

就可以了 ;然后再重启Apache服务器即使用了。

 

2. htaccess 写法
  Apache中的.htaccess(或者”分布式配置”了针对目录改变配置的方法,即,在特定的文档目录中放置包含或多个指令的,以作用于此目录及其子目录。作为,所能的命令受到限制。***Apache的AllowOverride指令来设置。

  子目录中的指令会笼盖更高级目录或者主器配置中的指令。

  .htaccess必需以ASCII模式上传,最好将其权限设置为644。

  错误文档的定位

  常用的客户端哀求错误返回代码:
  401 Authorization Required
  403 Forbidden
  404 Not Found
  405 Method Not Allowed
  408 Request Timed Out
  411 Content Length Required
  412 Precondition Failed
  413 Request Entity Too Long
  414 Request URI Too Long
  415 Unsupported Media Type

  常见的器错误返回代码:
  500 Internal Server Error

  利用.htaccess指定事先制作好的错误提醒页面。一般下,人们专门设立目录,例如errors放置页面。然后再.htaccess中,加入如下的指令:

  ErrorDocument 404 /errors/notfound.html
  ErrorDocument 500 /errors/internalerror.html

  一条指令一行。上述第一条指令的意思是对于404,也找到所的文档的得显示页面为/errors目录下的notfound.html页面。不难看出语法格局为:

  ErrorDocument 错误代码 /目录名/名.扩展名

  所提示的很少的话,不必专门制作页面,直接在指令中HTML号了,例如下面例子:

  ErrorDocument 401 “你权限访问该页面,请抛却!”

  文档访问的密码保护

  要利用.htaccess对某个目录下的文档设定访问和对应的密码,首先要做的是生成.htpasswd的文本文档,例如:

  zheng:y4E7Ep8e7EYV

  这里密码经由加密,找些工具将密码加密成.htaccess的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。

  有了授权文档,在.htaccess中加入如下指令了:

  AuthUserFile .htpasswd的器目录
  AuthGroupFile /dev/null (授权访问的目录)
  AuthName EnterPassword
  AuthType Basic (授权类型)

  是的主人,应该处处为着想。 —— 雷锋
  require user wsabstract (允许访问的,但愿表中都允许, require valid-user)

  注,括号部门为学习添加的注释

  拒绝来自某个IP的访问

  我不想某个政府部门访问到站点的,那.htaccess中加入该部门的IP而将它们拒绝在外。

  例如:

  order allow,deny
  deny from 210.10.56.32
  deny from 219.5.45.
  allow from all

  第二行拒绝某个IP,第三行拒绝某个IP段,也219.5.45.0~219.2.45.255

  想要拒绝人?用deny from all好了。不止用IP,也用域名来设定。

  保护.htaccess文档

  在.htaccess来设置目录的密码保护时,它包含了密码的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的。虽然用其他做到这点,好比文档的权限。不外,.htaccess本身也能做到,只需加入如下的指令:

  order allow,deny
  deny from all

  URL转向

  可能对重新规划,将文档了迁移,或者更改了目录。这,来自搜索引擎或者其他链接过来的访问就可能犯错。这种下,如下指令来完成旧的URL自动转向到新的:

  Redirect /旧目录/旧文档名 新文档的

  或者整个目录的转向:

  Redirect 旧目录 新目录

  改变缺省的首页

  一般下缺省的首页名有default、index等。不外,有些目录中没出缺省,而是某个特定的名,好比在pmwiki中是 pmwiki.php。这种下,要记住名来访问很麻烦。在.htaccess中等闲的设置新的缺省名:

  DirectoryIndex 新的缺省名

  也列出多个,顺序表明它们之间的优先级别,例如:

  DirectoryIndex filename.html index.cgi index.pl default.htm

  防止盗链

  不喜欢别人在的网页上连接的、文档的话,也htaccess的指令来做到。

  所的指令如下:

  RewriteEngine on
  RewriteCond %{ HTTP_REFERER } !^$
  RewriteCond %{ HTTP_REFERER } !^http://(www.)?mydomain.com/.*$ [NC]
  RewriteRule .(gif&line;jpg)$ - [F]

  觉得让别人的页面开个天窗不好看,那用一张来代替:

  RewriteEngine on
  RewriteCond %{ HTTP_REFERER } !^$
  RewriteCond %{ HTTP_REFERER } !^http://(www.)?mydomain.com/.*$ [NC]
  RewriteRule .(gif&line;jpg)$ http://www.mydomain.com/替代名 [R,L]

其它补充:
在给出如何配置Apache支持.htaccess文件之前,首先申明一下:使用.htaccess文件,会降低httpd服务器的一点性能。

配置方法
找到Apache的httpd.conf配置文件,编辑器打开。

//找到
<Directory />
  Options FollowSymLinks
  AllowOverride None
</Directory>

//修改为

<Directory />
  Options FollowSymLinks
  AllowOverride All
</Directory>

//就可以了

/*
如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。
例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:
*/
AccessFileName .config  通常,.htaccess文件使用的配置语法和主配置文件一样。AllowOverride指令按类别决定了.htaccess文件中哪些指令才是有效的。

(不)使用.htaccess文件的场合
  一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,其实并不是这样,把用户认证写在主配置文件中是完全可行的,而且是一种很好的方法。
  .htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。
  虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的段中,而且更高效。
避免使用.htaccess文件有两个主要原因。
  首先是性能。如果AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。
  还有,Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用,所以,如果请求/ctusky/ctu/sky中的页面,Apache必须查找以下文件:

/.htaccess
/ctusky/.htaccess
/ctusky/ctu/.htaccess
/ctusky/ctu/sky/.htaccess  一共就要访问4个额外的文件,就算这些文件都不存在,这也是本文开始说会影响服务器的一点性能的原因。
  其次是安全。这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。

.htaccess生成伪静态:

伪静态页面生成教程mod_rewrite

 

mod_rewrite 详解

mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面。下面我详细说说它的使用方法!对初学者很有用的哦!

1.检测Apache是否支持mod_rewrite

       通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设 置。如果没有开启“mod_rewrite”,则打开目录 您的apache安装目录“/apache/conf/” 下的 httpd.conf 文件,通过Ctrl+F查找到“LoadModule rewrite_module”,将前面的”#”号删除即可。如果没有查找到,则到“LoadModule” 区域,在最后一行加入“LoadModule rewrite_module modules/mod_rewrite.so”(必选独占一行),然后重启apache服务器即可。

      

2.让apache服务器支持.htaccess

如何让自己的本地APACHE服务器支持”.htaccess”呢?其实只要简单修改一下 apache的httpd.conf设置就可以让APACHE支 持.htaccess了。打开httpd.conf文件(在那里? APACHE目录的CONF目录里面),用文本编辑器打开后,查找

<Directory />

Options FollowSymLinks

AllowOverride None

</Directory>

改为

<Directory />

Options FollowSymLinks

AllowOverride All

</Directory>

就可以了。

3.建立.htaccess 文件

如果是在windows平台下,刚开始还真不知道怎么建立”.htaccess”文件,因为 这个文件实际上没有文件名,仅仅只有扩展名,通过普通方式是无法建立这个文件的,别着急,马上告诉你三种方法:三种方法都是先建立一个 htaccess.txt的文本文件(当然,这个文本文件的名字你可以随便取),然后有三种方式给这个文件重命名:

(1)用记事本 打开,点击文件–另存为,在文件名窗口输入”.htaccess”,注意是整个绿色部分,也就是包含英文引号,然后点击保存就行了。

(2)进入cmd命令 窗口,通过cd切换当刚建立htaccess.txt文件的文件夹,然后输入命令:rename htaccess.txt .htaccess ,然后点击键盘Enter键即可。

(3)通过ftp连接htaccess.txt所在文件夹,通过ftp软件重命名。

4.rewrite规则学习

我们新建一个.htaccess文件之后,就在里面写入以下内容:

RewriteEngine on #rewriteengine为重写引擎开关on为开启off为关闭

RewriteRule ([0-9]{1,})$ index.php?id=$1

我讲解一下RewriteRule:RewriteRule是重写规则,支持正则表达式的,上面的([0-9]{1,})是指由数字组成的,$是结束标志,说明是以数字结束!

好吧,现在我们可以实现伪静态页面了,写下一下的规则:

RewriteEngine on

RewriteRule ([a-zA-Z]{1,})-([0-9]{1,})\.html$ index.php?action=$1&id=$2

([a-zA-Z]{1,})-([0-9]{1,})\.html$是规则,index.php?action=$1&id=$2是要替换的格式,$1代表第一个括号匹配的值,$2代表第二个,如此类推!!

我们写一个处理的PHP脚本:

复制PHP内容到剪贴板

PHP代码:

index.php

<?php

echo '你的Action是:' . $_GET['action'];

echo '<br/>';

echo '你的ID是:' . $_GET['id'];

?>

好了,我们现在在浏览器中输入:

localhost/view-12.html

输出的是:

你的Action是:view

你的ID是:12

 

posted on 2014-05-03 17:19  lbsf  阅读(217)  评论(0)    收藏  举报

导航