网页服务器
在你开始前
了解这些教程可以教给您什么以及如何从中获得最大收益。
关于本系列
Linux Professional Institute (LPI)在两个级别上对Linux系统管理员进行认证: 初级 (也称为“认证级别1”)和中级 (也称为“认证级别2”)。 要获得1级认证,您必须通过101和102考试; 要达到2级认证,您必须通过201和202考试。
developerWorks提供了教程,以帮助您为四门考试中的每门考试做准备。 每个考试涵盖几个主题,并且每个主题在developerWorks上都有一个相应的自学教程。 对于LPI 202考试,这七个主题和相应的developerWorks教程为:
LPI考试202主题 | developerWorks教程 | 教程总结 |
---|---|---|
主题205 | LPI 202考试准备(主题205): 网络配置 | 了解如何从硬件层(通常是以太网,调制解调器,ISDN或802.11)到网络地址的路由配置基本的TCP / IP网络。 |
主题206 | LPI 202考试准备(主题206): 邮件和新闻 | 了解如何将Linux用作邮件服务器和新闻服务器。 了解有关NNTP协议的邮件传输,本地邮件筛选,邮件列表维护软件和服务器软件的信息。 |
主题207 | LPI 202考试准备(主题207): 域名解析 | 了解如何主要使用BIND将Linux用作DNS服务器。 了解如何执行基本的BIND配置,管理DNS区域以及保护DNS服务器。 |
主题208 | LPI 202考试准备(主题208): 网页服务 | (本教程)学习如何安装和配置Apache Web服务器,并学习如何实现Squid代理服务器。 请参阅下面的详细目标 。 |
主题210 | LPI 202考试准备(主题210): 网络客户端管理 | 快来了 |
主题212 | LPI 202考试准备(主题212): 系统安全 | 快来了 |
主题214 | LPI 202考试准备(主题214): 网络故障排除 | 快来了 |
要开始准备1级认证,请参阅LPI 101考试的developerWorks教程 。 要准备认证级别2的其他考试,请参阅LPI考试201的developerWorks教程 。 阅读有关整个developerWorks LPI教程的更多信息。
Linux Professional Institute不特别认可任何第三方考试准备材料或技术。 有关详细信息,请联系info@lpi.org 。
关于本教程
欢迎来到“ Web服务”,这是涵盖Linux上的中间网络管理的七个教程中的第四个教程。 在本教程中,您将学习如何配置和运行Apache HTTP服务器和Squid Web代理缓存。
与developerWorks 201和202系列中的其他教程一样,本教程旨在作为学习指南和考试准备的切入点,而不是作为该主题的完整文档。 鼓励读者查阅LPI的详细目标清单,并根据需要用其他材料补充此处提供的信息。
本教程根据该主题的LPI目标进行组织。 粗略地说,对于体重较高的目标,应在考试中提出更多问题。
LPI考试目标 | 客观体重 | 客观总结 |
---|---|---|
2.208.1 实施Web服务器 | 重量2 | 安装和配置Web服务器。 此目标包括监视服务器的负载和性能,限制客户端用户访问,配置对脚本语言作为模块的支持以及设置客户端用户身份验证。 还包括配置服务器选项以限制资源使用的功能。 |
2.208.2 维护Web服务器 | 重量2 | 配置Web服务器以使用虚拟主机,安全套接字层(SSL)并自定义文件访问。 |
2.208.3 实施代理服务器 | 重量2 | 安装和配置代理服务器,包括访问策略,身份验证和资源使用情况。 |
先决条件
为了从本教程中获得最大收益,您应该已经具有Linux的基本知识和一个运行中的Linux系统,您可以在该系统上练习本教程中介绍的命令。
关于Apache和Squid
Apache Web服务器
Apache是整个Internet上主要的Web服务器。 在Linux服务器中,它更为重要。 还有更多的专用Web服务器可用(某些Web服务器可为特定任务提供更高的性能),但是Apache始终是默认选择。
Apache已预先安装在大多数Linux发行版中,并且在初始化期间启动后通常已经运行,即使您没有专门配置Web服务器。 如果未安装Apache,请使用发行版的常规安装系统进行安装,或者从Apache HTTP Server Project 下载最新的HTTP服务器 。 模块提供了许多额外的功能,许多功能由Apache本身分发,其他功能则可从第三方获得。
尽管自2001年以来最新的Apache一直处于2.x级别,但Apache 1.3.x仍在广泛使用,并且继续维护1.3.x系列以进行错误修复和安全更新。 1.3和2.x之间存在一些细微的配置差异。 一些模块可用于1.3,而不适用于2.x。 截至本教程为止,最新版本为1.3.34(稳定),2.0.55(稳定)和2.1.9(测试版)。
通常,新服务器应使用2.x系列中的最新稳定版本。 除非您特别需要一个不寻常的旧模块,否则2.x会提供良好的稳定性,更多的功能以及整体上更好的性能(在某些任务中,例如在PHP支持中,1.3仍然会表现更好)。 展望未来,肯定会在2.x中比在1.3.x中更好地支持新功能。
鱿鱼代理服务器
Squid是用于Web客户端的代理缓存服务器,支持HTTP,FTP,TLS,SSL和HTTPS协议。 通过在本地网络上运行高速缓存,或者至少在比查询的资源更近的网络上运行高速缓存,可以提高速度并减少网络带宽。 当同一Squid服务器所服务的机器多次请求同一资源时,该资源是从服务器本地副本传递的,而不是要求该请求通过多个网络路由器发送出去,并可能减慢或过载目标服务器。
您可以将Squid配置为必须在每个Web客户端(浏览器)中配置的显式代理,也可以将其配置为从LAN拦截所有Web请求并缓存所有此类流量。 您可以为Squid配置各种选项,这些选项涉及保留页面多长时间以及在什么条件下保持页面高速缓存。
其他资源
与大多数Linux工具一样,检查所讨论的任何实用程序的手册页总是很有用的。 版本和开关可能会在实用程序或内核版本之间或使用不同的Linux发行版进行更改。 有关更深入的信息,Linux文档项目提供了许多有用的文档,尤其是其HOWTO。 已经出版了许多有关Linux网络的书籍。 我发现Craig Hunt撰写的O'Reilly的TCP / IP网络管理非常有帮助。 (请参阅相关主题在本教程后面的链接。)
关于使用Apache的许多好书。 有些涉及一般管理,而另一些涉及Apache的特定模块或特殊配置。 检查您最喜欢的书商以获取一系列可用的书名。
实施Web服务器
一群守护程序
启动Apache类似于启动任何其他守护程序。 通常,您希望将其启动放在系统初始化脚本中,但是原则上您可以随时启动Apache。 在大多数系统上,Apache服务器称为httpd ,尽管它可以改为称为apache2 。 该服务器可能安装在/ usr / sbin /中,但是其他位置也是可能的,具体取决于发行版和服务器的安装方式。
大多数时候,您将不带任何选项启动Apache,但是-d serverroot
和-f config
选项值得牢记。 首先,您可以在本地磁盘上指定将要提供内容的位置。 第二个让您指定非默认配置文件。 配置文件可以使用ServerRoot
指令覆盖-f
选项(大多数情况下这样做)。 默认情况下,配置文件为apache2.conf或httpd.conf,具体取决于编译选项。 这些文件可能位于/ etc / apache2 /,/ etc / apache /,/ etc / httpd / conf /,/ etc / httpd / apache / conf或其他一些位置,具体取决于版本,Linux发行版以及安装方式或编译的Apache。 检查man apache2
或man httpd
应该为您提供系统特定的详细信息。
与其他服务器相比,Apache守护程序是不常见的,因为它通常会创建几个自身的运行副本。 主要副本只是生成其他副本,而这些次要副本则为实际的传入请求提供服务。 具有多个运行中副本的目的是充当可能成束到达的请求的“池”。 根据几个配置参数,可以根据需要启动该守护程序的其他副本。 主副本通常以root用户身份运行,而其他副本出于安全原因以受限用户身份运行。 例如:
清单1. Apache的多个运行副本的众多面Kong
# ps axu | grep apache2 root 6620 Ss Nov12 0:00 /usr/sbin/apache2 -k start -DSSL www-data 6621 S Nov12 0:00 /usr/sbin/apache2 -k start -DSSL www-data 6622 Sl Nov12 0:00 /usr/sbin/apache2 -k start -DSSL www-data 6624 Sl Nov12 0:00 /usr/sbin/apache2 -k start -DSSL dqm 313 S+ 03:44 0:00 man apache2 root 637 S+ 03:59 0:00 grep apache2
在许多系统上,受限用户将是nobody 。 在清单1中,它是www-data
。
包括配置文件
如前所述,Apache的行为受到其配置文件中指令的影响。 对于Apache2系统,主配置文件可能位于/etc/apache2/apache2.conf,但是该文件通常包含多个Include
语句,以通过通配符模式从其他文件添加配置信息。 总体而言,Apache配置可能包含数百个指令和选项(本教程中未特别记录)。
尤其可能包含一些文件。 您可能会在httpd.conf中看到“用户”设置,以利用以前使用该名称的Apache 1.3配置文件。 虚拟主机通常在单独的配置文件中指定,并在通配符上进行匹配,如下所示:
清单2.指定虚拟主机
# Include the virtual host configurations: Include /etc/apache2/sites-enabled/[^.#]*
在Apache 2.x中,模块通常也要在单独的配置文件中指定(通常在1.3.x中的同一文件中指定)。 例如,我的系统包括:
清单3.从/etc/apache2/apache2.conf
# Include module configuration: Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf
实际上,在正在运行的Apache服务器中使用模块需要在配置文件中执行两个步骤,即加载并启用它:
清单4.加载可选的Apache模块
# cat /etc/apache2/mods-enabled/userdir.load LoadModule userdir_module /usr/lib/apache2/modules/mod_userdir.so # cat /etc/apache2/mods-enabled/userdir.conf <IfModule mod_userdir.c> UserDir public_html UserDir disabled root <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec </Directory> </IfModule>
Include
行中的通配符会将所有.load和.conf文件插入/ etc / apache2 / mods-enabled /目录中。
注意一般的模式:基本指令是带有一些选项的单行命令。 更复杂的指令使用类似XML的打开/关闭标签来嵌套命令。 您只需要知道每个指令是单行样式还是打开/关闭样式-您不能随意在样式中进行选择。
日志文件
一类重要的配置指令涉及Apache操作的日志记录。 您可以维护Apache操作的不同类型的信息和详细程度。 保留错误日志始终是一个好主意。 您可以使用单个指令指定它:
清单5.指定错误日志
# Global error log. ErrorLog /var/log/apache2/error.log
您可以自定义服务器访问,引荐来源和其他信息的其他日志,以适合您的个人设置。 记录操作由两个指令配置。 首先, LogFormat
指令使用一组特殊变量来指定日志文件中的内容。 第二, CustomLog
指令告诉Apache实际记录指定格式的事件。 您可以指定无限数量的格式,而不管是否实际使用每种格式。 这使您可以根据不断变化的需求打开和关闭日志记录详细信息。
LogFormat
中的变量类似于shell变量,但前导%
。 一些变量只有一个字母,而另一些变量的长名称括在方括号中,如清单6所示。
清单6. LogFormat变量
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined CustomLog /var/log/apache2/referer_log combined
有关变量列表,请查阅书籍或Apache完整文档。 常用的包括%h
代表请求客户端的IP地址, %t
代表请求的日期时间, %>s
代表HTTP状态代码以及拼写错误的%{Referer}
代表指向所服务页面的引荐网站。
LogFormat
和CustomLog
指令中使用的名称是任意的。 在清单6中,使用了combined
的名称,但也可能是myfoobarlog
。 但是,一些名称是常用的,并随示例配置文件一起提供,例如combined
, common
, referer
和agent
。 日志分析器工具通常直接支持这些特定格式。
维护Web服务器
虚拟主机,多宿主和按目录的选项
Apache服务器提供的各个目录可能具有其自己的配置选项。 但是,主要配置可能会限制可以在本地配置的选项。 如果需要按目录配置,请使用AccessFileName
指令,并通常指定.htaccess的本地配置文件名。 本地配置的限制在<Directory>
中指定<Directory>
指示。 例如:
清单7.目录指令的示例
#Let's have some Icons, shall we? Alias /icons/ "/usr/share/apache2/icons/" <Directory "/usr/share/apache2/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory>
Apache通常与每个目录选项结合使用,可以为虚拟主机提供服务。 可以从同一个Apache进程提供多个域名,每个域名都访问一个适当的目录。 您可以使用<VirtualHost>
定义虚拟主机<VirtualHost>
指示; 将配置文件放置在包含的目录中,例如/ etc / apache2 / sites-enabled /或主配置文件中。 例如,您可以指定:
清单8.配置虚拟主机
<VirtualHost "foo.example.com"> ServerAdmin webmaster@foo.example.com DocumentRoot /var/www/foo ServerName foo.example.com <Directory /var/www/foo> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> CustomLog /var/log/apache2/foo_access.log combined </VirtualHost> <VirtualHost "bar.example.org"> DocumentRoot /var/www/bar ServerName bar.example.org </VirtualHost> <VirtualHost *> DocumentRoot /var/www </VirtualHost>
最后的*
选项将拾取所有未定向到明确指定的名称之一的HTTP请求(例如,通过IP地址寻址或作为也解析为服务器计算机的未指定符号域寻址的HTTP请求)。 为了使虚拟域正常工作,DNS必须使用CNAME记录定义每个别名。
多宿主服务器听起来类似于虚拟主机,但是概念不同。 使用多宿主 ,您可以指定计算机连接到的IP地址,以允许Web请求。 例如,您可能只提供对本地LAN的HTTP访问,而不提供对外部世界的HTTP访问。 如果您指定要侦听的地址,则可能还会指示非默认端口。 BindAddress
的默认值为*
,这意味着在可以访问服务器的每个IP地址上接受请求。 一个混合的示例可能看起来像:
清单9.配置多宿主
BindAddress 192.168.2.2 Listen 192.168.2.2:8000 Listen 64.41.64.172:8080
在这种情况下,我们将在默认端口80和特殊端口8000上接受来自本地LAN(使用192.168.2.2地址)的所有客户端请求。此Apache安装还将监视来自WAN地址的客户端HTTP请求,但是仅在端口8080上。
限制网络访问
您可以使用<Directory>
目录中的Order
, Allow from
和Deny from
命令来启用按目录服务器的访问<Directory>
指示。 可以通过完整或部分主机名或IP地址来指定拒绝或允许的地址。 Order
使您可以在接受列表和拒绝列表之间设置优先级。
在许多情况下,您需要比仅通过允许特定主机访问Web服务器所能获得的更好的微调控制。 要启用用户登录要求,请再次在<Directory>
使用Auth*
系列命令<Directory>
指示。 例如,要设置基本身份验证,可以使用清单10中所示的指令。
清单10.配置基本身份验证
<Directory "/var/www/baz"> AuthName "Baz" AuthType Basic AuthUserFile /etc/apache2/http.passwords AuthGroupFile /etc/apache2/http.groups Require john jill sally bob </Directory>
您还可以在每个目录的.htaccess文件中指定基本身份验证。 摘要式身份验证比基本身份验证更安全,但摘要式身份验证在浏览器中的实现不太广泛。 但是,无论如何,使用SSL层可以更好地解决Basic的弱点(它以明文形式传输密码)。
mod_ssl
模块提供对Web流量的SSL加密的支持。 使用SSL时,服务器和客户端之间传输的数据将使用动态协商的密码进行加密,该密码可防止拦截。 所有主要的浏览器都支持SSL。 有关使用mod_ssl
配置Apache 2.x的更多信息,请参阅Apache网站上的描述( 有关链接,请参阅mod_ssl
)。
实施代理服务器
安装并运行Squid
在大多数发行版中,可以使用常规安装过程来安装Squid。 从Squid Web代理缓存网站获取Squid的源版本(请参阅参考资料中的链接)。 从源代码构建使用基本的./configure; make; make install
./configure; make; make install
./configure; make; make install
顺序。
安装后,您可以简单地以根用户/ usr / sbin / squid(或您的发行版使用的任何位置,可能是/ usr / local / sbin /)运行它。 当然,要做很多有用的事情,您将需要在/etc/squid/squid.conf、/usr/local/squid/etc/squid.conf或系统确切位于squid.conf的任何位置配置Squid配置文件。 与几乎所有守护程序一样,您可以使用其他配置文件,在这种情况下,请使用-f
选项。
端口,IP地址,http_access和ACL
Squid最重要的配置选项是您选择的http_port
选项。 您可以监视所需的任何端口,可以选择将每个端口附加到特定的IP地址或主机名。 Squid的默认端口是3128,允许任何连接到Squid服务器的IP地址。 要仅为局域网缓存,请改为指定本地IP地址,如下所示:
清单11.仅为LAN缓存Squid
# default (disabled) # http_port 3128 # LAN only http_port 192.168.2.2:3128
您也可以使用icp_port
和htcp_port
通过其他Squid服务器启用缓存。 IPC和HTCP协议用于缓存之间进行通信,而不是通过Web服务器和客户端本身进行通信。 要缓存多播,请使用mcast_groups
。
为了让客户端连接到您的Squid服务器,您需要授予他们这样做的权限。 与Web服务器不同,Squid并不完全慷慨地使用其资源。 在简单的情况下,我们可以仅使用几个子网/网络掩码或CIDR(无类Internet域路由)模式来控制权限:
清单12.简单的Squid访问权限
http_access deny 10.0.1.0/255.255.255.0 http_access allow 10.0.0.0/8 icp_access allow 10.0.0.0/8
您可以使用acl
指令来命名访问控制列表(ACL)。 您可以命名src
ACL,它们仅指定清单12中的地址范围,但是您也可以创建其他类型的ACL。 例如:
清单13.调整后的访问权限
acl mynetwork src 192.168/16 acl asp urlpath_regex \.asp$ acl bad_ports port 70 873 acl javascript rep_mime_type -i ^application/x-javascript$ # what HTTP access to allow classes http_access deny asp # don't cache active server pages http_access deny bad_ports # don't cache gopher or rsync http_access deny javascript # don't cache javascript content http_access allow mynetwork # allow LAN everything not denied
清单13仅显示了可用ACL类型的一小部分。 有关其他示例,请参见squid.conf示例。 或查看《 Squid用户指南》中的访问控制文档(第6章)( 有关链接,请参阅参考资料 )。
在清单13中,我们决定不缓存以.asp结尾的URL(可能是动态内容),不缓存端口70和873,也不缓存返回JavaScript对象。 除了被拒绝的内容外,LAN上的计算机(给定的/ 16范围)将缓存其所有请求。 请注意,定义的每个ACL都有一个唯一但任意的名称(使用有意义的名称; Squid不保留名称)。
缓存模式
运行Squid的最简单方法是在代理模式下。 如果这样做,则必须将客户端明确配置为使用缓存。 Web浏览器客户端具有配置屏幕,允许他们指定代理地址和端口,而不是直接HTTP连接。 此设置使配置Squid非常简单,但如果客户端希望从Squid缓存中受益,则可以使客户端进行一些设置工作。
您还可以将Squid配置为作为透明缓存运行。 为此,您需要配置基于策略的路由(在Squid本身之外,使用ipchains
或ipfilter
)或将Squid服务器用作网关。 假设您可以通过Squid服务器定向外部请求,则需要对Squid进行如下配置。 您可能需要使用--enable-ipf-transparent
选项重新编译Squid。 但是,在大多数Linux安装中,这应该已经可以了。 要为服务器配置透明缓存(一旦它获取了重定向的数据包),请将清单14之类的内容添加到squid.conf中:
清单14.配置Squid进行透明缓存
httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on
翻译自: https://www.ibm.com/developerworks/linux/tutorials/l-lpic2208/index.html
网页服务器