一、Apache服务的部署
1.安装http软件和说明文档
yum install httpd -y
yum install httpd-manual -y ##安装说明文档
2.开启apache服务
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
systemctl start httpd
systemctl enable httpd
为了以下实验的方便,需要打开内核级防火墙。状态为disabled可以在配置文件中修改【vim /etc/sysconfig/selinux】
3.测试服务
cd /var/www/html
vim index.html ##默认发布文件
http://172.25.254.131/manual
http://172.25.254.131/
访问网页可以查看到内容,则证明服务已成功开启
二、Apache基础信息
主配置目录:/etc/httpd/conf
主配置文件:/etc/httpd/conf/httpd.conf
子配置目录:/etc/httpd/conf.d
默认发布目录:/var/www/html
默认发布文件:index.html
默认端口:80
默认安全上下文:httpd_sys_content_t
程序开启默认用户:apache
apache日志:/etc/httpd/logs/*
三、Apache默认配置的更改
1.修改默认端口
(1)Apache默认允许使用的端口
vim /etc/httpd/conf/httpd.conf
42 Listen 8080 ##修改默认端口为8080
systemctl restart httpd
netstat -antlupe | grep httpd ##查看8080端口是否开启
Apache服务的默认端口为80,如果我们修改的端口是apache服务所允许使用的端口,我们可以直接进行修改,如果不是我们还需要将该端口设置为服务允许的端口。
firewall-cmd --permanent --add-port=8080/tcp将8080端口添加到防火墙中
firewall-cmd --reload
http://172.25.254.131:8080
端口修改后,访问网页时由于浏览器默认的端口是80端口,我们需要在网址后面加上端口号,不加端口号,则会报错。
(2)修改的端口不是Apache默认端口
netstat -antlupe | grep 6666查看该端口是否被占用
vim /etc/httpd/conf/httpd.conf在配置文件中修改端口
42 Listen 6666
systemctl restart httpd ##我们会发现重启失败,通过【setenforce 0】命令,将selinux改为警告状态,再次重启
由于该端口不是apache默认允许使用的端口,我们在修改后,重启服务,系统会报错,那是因为内核级防火墙不允许非法更改,我们将selinux的状态改为警告状态后,可以重启服务。
将6666端口添加到Apache默认允许使用的端口号中,注意该端口号是系统中实际存在的端口,不是我们随意设定的。在设定前我们可以使用【netstat】命令检测该端口是否被占用,如果被占用,我们就不能进行设置了。
semanage port -l | grep http ##查看http默认允许使用的端口(http_port_t)
semanage port -a -t http_port_t -p tcp 6666 ##如果提示killed,说明selinux有问题或者是端口6666被占用
-a添加 -t类型 -p协议
setenforce 1 ##将selinux状态由警告状态改为强制状态
systemctl restart httpd
测试:输入网址并加上端口号,观察是否能够看到发布文件内容。
http://172.25.254.131:6666
2.修改默认发布文件
vim /var/www/html/test.html
<h1>test's page</h1>
vim /etc/httpd/conf/httpd.conf
164 DirectoryIndex test.html index.html ##文件的位置影响访问顺序,第一个文件没有,则自动访问下一个文件
systemctl restart httpd
测试:
http://172.25.254.131
将文件移走观察配置文件中找不到该发布文件,会不会直接访问下一个文件。
3.修改默认发布目录
(1)创建发布目录
mkdir -p /westos/html
vim /westos/html/index.html
<h1>hello world</h1>
vim /etc/httpd/conf/httpd.conf
120 DocumentRoot "/westos/html"
<Directory "/westos/html">
Require all granted
</Directory>
systemctl restart httpd
setenforce 0
selinux在警告状态下可以访问网页,证明selinux的状态影响网页的查看。
(2)修改安全上下文
setenforce 1改为强制状态,观察是否能够访问网页
ls -Zd /var/www/html ---->http_sys_content_t
ls -Zd /westos/html ---->default_t ##默认发布目录安全上下文不一致
semanage fcontext -a -t httpd_sys_content_t '/westos/html(/.*)?'
restoreocon -RvvF /westos/html
systemctl restart httpd
(3)测试:
http://172.25.254.131
四、Apache虚拟主机部署
1.创建发布目录和发布文件
mkdir -p /var/www/vhost/news
mkdir -p /var/www/vhost/music
vim /var/www/html/index.html
<h1>hello world</h1>
vim /var/www/vhost/news/index.html
<h1>news's page</h1>
vim /var/www/vhost/music/index.html
<h1>music's page</h1>
2.配置文件中虚拟主机的设定
cd /etc/httpd/conf.d
vim vhost.conf ##名称任意
systemctl restart httpd
3.本地解析设置
vim /etc/hosts
172.25.254.231 www.westos.com news.westos.com music.westos.com
4.测试:直接输入域名,观察是否能够访问相应的网页
五、Apache服务黑白名单
黑白名单的顺序,会影响读取顺序,在设置时注意名单顺序的填写。
1.用户白名单设定
cd /etc/httpd/conf.d
vim vhost.conf
<Directory "/var/www/html">
Order Allow,Deny ##文件的先后,影响读取顺序
Allow from All
Deny from 172.25.254.31
</Directory>
systemctl restart httpd
测试:
2.用户黑名单设定
vim vhost.conf
<Directory "/var/www/html">
Order Deny,Allow ##文件的先后,影响读取顺序
Allow from 172.25.254.31
Deny from All
</Directory>
systemctl restart httpd
六、基于用户认证的名单设定
1.创建用户
创建用户,通过用户名和密码的进行登录,提高了安全性。
cd /etc/httpd
htpasswd -cm .apache_auth admin
cat .apache_auth
htpasswd -m .apache_auth jiang ##创建用户,不能加-c(覆盖原有用户信息)
2.用户名单设定
首先,我们需要将之前基于ip设置的用户名单注释掉,避免名单之间的冲突
cd conf.d/
vim vhost.conf
<Directory "/var/www/html">
AuthUserFile /etc/httpd/.apache_auth
AuthType basic
AuthName "Please input username and password"
Require user admin ##只允许admin用户访问
</Directory>
systemctl restart httpd
3.测试
名单中只允许admin用户登录,其他用户访问时则会被拒绝。
(1)admin用户登录
(2)其他用户登录
其他用户登录,直接会退出,在点击关闭键后,会出现以下页面。
4.合法用户允许登录
cd conf.d/
vim vhost.conf
Require valid-user 所有合法用户都可以访问
systemctl restart httpd
通过设定,之前不能登录的用户可以登录网页,并访问网页内容。
七、Apache支持的语言
Apache可以支持html、php、perl和python等多种语言,通过实验我们来验证一下。
首先,我们需要将之前在vhost.conf文件中关于用户认证的设定进行注释,目的是为了保证用户可以直接访问网页。
1.语言——php
cd /var/www/html
vim index.php
<?php
phpinfo();
?>
vim /etc/httpd/conf/httpd.conf
167 DirectoryIndex index.php idex.html 添加该文件,将该文件放在第一个
systemctl restart httpd
yum install php -y安装该软件后,我们需要重启httpd服务,使php配置文件加载
systemctl restart httpd
测试:输入网址,观察是否能够看到php测试页
http://172.25.254.131
2.语言——perl
cd /var/www/html
mkdir cgi
vim cgi/index.cgi
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print `date`;
chmod +x index.cgi 给脚本赋予可执行的权限
./index.cgi 执行该脚本,有执行结果,则脚本书写正确
注意:默认情况下,该脚本是没有执行权限的,我们需要服务该文件执行的权限。
vim /etc/httpd/conf.d/vhost.conf
<Directory "/var/www/html/cgi">如果不进行设置,代码会直接裸露到页面中
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
systemctl restart httpd
访问网页,我们可以看到服务出错,通过【setenforce】命令将火墙改为警告状态,更改火墙状态后,可以访问网页内容。由此我们可以推断出,selinux的状态影响网页的访问。
查看发布目录的安全上下文,该标签只提供网页的显示功能,而不提供网页内容的执行功能,因此我们需要修改该发布目录安全上下文,使它在访问时,能够自动执行脚本,并将执行结果显示到网页上。
ls -Zd /var/www/html 该目录的安全上下文只能显示,不能执行
semanage fcontext -l | grep httpd查看httpd的可执行安全上下文
semanage fcontext -a -t httpd_sys_script_exec_t '/var/www/html/cgi(/.*)?'
restorecon -RvvF /var/www/html/cgi
测试:由于该文件没有在主配置文件中设置为默认发布文件,因此我们在访问时,需要将该文件的位置写出来。
http://172.25.254.231/cgi/index.cgi
3.语言——python
cd cgi-bin
vim webapp.wsgi
yum search wsgi 可以看到需要安装的软件mod_wsgi.x86_64
yum install mod_wsgi.x86_64 -y
cd /etc/httpd/conf.d/
vim vhost.conf
<VirtualHost *:80>
ServerName wsgi.westos.com
WSGIScriptAlias / /var/www/cgi-bin/webapp.wsgi
</VirtualHost>
systemctl restart httpd
vim /etc/hosts在最后一行添加wsgi.westos.com
测试:由于我们做了本地解析,可以直接输入域名,来访问网页内容。要注意的是ip和域名一定要对应。
wsgi.westos.com
八、HTTPS的部署
在生活中,我们访问网页最常用的是https服务,因为该服务对网页进行加密保护,安全性能高,不易被攻击。下面是https服务的部署。
1.https的部署
(1)安装软件
yum install mod_ssl -y
yum install crypto-utils -y
(2)在火墙中添加服务
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
systemctl restart httpd
(3)对主机进行证书和钥匙的生成
genkey apache_server.westos.com
安装完毕后,屏幕上会显示生成的证书和钥匙。
(4)配置文件中修改证书和钥匙
vim /etc/httpd/conf.d/ssl.conf
101 SSLCertificateFile /etc/pki/tls/certs/apache_server.westos.com.crt
109 SSLCertificateKeyFile /etc/pki/tls/private/apache_server.westos.com.key
(5)在浏览器中添加证书
添加好证书后,我们就可以通过https访问网页
2.设定https虚拟主机并设定网页重写
cd /etc/httpd/conf.d
vim vhost_https.conf
systemctl restart httpd
对网页进行重写,目的是为了是我们在访问网页时,可以直接输入域名,浏览器在内部直接进行域名的转换,方便用户访问。
mkdir -p /var/www/vhost/login
cd login
vim index.html
<h1>login.westos.com test's page</h1>
systemctl restart httpd