CentOS6上搭建httpd-2.2服务示例要求:
(1)提供两个基于名称的虚拟主机www1和www2;有单独的错误日志和访问日志;
(2)通过www1的/server-status提供状态信息,且仅允许tom用户访问;
(3)www2不允许192.168.0.1/24网络中任意主机访问;
(4)为www2虚拟主机提供https服务;
实现过程:
第一个问题:
1、确定yum源配置正确,安装httpd-2.2服务。
#yum -y install httpd
2、创建两个基于名称的虚拟主机www1和www2,并创建www1和www2的目录(www1和www2的目录必须要在根下创建,默认根在/var/www下)。
#mkdir -pv /var/www/www{1,2}
#vim /etc/httpd/conf.d/vhost1.conf (这个必须在conf.d目录下并.conf结尾)
<VirtualHost 172.16.63.7:80>
ServerName www1
DocumentRoot /var/www/www1
Errorlog /var/log/httpd/www1.error_log
Customlog /var/log/httpd/www1.access_log combined
</VirtualHost>
#vim /etc/httpd/conf.d/vhost2.conf
<VirtualHost 172.16.63.7:80>
ServerName www2
DocumentRoot /var/www/www2
Errorlog /var/log/httpd/www2.error_log
Customlog /var/log/httpd/www2.access_log combined
</VirtualHost>
Errorlog:错误日志存放位置
Customlog:访问日志存放位置
3、修改httpd配置文件
#vim /etc/httpd/conf/httpd.conf
查找#ServerName www.example.com:80 把这行改为ServerName localhost:80 (去掉#的注释,默认这里的地址改成localhost)
查找#NameVirtualHost *:80 把这行改为NameVirtualHost 172.16.63.66:80 (去掉#的注释,172.16.63.66为CentOS6的IP地址,也就是本机)
注:在vim编辑器里按/输入你要查找的内容,按n或N实现向下向上查找
#httpd -t 检查是否有错误,提示Syntax OK表示操作成功。
#service httpd start 启动httpd服务
4、测试
向这两个虚拟主机中分别添加一个主页文件。
#echo this is www1 > /var/www/www1/index.html
#echo this is www2 > /var/www/www2/index.html
如何才能测试这两个主页呢?(当前CentOS6是在VM里运行)
修改主机hosts文件,重定向,添加:
172.16.63.7 www1
172.16.63.7 www2
访问下www1和www2,结果如下
第二个问题:
1、修改vhost1.conf文件
#vim /etc/httpd/conf.d/vhost1.conf
<VirtualHost 172.16.63.7:80>
ServerName www1
DocumentRoot /var/www/www1
Errorlog /var/log/httpd/www1.error_log
Customlog /var/log/httpd/www1.access_log combined
<Location "/server-status">
SetHandler server-status
AuthType Basic
AuthName "tom access"
AuthUserFile "/etc/httpd/conf/.htpasswd"
Require user tom
</Location>
</VirtualHost>
2、创建帐号文件
#htpasswd -c -b /etc/httpd/conf/.htpasswd tom 123
提示Adding password for user tom创建成功
#service httpd reload 重载
3、测试
浏览器打开http://www1/server-status 会看到下图提示,此时只允许tom用户登录
输入用户tom密码123
登录成功页面如下;
第三个问题:
修改vhost2.conf文件
#vim /etc/httpd/conf.d/vhost2.conf
<VirtualHost 172.16.63.7:80>
ServerName www2
DocumentRoot /var/www/www2
Errorlog /var/log/httpd/www2.error_log
Customlog /var/log/httpd/www2.access_log combined
<Directory "/var/www/www1">
Options None
AllowOverride None
Deny from 192.168.0
</Directory>
</VirtualHost>
#service httpd reload 重载即可
第四个问题:
用另外一台主机创建CA,为这台主机的www2颁发证书
在另外一台主机虚拟主机上运行以下指令:
#(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) 创建私有CA
#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem 生成一个自签证书
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:whsir
Organizational Unit Name (eg, section) []:yunwei
Common Name (eg, your name or your server's hostname) []:blog.whsir.com
Email Address []:admin@whsir.com
创建证书用到的数据库文件
#touch /etc/pki/CA/index.txt
#echo 01 > /etc/pki/CA/serial
在www2虚拟主机上运行以下指令:
安装ssl模块
#yum install mod_ssl
#mkdir /etc/httpd/ssl
#(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 1024) 生成私钥
#openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr 生成签署请求
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:whsir
Organizational Unit Name (eg, section) []:yunwei
Common Name (eg, your name or your server's hostname) []:www2
Email Address []:admin@whsir.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: (这里密码直接回车可以为空)
An optional company name []:
#scp /etc/httpd/ssl/httpd.csr 172.16.63.66:/tmp 将签署请求发送给另外一台主机(172.16.63.66为另外一台主机的IP)
在另外一台主机主机下为www2签署证书:
#openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt 按y确认两次
#scp /etc/pki/CA/certs/httpd.crt 172.16.63.7:/etc/httpd/ssl 将签好的证书发回给www2(172.16.63.7为www2的主机IP)
在www2主机下修改ssl的配置文件:
#vim /etc/httpd/conf.d/ssl.conf
修改以下几行,有#注释的取消
DocumentRoot "/var/www/www2" 根的地址
ServerName www2:443 服务器名
SSLCertificateFile /etc/httpd/ssl/httpd.crt 密钥文件位置
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key 私钥文件位置
#httpd -t 检查是否有错误
#service httpd reload 重载
#ss -lnt 此时查看443端口已经开启
使用curl命令测试https服务:
将另外一台主机的CA发给www2
#scp /etc/pki/CA/cacert.pem 172.16.63.7:/root/
在www2主机上运行
#vim /etc/hosts
添加重定向172.16.63.7 www2
#curl --cacert /root/cacert.pem https://www2
此时可看到返回结果this is www2
使用网页测试https服务:
以上另外一台主机和www2都是在VM里运行,现在我们来用本机测试一下www2这个站点能否通过加密访问!
首先更改本机的hosts文件,windows7的hosts在C:\Windows\System32\drivers\etc目录下
在hosts中添加172.16.63.7 www2
以Firefox浏览器访问https://www2/会提示你的连接并不安全(当然不安全了,因为还没导入证书)
此时我们需要导入证书:
在另外一台主机主机/etc/pki/CA/下,有个cacert.pem文件,将此文件导出到本机(windows7)
打开Firefox-->选项-->高级-->证书-->证书机构-->导入-->导入成功
此时再次访问https://www2结果如下:
原文链接:搭建httpd-2.2服务,设置访问认证及https的一个示例,转载请注明来源!