使用Apache协议部署静态网站

Apache——取自美国印第安人土著语Apache,寓意着拥有高超的作战策略和无穷的耐性,由于其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展。目前拥有很高的Web服务软件市场占用率,全球使用最多的Web服务软件,开源、跨平台(可运行于Unix,linux,windows中)。

支持基于IP或域名的虚拟主机
支持多种方式的HTTP认证
集成代理服务器模块
安全Socket层(SSL)
能够实时见识服务状态与定制日志
多种模块的支持

个人用户主页功能

Apache服务程序中有个默认未开启的个人用户主页功能,能够为所有系统内的用户生成个人网站,确实很实用哦~

第1步:开启个人用户主页功能:

[root@linuxprobe ~]# vim /etc/httpd/conf.d/userdir.conf
将第17行的UserDir disabled前加一个#,代表该行被注释掉,不再起作用。
将第23行的UserDir public_html前的#号去除,表示该行被启用。
注意:UserDir参数表示的是需要在用户家目录中创建的网站数据目录的名称(即public_html)

 

 


重启Apache服务程序:

[root@linuxprobe ~]# systemctl restart httpd

第2步:创建个人用户网站数据。
切换至普通会员linuxprobe的家目录:

[root@linuxprobe home]# su - linuxprobe

Last login: Fri May 22 13:17:37 CST 2015 on :0

创建网站数据目录public_html:

[linuxprobe@linuxprobe ~]$ mkdir public_html

写入首页文件内容:

[linuxprobe@linuxprobe ~]$ echo "This is linuxprobe's website" > public_html/index.html

给予网站目录755的访问权限:

[linuxprobe@linuxprobe ~]$ chmod -Rf 755 ./

我们打开浏览器,访问地址为”http://127.0.0.1/~用户名“,不出意外果然是报错页面,肯定是SELinux服务在捣蛋。

 

 

第3步:设置SELinux允许策略。

这次报错并不是因为用户家的网站数据目录SELinux安全上下文没有设置了,而是因为SELinux默认就不允许Apache服务个人用户主页这项功能。

getsebool命令用于查询所有SELinux规则的布尔值,格式为:“getsebool -a”。

SELinux策略布尔值:只有0/1两种情况,0或off为禁止,1或on为允许。

setsebool命令用于修改SElinux策略内各项规则的布尔值,格式为:“setsebool [选项] 布尔值=[0|1]”。

参数

作用

-P

永久生效

 

查看并搜索所有与家目录有关的SELinux策略:

[root@linuxprobe ~]# getsebool -a | grep home

ftp_home_dir --> off

git_cgi_enable_homedirs --> off

git_system_enable_homedirs --> off

httpd_enable_homedirs --> off

mock_enable_homedirs --> off

mpd_enable_homedirs --> off

openvpn_enable_homedirs --> on

samba_create_home_dirs --> off

samba_enable_home_dirs --> off

sftpd_enable_homedirs --> off

sftpd_write_ssh_home --> off

spamd_enable_home_dirs --> on

ssh_chroot_rw_homedirs --> off

tftp_home_dir --> off

use_ecryptfs_home_dirs --> off

use_fusefs_home_dirs --> off

use_nfs_home_dirs --> off

use_samba_home_dirs --> off

xdm_write_home --> off

将个人用户网站功能策略设置为允许:

[root@linuxprobe ~]# setsebool -P httpd_enable_homedirs=on

刷新浏览器访问linuxprobe用户的个人网站,果然成功了:

 

 

第4步:增加密码安全验证。

有时候并不希望所有人都可以留意访问到自己的个人网站,那就可以使用Apache密码口令验证功能增加一道安全防护吧。
使用htpasswd命令生成密码数据库(-c参数用于第一次生成):

[root@linuxprobe ~]# htpasswd -c /etc/httpd/passwd linuxprobe

New password:

Re-type new password:

Adding password for user linuxprobe

编辑配置文件开启密码验证(具体参数见下图):

[root@linuxprobe ~]# vim /etc/httpd/conf.d/userdir.conf

 

 

 

 

 

如果口令输入错误会直接禁止访问:

Unauthorized

This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn’t understand how to supply the credentials required.

这里的User Namelinuxprobe,密码并非该用户的系统密码,而是htpasswd命令创建的网站密码,不要搞混哦~

虚拟网站主机功能

Apache的虚拟主机功能 (Virtual Host) 是可以让一台服务器基于IP、主机名或端口号实现提供多个网站服务的技术

虚拟主机功能的操作步骤都很简单,但可能比较难理解其中的原理,一旦搭建出实验环境,你就一定会明白了。

 

1.基于IP地址

这种情况很常见:一台服务器拥有多个IP地址,当用户访问不同IP地址时显示不同的网站页面。

第1步:使用nmtui命令为网卡添加多个IP地址(192.168.10.10/20/30):


重新启动网卡设备后使用ping命令检查是否配置正确(这项很重要,一定要测试好再进行下一步!)。


第2步:分别创建网站数据目录。
在/home/wwwroot目录下分别创建三个网站数据目录:

[root@linuxprobe ~]# mkdir -p /home/wwwroot/10

[root@linuxprobe ~]# mkdir -p /home/wwwroot/20

[root@linuxprobe ~]# mkdir -p /home/wwwroot/30

分别在这三个网站数据目录中写入主页文件,内容为该网站的IP地址:

[root@linuxprobe ~]# echo "IP:192.168.10.10" > /home/wwwroot/10/index.html

[root@linuxprobe ~]# echo "IP:192.168.10.20" > /home/wwwroot/20/index.html

[root@linuxprobe ~]# echo "IP:192.168.10.30" > /home/wwwroot/30/index.html

第3步:在配置文件中描述基于IP地址的虚拟主机。

<VirtualHost 192.168.10.10>
DocumentRoot /home/wwwroot/10
ServerName www.linuxprobe.com
<Directory /home/wwwroot/10 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.10.20>
DocumentRoot /home/wwwroot/20
ServerName bbs.linuxprobe.com
<Directory /home/wwwroot/20 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.10.30>
DocumentRoot /home/wwwroot/30
ServerName tech.linuxprobe.com
<Directory /home/wwwroot/30 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

第4步:修改网站数据目录的SELinux安全上下文。
需要分别修改网站数据目录以及网页文件的SELinux安全上下文:

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20/*

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30/*

 

立即恢复SELinux安全上下文:

[root@linuxprobe ~]# restorecon -Rv /home/wwwroot

第5步:分别访问192.168.10.10/20/30验证结果:

基于主机名

当服务器无法为每个网站都分配到独立IP地址时,可以试试让Apache服务程序自动识别来源主机名或域名然后跳转到指定的网站。

第1步:配置网卡IP地址与hosts文件。

hosts文件作用是定义IP地址与主机名的映射关系,即强制将某个主机名地址解析到指定的IP地址

[root@linuxprobe ~]# vim /etc/hosts

//每行只能写一条,格式为IP地址+空格+主机名(域名)。

192.168.10.10 www.linuxprobe.com

192.168.10.10 bbs.linuxprobe.com

192.168.10.10 tech.linuxprobe.com

第2步:分别创建网站数据目录:

[root@linuxprobe ~]# mkdir -p /home/wwwroot/www

[root@linuxprobe ~]# mkdir -p /home/wwwroot/bbs

[root@linuxprobe ~]# mkdir -p /home/wwwroot/tech

分别在网站目录中写入不同的首页文件:

[root@linuxprobe ~]# echo "WWW.linuxprobe.com" > /home/wwwroot/www/index.html

[root@linuxprobe ~]# echo "BBS.linuxprobe.com" > /home/wwwroot/bbs/index.html

[root@linuxprobe ~]# echo "TECH.linuxprobe.com" > /home/wwwroot/tech/index.html

 

 

 

第3步:在配置文件中描述基于主机名称的虚拟主机。
编辑主配置文件(/etc/httpd/conf/httpd.conf),在主配置文件的末尾按下面格式定义虚拟主机信息:

<VirtualHost 192.168.10.10>

DocumentRoot "/home/wwwroot/www"

ServerName "www.linuxprobe.com"

<Directory "/home/wwwroot/www">

AllowOverride None

Require all granted

</directory>

</VirtualHost>

 

<VirtualHost 192.168.10.10>

DocumentRoot "/home/wwwroot/bbs"

ServerName "bbs.linuxprobe.com"

<Directory "/home/wwwroot/bbs">

AllowOverride None

Require all granted

</Directory>

</VirtualHost>

 

<VirtualHost 192.168.10.10>

DocumentRoot "/home/wwwroot/tech"

ServerName "tech.linuxprobe.com"

<Directory "/home/wwwroot/tech">

AllowOverride None

Require all granted

</directory>

</VirtualHost>

读者们可以直接复制上面的参数到主配置文件(/etc/httpd/conf/httpd.conf)的末尾然后重启apache网站服务程序。

因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。

所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:”systemctl enable httpd“。

第4步:修改网站数据目录的SELinux安全上下文:

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www/*

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs/*

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech/*

让新的SELinux安全上下文立即生效:

[root@linuxprobe ~]# restorecon -Rv /home/wwwroot/

第5步:分别访问网站验证结果

 基于端口号

我们可以让服务器开启多个服务端口后,然后让用户能够通过访问服务器的指定端口来找到想要的网站。

第1步:配置服务器的IP地址:

 

第2步:分别创建网站数据目录。
分别创建端口为6111,6222的网站数据目录:

[root@linuxprobe ~]# mkdir -p /home/wwwroot/6111

[root@linuxprobe ~]# mkdir -p /home/wwwroot/6222

分别在网站数据目录中写入不同内容的主页文件:

[root@linuxprobe ~]# echo "port:6111" > /home/wwwroot/6111/index.html

[root@linuxprobe ~]# echo "port:6222" > /home/wwwroot/6222/index.html

第3步:在配置文件中描述基于端口号的虚拟主机。
编辑主配置文件(/etc/httpd/conf/httpd.conf),找到约在42行的Listen 80,并在下面追加:

Listen 6111
Listen 6222

然后在主配置文件的末尾按下面格式定义虚拟主机信息:

<VirtualHost 192.168.10.10:6111>
DocumentRoot “/home/wwwroot/6111”
ServerName www.linuxprobe.com
<Directory “/home/wwwroot/6111”>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.10.10:6222>
DocumentRoot “/home/wwwroot/6222”
ServerName bbs.linuxprobe.com
<Directory “/home/wwwroot/6222”>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

读者们可以直接复制上面的参数到主配置文件(/etc/httpd/conf/httpd.conf)的末尾然后重启apache网站服务程序。

因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。

所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:”systemctl enable httpd“。

什么!竟然报错了:

Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.

这是因为SELinux服务检测到6111与6222端口原本并不属于Apache服务端口,但现在却被以Apache的名义监听了.第4步:修改网站数据目录的SELinux安全上下文并允许端口监听。
修改网站数据目录的安全上下文:

[root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot

[root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6111

[root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6111/*

[root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6222

[root@linuxprobe ~]# semanage fcontext -a -t httpd_user_content_t /home/wwwroot/6222/*

让新的SElinux安全上下文立即生效:

[root@linuxprobe ~]# restorecon -Rv /home/wwwroot/

使用semanage命令搜索在SELinux系统中有关http服务的端口号:

[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

默认包括80,81,443,488,8008,8009,8443,9000却没有咱们定义的端口号,那么添加进去就可以了:

[root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6111

[root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6222

再来看下SELinux的端口规则(已经添加成功了):

[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

再次尝试启动Apache网站服务程序就没有问题了:

[root@linuxprobe ~]# systemctl restart httpd

 

第5步:分别访问网站验证结果:

猜你喜欢

转载自www.cnblogs.com/fairyting/p/11754465.html
今日推荐