1.apache虚拟主机
基于域名的虚拟主机,在同一个ip上配置多个域名,并且都通过80端口访问
可以让我们的一台apache服务器在被访问不同域名的时候显示不同的主页
在实验之前,我们需要先还原默认配置,以便实验进行;
本实验中设置两台虚拟主机:news.westos.com;music.westos.com
我们需要在进行不同的域名访问时显示不同的页面
1.首先设置两个虚拟主机的默认发布目录与测试文件:
2.写子配置文件:
#1.配置文件a_defaults.conf:
vim a_defaults.conf
1 <VirtualHost _default_:80> ##虚拟主机开启的端口
2 DocumentRoot /var/www/html ##虚拟主机的默认发布目录
3 CustomLog logs/defualts.log combined ##虚拟主机的日志;combined:所有类型的日志
4 </VirtualHost>
#3.配置news.westos.conf的配置文件:
vim news.conf
1 <VirtualHost *:80>
2 ServerName news.westos.com ##指定虚拟主机域名
3 DocumentRoot /var/www/westos.com/news/html/ ##此虚拟主机默认发布目录
4 CustomLog logs/news.log combined ##此虚拟主机的日志
5 </VirtualHost>
6 <Directory "/var/www/westos.com/news/html/"> ##默认发布目录的访问授权
7 Require all granted ##所有人都允许访问
8 </Directory>
#4.配置music.westos.com 的配置文件:
与news主机的配置类似,只在配置文件中将news改为music即可:
3.以上配置完成后,重启apache服务,在测试端配置本地解析:
访问www.westos.com结果如下:
访问news.westos.com结果如下:
访问music.westos.com结果如下:
2.apache访问控制:
1.基于ip的访问控制
首先,在未禁止指定ip访问前,我们访问www.westos.com,可以看到如下结果:
修改子配置文件如下:
vim a_defaults.conf
5 <Directory "/var/www/html">
6 Order Deny,allow ##Order:定义顺序,后读取的列表会覆盖先读取的列表
7 Deny from all ##拒绝所有的ip的访问
8 allow from 172.25.150.250 ##只允许250主机访问
9 </Directory>
在250主机访问如下:
250主机可以正常访问,使用172.25.150.150主机(即apache-server本身),我们可以看到不能访问:
若将配置文件修改如下,由于先读取Allow,则后读取的Deny会将Allow的信息覆盖,此时效果为拒绝所有ip的访问:
刚才可以访问的250主机此时也被禁止:
2.基于用户的访问控制:
#1.创建用户文件:
htpasswd -cm http_userlist admin
##-c:create,新建(注意:在文件中追加用户时,不能使用此参数)
##-m:指定用户问价名称
##admin:添加的用户admin
#2.修改配置文件:
vim a_defaults.conf
12 <Directory "/var/www/html">
13 AuthUserFile /etc/httpd/conf.d/http_userlist ##认证用户的文件
14 AuthName "please input your account and password!" ##在认证时页面显示的信息
15 AuthType basic ##认证类型:基本认证,只需要账户密码即可
16 Require user admin ##在认证文件的用户中只有admin用户才可以访问
17 #Require valid-user ##在认证文件中的用户都可以访问
18 </Directory>
在用户文件中的所有用户都可以访问:
重启服务,在访问www.westos.com,可以看到此时访问需要输入账户与密码:
输入admin的账户与密码:
访问成功:
#2.改为只有用户文件中的admin才可以访问:
重启服务,再使用admin1的账户与密码访问:
访问失败,要求重新输入账户与密码:
使用admin访问:
成功:
3.http支持语言
1.html语言
2.php语言:
#1.写php测试脚本
#2.安装php
#3.重启apache服务:
此时访问ww.westos.com可看到 如下结果:
3.perl语言
#1.cgi-bin/下的cgi程序
给此文件执行权限:
在浏览器中访问:http://172.25.254.139/cgi-bin/index.cgi
#2.其他目录下的cgi程序
1.例如在/var/www/html/cgi中的test.cgi:
若直接访问,则结果如下:
2.在主配置文件中修改:
vim a_defaults.conf
5 <Directory "/var/www/html/cgi"> ##指定一个对象,下面内容是对此对象的描述
6 Options ExecCGI ##下面类型的文件可执行
7 AddHandler cgi-script .cgi ##cgi-script和.cgi格式的文件为cgi文件
8 </Directory>
3.selinux开启情况下更改安全上下文
完成后,重启服务,再访问,结果如下:
#3.python语言
wsgi是cgi的加密格式,将测试文件webapp.wsgi(一段python程序)放在/var/www/cgi-bin/下:
安装插件:yum install mod_wsgi.x86_64 -y
建立虚拟主机:webapp.westos.com
重启apache,配置本地解析,直接访问webapp.westos.com,可看到程序被执行:
4.http加密访问:https
1.安装软件:
yum install mod_ssl -y
yum install crypto-utils.x86_64 -y
2.生成密钥对:
genkey www.westos.com ##为此域名生成SSL证书和私钥
生成密钥流程如下:
选择密钥长度为1024bit
等待读条
收集随机数,此处可能需要敲键盘:
不发送证书
不对私钥进行加密:
输入证书信息:
完成后,可以看到:
在apache子配置目录下的ssl.conf文件中替换密钥与证书为我们新生成的密钥与证书:
完成后,重启apache服务,访问https://ww.westos.com,查看此网站的证书,可以看到此证书就是我们刚才生成的证书:
3.网页重启
经过以上步骤,我们就可以使用https进行访问,但是若在访问时不指定使用https的方式,则默认使用http方式进行访问,这就造成了一些不便,我们需要在只输入域名访问后,自动跳转到https的访问方式
目标:在访问login.westos.com时自动跳转为https的访问方式
方法如下:
#1.建立默认发布目录与文件:
#2.虚拟主机login.westos.com配置文件:
参数含义如下:
1 <VirtualHost *:443>
2 SSLEngine on ##在这台主机上开启ssl功能
3 ServerName login.westos.com
4 DocumentRoot /var/www/westos.com/login/html/
5 CustomLog logs/login.log combined
6 SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt ##以下是生成的密钥对
7 SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key
8 </VirtualHost>
9 <Directory "/var/www/westos.com/login/html/"> ##授权访问
10 Require all granted
11 </Directory>
12 <VirtualHost *:80>
13 RewriteEngine On ##开启网页重启功能
14 ServerName login.westos.com
15 RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301] ##重启规则
16 </VirtualHost>
^(/.*)$ ##表示(获取到)客户在浏览器地址栏中输入的所有字符
https:// ##强制客户加密访问
%{HTTP_HOST} ##客户请求主机,即需要访问的域名
$1 ##$1表示获取到的^(/.*)$的值
[redirect=301] ##永久重写,301表示永久重写 ##返回值有区别,返回值为:200:临时;304:永久
配置完成后,重启服务,访问login.westos.com,此时自动跳转为https访问方式,下载证书,可看到如下界面: