使用Apache HTTPD配置基本Web服务器

1.1 安装Apache HTTP Server

Apache HTTP服务器,有时被其用户非正式地称为“Apache”,提供了一个完全可配置和可扩展的web服务器。它的功能可以通过模块和小段代码扩展到web服务器的框架并修改其功能。
在Red Hat Enterprise Linux 8上,Apache HTTP Server是由AppStream存储库中的httpd包提供的。当前版本是2.4.37。您可以直接安装该包,它会自动从httpd的默认模块流中获取它
[root@host ~]# yum install httpd
或者,您可以安装该模块流的特定配置文件。httpd模块支持三个配置文件:
- common:提供生产就绪部署(默认)
- minimal:提供可以运行Apache web服务器的最小软件包集
- devel:提供修改httpd所需的包
[root@host ~]# yum module install httpd:2.4/common
httpd包的依赖项之一是httpd-tools。该软件包包括管理工具,可以操作Apache密码映射和数据库,将Apache日志文件中的IP地址解析为主机名,并对web服务器进行基准测试和压力测试。
httpd-manual包在您的web服务器http://localhost/manual上安装Apache HTTP Server的文档。

1.2 配置Apache HTTP服务器

Apache HTTP Server读取它的配置如下:
- /etc/httpd/conf/httpd.conf 主配置文件。
- /etc/httpd/conf.d/,如果文件名以.conf结尾,则提供补充配置文件,这些文件包含在httpd.conf中。
- /etc/httpd/conf.modules.d/,如果文件名以.conf结尾,它提供了用于动态加载Apache模块的补充配置文件。
下面的示例是缺省httpd.conf文件的演示,其中删除了注释。如果只想启动一个基本的web服务器,不需要立即做任何改变。
httpd.conf配置文件每行包含一个指令。指令的参数由空格分隔。行尾的反斜杠字符(\)表示该指令在下一行继续。井号(#)右侧一行中的所有内容都是注释。默认情况下,指令会影响主服务器,除非您将它们嵌套在仅适用于部分服务器的部分指令中,例如<Directory>。
文件的第一部分设置了一些服务器操作的基本参数:

ServerRoot "/etc/httpd"  ① 
Listen 80 ② 
Include conf.modules.d/*.conf ③  
User apache  ④ 
Group apache ⑤ 
ServerAdmin root@localhost  ⑥
#①使用相对路径设置httpd用于存储配置中引用的任何文件的默认目录。
#②httpd侦听新TCP连接的端口。语法Listen 1.2.3.4:80或Listen [2001:db8::1]:80可以用来限制httpd为一个特定的IP地址。允许多个Listen指令,但不能重叠。
#③在配置的这一点上,按照文件名的顺序包含这些文件。这个特定的设置仅用于加载Apache模块。
#④httpd以根用户身份启动,但随后放弃以这个用户身份运行的特权,以提高安全性。
#⑤httpd作为这个组运行。
#⑥将此指令设置为有效的电子邮件地址,以帮助用户报告问题。不建议将此设置保留为默认的root@localhost。
文件的下一部分将设置应用到服务器的各个部分,影响如何从某些位置提供内容,等等。
<Directory />①
    AllowOverride none
    Require all denied
</Directory>
DocumentRoot "/var/www/html"②
<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>③
<Files ".ht*">
    Require all denied
</Files>④
#①<Directory>块设置了应用于指定目录及其子目录的配置指令。
#- Allowoverride none忽略任何放置在这些目录中的.htaccess文件来覆盖这些设置。将此设置设置为任何其他设置都会造成性能损失,以及可能的安全后果。
#- Require all denied导致web服务器拒绝提供来自此目录的内容,并返回一个HTTP/1.1 403 Forbidden错误给客户端。
#- Require all granted授权客户端访问此目录中的内容。在普通内容树之外的目录上设置此选项可能会带来安全隐患。
#- Options接受要为目录打开或关闭的选项列表。例如,如果目录被访问且没有index.html文件,Indexes选项将提供一个由目录内容列表组成的网页存在于该目录中。
#②网站所服务内容的基本目录。httpd必须能够读取这个目录,并且目录的<directory>块必须允许它提供内容。默认情况下是这样的。
#③如果Apache dir_module模块被加载(默认),那么应用这些指令。DirectoryIndex指令指定,如果一个URL被请求指向一个目录和一个index.html文件存在于该目录中,将该文件提供给客户端。
#④<Files>的工作方式类似于<Directory>块,但是应用于单个文件。在这种情况下,它阻止httpd提供敏感文件,如.htaccess和.htpasswd
下面的指令配置httpd日志如何访问页面和错误。
ErrorLog "logs/error_log"①
LogLevel warn
<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "logs/access_log" combined ② 
</IfModule>
#①将所有 httpd 错误记录到此⽂件中。路径是ServerRoot(/etc/httpd)⽬录:/etc/httpd/logs,同时也是软链接到/var/log/httpd
#②对网站的所有访问都记录在这里。CustomLog采用两个参数:日志文件和要使用的LogFormat。多种日志分析工具可以读取组合的预定义格式。
下面几个指令使目录能够运行 CGI 脚本来生成动态内容
<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>
最后几行配置web服务器可以为客户端提供内容的类型,以便客户端能够正确处理内容。最后一行加载/etc/httpd/conf/conf.d中的其他配置文件,它们可以覆盖前面的配置.
<IfModule mime_module>
    TypesConfig /etc/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
    MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf
#重要:可以使用apachectl configtest来检查Apache配置文件的语法。
1.2.1 从自定义文档根目录提供Web内容
DocumentRoot指令控制httpd使用哪个目录来包含它的web内容。默认设置为/var/www/html。出于各种原因,可能希望将默认设置更改为系统上的另一个位。如果这样做,请确保httpd可以访问新文档根目录的内容。

首先,确保常规文件系统权限允许apache用户或apache组读取该目录。但是,出于安全原因,两个用户都不能对该目录进行写入,这一点很重要。这种情况下的风险是,可能会使用非特权httpd进程的折衷来修改站点的内容。
其次,确保SELinux上下文允许httpd读取目录。通常,web内容应该用httpd _sys_content_t SELinux类型进行标记。
如果您使用/var/www/html、/srv/www中的默认文档根目录,或/srv中一层子目录中的www目录,例如/srv/directory/www,那么SELinux策略会为您正确地重新标记上下文。否则,您需要使用semanage fcontext将新规则添加到策略中。
[root@host ~]# semanage fcontext -a -t httpd_sys_content_t '/new/location(/.*)?'
#注意: selinux-policy-doc包中的httpd_selinux(8)手册页有更多关于影响httpd操作的SELinux上下文的信息。
1.2.2 允许编辑Web内容
如果希望web开发人员能够直接编辑你的文档根目录的内容,你需要确保他们可以在这个目录下写文件。
一种方法是将这些用户放在web服务器上的一个组中,并授予该组对文档根目录及其内容的写权限。使用SGID权限来确保他们在该目录中创建的文件自动获得正确的权限。
[root@host ~]# mkdir -p -m 2775 /new/docroot
[root@host ~]# chgrp webmasters /new/docroot
另一种方法是设置该组,但在文档根上设置默认ACL,以授予它们写访问权限。
[root@host ~]# setfacl -R -m g:webmasters:rwX /var/www/html
[root@host ~]# setfacl -R -m d:g:webmasters:rwx /var/www/html
#重要:大写的X位只在目录上设置可执行位,而不是目录和常规文件。这也适用于chmod,并且在递归地更改目录树的权限时非常有用

1.3 启动Apache HTTP Server

启动并启用系统服务httpd。
[root@host ~]# systemctl enable --now httpd
#请注意如果httpd启动失败,执行systemctl status -l httpd命令可以帮助定位问题。
还需要确保客户端可以通过系统的防火墙联系httpd。对于基本的HTTP访问,确保防火墙服务HTTP是允许的,它打开了端口80/TCP。如果设置了一个启用tls的HTTPS站点(将在本课程后面介绍),请确保HTTPS服务也被允许,它将打开端口443/TCP。
[root@host ~]# firewall-cmd --permanent --add-service=http --add-service=https
[root@host ~]# firewall-cmd --reload

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xtgby

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值