Apache程序作为老牌的Web服务程序,一方面在Web服务器软件市场具有相当高的占有率,另一方面Apache也是RHEL 7系统中默认的Web服务程序,而且还是RHCSA和RHCE认证考试的必考内容,因此无论从实际应用角度还是从应对红帽认证考试的角度,我们都有必要好好学习Apache服务程序的部署,并深入挖掘其可用的丰富功能。
安装:
yum install httpd
systemctl start httpd
systemctl enable httpd
Apache 配置文件
配置文件的名称 | 存放位置 |
---|---|
服务目录 | /etc/httpd |
主配置文件 | /etc/httpd/conf/httpd.conf |
网站数据目录 | /var/www/html |
访问日志 | /var/log/httpd/access_log |
错误日志 | /var/log/httpd/error_log |
参数 | 用途 |
---|---|
ServerRoot | 服务目录 |
ServerAdmin | 管理员邮箱 |
User | 运行服务的用户 |
Group | 运行服务的用户组 |
ServerName | 网站服务器的域名 |
DocumentRoot | 网站数据目录 |
Directory | 网站数据目录的权限 |
Listen | 监听的IP地址与端口号,可监听多个IP与端口 |
DirectoryIndex | 默认的索引页页面 |
ErrorLog | 错误日志文件 |
CustomLog | 访问日志文件 |
Timeout | 网页超时时间,默认为300秒 |
在执行下面命令,创建网站首页
[root@redhat ~]# echo “Welcome to REHL 7” >> /var/www/html/index.html
打开 127.0.0.1
个人主页功能
- 编辑配置文件
- 创建文件夹,配置权限
- 修改 SELinux 权限
[root@linux ~]# vim /etc/httpd/conf.d/userdir.conf
#
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
UserDir enable
#<br /> # To enable requests to /~user/ to serve the user's public_html<br /> # directory, remove the "UserDir disabled" line above, and uncomment<br /> # the following line instead:<br /> #<br /> UserDir public_html<br /></IfModule><br />[linux@linux ~]$ mkdir public_html<br />[linux@linux ~]$ echo "This is Linux's website" > public_html/index.html<br />[linux@linux ~]$ chmod 755 /home/linux/
[root@linux ~]# setsebool httpd_enable_homedirs on
访问测试
apache 配置 HTTP 基本身份验证
- 使用 htpasswd 生产数据库。-c 表示第一次生成,后面再分别添加密码数据库的存放文件,以及验证要用到的用户名称。
- 配置 /etc/httpd/conf.d/userdir.conf
[root@linux ~]# htpasswd -c /etc/httpd/pass redhat
New password:
Re-type new password:
Adding password for user redhat
AllowOverride all // 伪静态
authuserfile “/etc/httpd/pass”
authname “My privately website”
authtype basic
require user linux
allauthname //网站提示信息
Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术
基于 IP 地址
如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,这样当用户请求访问不同的IP地址时,会访问到不同网站的页面资源。而且,每个网站都有一个独立的IP地址,对搜索引擎优化也大有裨益。
- 给网卡添加多个IP地址并测试(相关命令 nmtui)。
- 创建不同 IP 地址的目录 (mkdir -p /home/wwwroot/{10,20,30})
- 配置 httpd 服务参数
DocumentRoot /home/wwwroot/10
ServerName bbs.linux.com
AllowOverride None
Require all granted
基于主机域名
当服务器无法为每个网站都分配一个独立IP地址的时候,可以尝试让Apache自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。在这种情况下的配置更加简单,只需要保证位于生产环境中的服务器上有一个可用的IP地址就可以了。
- 配置 /etc/hosts 文件,将不同域名解析到本机IP
- 创建不同web应用目录
- 配置 httpd 服务参数
[root@linux ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.20.10.10 www.linux.com bbs.linux.com tech.linux.com
//本机ip
DocumentRoot /home/wwwroot/tech
ServerName tech.linux.com
AllowOverride None
Require all granted
//本机ip
DocumentRoot /home/wwwroot/www
ServerName www.linux.com
AllowOverride None
Require all granted
基于端口号
基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。在使用Apache配置虚拟网站主机功能时,基于端口号的配置方式是最复杂的。因此我们不仅要考虑httpd服务程序的配置因素,还需要考虑到SELinux服务对新开设端口的监控。一般来说,使用80、443、8080等端口号来提供网站访问服务是比较合理的,如果使用其他端口号则会受到SELinux服务的限制。
- 创建不同目录,保存不同端口访问到的页面数据
- 修改配置文件,监听若干个端口
- 修改配置文件,添加虚拟主机(基于端口)
- 修改SELinux 上下文,使目录可以被http访问,修改SELinux 域,可以使http监听非常用端口。
//本机ip
DocumentRoot /home/wwwroot/tech
ServerName tech.linux.com
AllowOverride None
Require all granted
//本机ip
DocumentRoot /home/wwwroot/www
ServerName www.linux.com
AllowOverride None
Require all granted
[root@linuxprobe ~]# semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6111
[root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6222
[root@linuxprobe ~]# semanage port -l| grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 6222, 6111, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@linuxprobe ~]# systemctl restart httpd
[root@linuxprobe ~]# firefox
Apache的访问控制
Apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。它通过Allow指令允许某个主机访问服务器上的网站资源,通过Deny指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order指令,这个指令用来定义Allow或Deny指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令,使用较少。
Example:
[root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf
………………省略部分输出信息………………
129
130 Order allow,deny
131 Allow from 192.168.10.20
132
[root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf
………………省略部分输出信息………………
129
130 SetEnvIf User-Agent “Firefox” ff=1
131 Order allow,deny
132 Allow from env=ff
133
//Env 环境变量