《Linux 应用基础教程--CH20_Apache动态站点课件》由会员分享,可在线阅读,更多相关《Linux 应用基础教程--CH20_Apache动态站点课件(50页珍藏版)》请在金锄头文库上搜索。
1、第20章Apache动态站点,主讲人: 梁如军 2011-05-05,本章内容要点,Linux下的脚本语言 常用的动态网站技术 Apache日志统计分析工具 LAMP的环境配置及应用,2020年9月14日,2,梁如军() Creative Commons License(BY-NC-SA),本章学习目标,熟悉常用的动态网站技术 掌握 Apache 的 CGI 配置 熟悉 Apache 的 FastCGI 配置 掌握 AWStats 的安装和配置 掌握 LAMP(PHP) 的安装和配置 学会安装配置常用的LAMP应用,2020年9月14日,3,梁如军() Creative Commons Lic
2、ense(BY-NC-SA),脚本语言与动态网站技术,2020年9月14日,4,梁如军() Creative Commons License(BY-NC-SA),Linux下的脚本语言,常用的脚本语言 Bash 系统必备 PHP 简明单纯 Perl 凝练晦涩 Python 优雅明晰 Ruby 精巧灵动 脚本语言的主要用途 系统管理的自动化 动态Web编程,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),5,CentOS 下的脚本语言,脚本语言的安装 CentOS 官方仓库提供了 Perl/Python/PHP/Ruby 可以使用 yum
3、安装 脚本语言的模块管理工具 PHP:pear、pecl Perl:cpan Python:easy_install或pip Ruby:gem,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),6,常用的动态网站技术,CGI Apache的第三方脚本语言模块 FastCGI,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),7,CGI 简介,CGI(Common Gateway Interface,通用网关接口) 是一个连接外部应用程序到 HTTP 服务器的标准 CGI 定义了 Web
4、服务器与外部内容生成程序(通常称为 CGI 脚本或 CGI 程序)之间交互的方法,即:一种基于浏览器的输入、在 Web 服务器上运行的程序方法,从而实现动态 Web 的功能,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),8,CGI 程序,CGI 程序可以用任何一种语言编写 只要这种语言具有标准输入、输出和环境变量。 例如:perl、python、ruby、php、bash、C 等 CGI 程序通常是挂平台的 可以运行在类 UNIX 和 Windows 等众多平台的服务器上 实现同一功能的程序在不同平台上可能会有细微差异,2020年9月1
5、4日,梁如军() Creative Commons License(BY-NC-SA),9,CGI 的工作原理,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),10,CGI 的处理步骤,Web 客户端通过网络把用户请求送到服务器 Web 服务器接收用户请求 GET 方法:利用环境变量 QUERY_STRING 接收 POST 方法:利用标准输入接收;环境变量CONTENT_LENGTH记录输入字符长度 Web 服务器交给 CGI 程序处理 CGI 程序把动态处理结果通过标准输出传送给 Web 服务器 服务器把最终的HTML页面送回到 We
6、b 客户端,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),11,Apache 与 CGI,Apache支持CGI的模块 mod_cgi(用于基于进程的 prefork MPM) mod_cgid(用于基于线程的 worker MPM) RHEL/CentOS下Apache默认加载了mod_cgi 配置 Apache 允许执行 CGI 程序有两种方法 将所有的 CGI 程序放在指定的目录中,并使用 ScriptAlias 指令声明 在任意目录中执行 CGI 程序,2020年9月14日,梁如军() Creative Commons Lice
7、nse(BY-NC-SA),12,ScriptAlias,/etc/httpd/conf/httpd.conf 里有如下的配置段 以 /cgi-bin/ 开头的资源都映射到 /var/www/cgi-bin/ 目录 URL为 http:/www.ls-al.me/cgi-bin/test.pl 的请求,Apache 会试图执行 /var/www/cgi-bin/test.pl 文件(CGI程序文件必须存在而且可执行),2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),13,ScriptAlias /cgi-bin/ /var/www/cgi
8、-bin/ AllowOverride None Options None Order allow,deny Allow from all ,创建CGI脚本并浏览测试,创建 /var/www/cgi-bin/test.pl 添加可执行权限并进行浏览测试,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),14,#!/usr/bin/perl print Content-type: text/htmlnn; print Hello, World. Perl“;,# chmod +x /var/www/cgi-bin/test.pl # elin
9、ks http:/www.ls-al.me/cgi-bin/test.pl # elinks http:/www.olabs.org/cgi-bin/test.pl # elinks ,为虚拟主机配置ScriptAlias,在 VirtualHost 容器中配置 ScriptAlias 指令,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),15, ServerName www.olabs.org DocumentRoot /var/www/vhosts/olabs.org/htdocs/ ScriptAlias /cgi-bin/ /va
10、r/www/vhosts/olabs.org/cgi-bin/ AllowOverride None Options None Order allow,deny Allow from all ,ScriptAlias说明,ScriptAlias指令除了可以映射目录之外,还可以直接映射CGI程序 例如 ScriptAlias /cgit /var/www/cgi-bin/cgit /var/www/cgi-bin/cgit 是一个CGI程序 当访问 http:/xxx.xxx.xxx/cgit 时将直接执行 /var/www/cgi-bin/cgit 程序,2020年9月14日,梁如军() Cr
11、eative Commons License(BY-NC-SA),16,在任意目录中执行 CGI 程序,配置方法 用 AddHandler 或 SetHandler 指令激活 cgi-script 处理器 在目录容器的 Options 指令中启用 ExecCGI 选项 AddHandler / SetHandler 指令 AddHandler cgi-script .cgi .pl 用于在文件扩展名与特定的处理器之间建立映射 告诉服务器哪些文件是 CGI 程序文件,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),17,在任意目录中执行 C
12、GI 程序配置举例,/etc/httpd/conf.d/git.conf 使用别名将 http:/xxx.xxx.xxx/git 的访问映射到磁盘的 /var/www/git 目录 允许执行 /var/www/git 目录下的后缀名为 .cgi 的程序,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),18,Alias /git /var/www/git Options +ExecCGI AddHandler cgi-script .cgi ,CGI的优缺点,优点 安全性好 用C语言写的CGI程序,编译后的运行速度比脚本运行速度要快 缺点
13、需要开独立进程(fork-and-execute 模式)来处理用户请求,密集请求的情况下容易崩溃 维护成本比脚本语言高 通常CGI程序使用Perl编写,其语法相对复杂,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),19,解决CGI的低效率,为了适应密集请求(高负载)型的Web服务器 解决CGI的低执行效率的方法 使用Apache的第三方脚本语言模块 模块当 Apache 运行后就常驻内存 不会像 CGI 那样每次都要花费时间去 fork 一次 使用FastCGI技术 是一种常驻(Long-Live)型的 CGI 类似于系统守护进程 可以
14、一直执行着为来自服务器的请求提供服务 只要激活后,不会每次都要花费时间去 fork 一次,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),20,Apache的脚本语言模块,PHP:mod_php Perl:mod_perl http:/perl.apache.org/ Python:mod_python http:/www.modpython.org/ Ruby:mod_passenger ,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),21,FastCGI的优点,稳定性:Fast
15、CGI 是以独立的进程池运行来 CGI 单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行之 安全性:FastCGI 和宿主服务器完全独立 即使 FastCGI 僵死也不会导致服务器宕机 扩展性:FastCGI是一个中立的技术标准 可以支持任何语言写的处理程序,如:PHP、Perl、Python、Ruby、Java、C/C等,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),22,FastCGI的优点(续),高性能 FastCGI 将动态逻辑的处理从 Web 服务器中分离出来 大负荷的 I/O 处理还是留给宿主服务器 宿主服
16、务器可以一心一意作 I/O 处理 大量的图片等静态 I/O 处理完全不需要逻辑程序的参与 可以让 Web 服务器运行多个 FastCGI 应用程序的副本来提高性能 FastCGI 可以很有效地利用内存来作缓存来提高性能,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),23,Apache 与 FastCGI,Linux下常用的Web服务器均支持FastCGI Apache、Nginx、Lighttpd、Cherokee Apache使用 mod_fcgid 模块实现 由EPEL仓库的mod_fcgid包提供 配置 Apache 允许执行 FastCGI 程序 与允许执行 CGI 程序类似,2020年9月14日,梁如军() Creative Commons License(BY-NC-SA),24,ScriptAlias /fcgi-bin /var/www/fcgi-bin,AddHandler fastcgi-script .php .py .pl .fcgi Opti