Apache httpd是应用最广的http服务器,它的基本安装配置也很简单。
Contents
--参考文档--
1. httpd配置文档 http://httpd.apache.org/docs/2.2/configuring.html
2. 文档路径 http://httpd.apache.org/docs/2.2/urlmapping.html
3. 认证授权 http://httpd.apache.org/docs/2.2/howto/auth.html
4. 虚拟主机 http://httpd.apache.org/docs/2.2/vhosts/
5. 访问控制 http://httpd.apache.org/docs/2.2/howto/access.html
6. 鸟哥私房菜 http://linux.vbird.org/linux_server/0360apache.php
--实验环境--
在虚拟机上搭建服务器,用物理机来访问;
1. 虚拟机和物理机均使用RHEL 6.5;
2. 虚拟机安装Apache HTTPD 2.2;
3. 虚拟机IP 192.168.122.108;
4. 物理机IP 192.168.122.1;
--安装--
RHEL6.5的镜像自带了Apache httpd,推荐使用它。
yum安装
完事了。
设置iptables和SELinux
-A INPUT -p TCP --dport 80 -j ACCEPT # 在Reject的条目前加上这一行
# /etc/init.d/iptables restart
如果httpd的资料目录不是/var/www/html,那么需要修改该目录的selinux context.
测试
无需修改配置,直接启动httpd,即可访问。
在物理机上,在浏览器上输入虚拟机的IP地址192.168.122.108,即可看到测试页面。
要更改网页的内容,直接修改DocumentRoot目录下(/var/www/html)的内容即可。
在/var/www/html/下建立一个index.html文件.
Hello World.
保存。
在物理机的浏览器上刷新一下页面,就能看到Hello World!字样啦。
--SSL--
增加https访问功能,可以更好地保护数据安全。
一般来说,网站的SSL证书都应该由权威机构签发。这里,我们用自己签发的证书来做实验。
安装ssl模块
自签证书
[root@server1 certs]# make test.crt
一路enter。执行以下命令去除key的密码,启动httpd的时候就不用再输入密码了。
[root@server1 certs]# openssl rsa -in test.key.org -out test.key
修改配置
修改/etc/httpd/conf.d/ssl.conf
找到
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
修改为
SSLCertificateKeyFile /etc/pki/tls/certs/test.key
重启httpd
开放iptables 443端口,在/etc/sysconfig/iptables加上一行,重启iptables。
测试
用物理机的浏览器访问https://192.168.122.108会出现证书提示。
--用户认证 Auth--
我们可以对某些目录进行限制,规定要输入用户名和密码才能访问。
在这里,我们规定http://192.168.122.108/secret/目录需要验证才能访问(对应虚拟机目录/var/www/html/secret/)。
用户认证信息
首先,添加用户信息(用户名和密码)。这些信息可以保存在/var/www/html/secret/.htpasswd文件里。
用 “ htpasswd -cm 文件路径 用户名”可以创建一个用户信息文件并添加一个用户。
如果文件已经存在,用“ htpasswd -m 文件路径 用户名”
New password:
Re-type new password:
Adding password for user feichashao
修改配置
修改/etc/httpd/conf/httpd.conf
加上需认证的目录的配置。(不要加在其他diretive的势力范围中)
AuthType Basic
AuthName "Secret Zone"
AuthBasicProvider file
AuthUserFile /var/www/html/secret/.htpasswd
Require valid-user
</Directory>
重启httpd
测试
在/var/www/html/secret/下建一个测试页面
This is Secret Zone.
在物理机上用浏览器访问http://192.168.122.108/secret/
嗯,这时候应该提示要输入用户密码了。
--用户目录 Userdir--
我们在虚拟机上搭建http服务器,如果想让虚拟机上每一位用户都有自己的个人页面,并且可以让外界通过浏览器访问,那“用户目录”就能派上用场啦。
比如说,虚拟上有用户a和b,配置了用户目录后,我们可以通过http://192.168.122.108/~a来访问a的个人主页,通过http://192.168.122.108/~b来访问b的个人主页。
建立用户目录
建立一个用于测试的用户
# echo redhat |passwd testuser1 --stdin
用户目录下建立文件,用于访问;
[root@server1 ~]# chmod 755 /home/testuser1/public_html/
[root@server1 ~]# vim /home/testuser1/public_html/index.html
This is testuser1 page.
[root@server1 ~]# chmod 755 /home/testuser1/public_html/index.html
[root@server1 ~]# chmod 711 /home/testuser1/
修改配置
在/etc/httpd/conf/httpd.conf中找到
</ifmodule>
将里面内容修改为
UserDir public_html
</ifmodule>
重启httpd服务
SELinux放行
测试
在物理机上用浏览器访问http://192.168.122.108/~testuser1/ 应该能看见用户的主页信息。
--虚拟主机 VirtualHost--
虚拟主机可以使得一台http服务器能为多个网站提供服务。
比如, a.example.com, b.example.com, c.example.com 都指向192.168.122.108。
在配置Name-based Virtual Host后,访问a.example.com会进入a的目录,访问b.example.com会进入b的目录,访问c.example.com会进入c的目录,造成了有3台不同主机的幻觉。
配置文件
在httpd.conf最后加入几行。
声明NameVirtualHost监听所有网卡的80端口,声明虚拟主机(主机域名和根目录)
<virtualhost *:80>
DocumentRoot /var/www/html/a
ServerName a.example.com
</virtualhost>
<virtualhost *:80>
DocumentRoot /var/www/html/b
ServerName b.example.com
</virtualhost>
<virtualhost *:80>
DocumentRoot /var/www/html/c
ServerName c.example.com
</virtualhost>
默认虚拟主机
设置Name-based虚拟主机后,如果用户用没有设定的域名访问该http服务器,会默认使用第一台虚拟主机。
所以,最好在最开始设置一台虚拟主机,作为默认的虚拟主机。
测试
分别建立三个域名对应的根目录 /var/www/html/{a,b,c},然后分别在里面建立index.html文件。
[root@server1 ~]# vim /var/www/html/a/index.html
This is a.example.com
[root@server1 ~]# vim /var/www/html/b/index.html
This is b.example.com
[root@server1 ~]# vim /var/www/html/c/index.html
This is c.example.com
然后,修改物理机的/etc/hosts记录。
192.168.122.108 b.example.com
192.168.122.108 c.example.com
在物理机上分别用a.example.com, b.example.com, c.example.com访问。
--访问控制--
访问控制可用于设定某些IP(网段)或者Domain能否访问网页数据。
这里我们直接限制/var/www/html目录的访问。
比如,我只想让192.168.122.0/24这个网段的用户访问,可以这样配置。(先把虚拟主机那部分注释掉)
order deny,allow
deny from all
allow from 192.168.122.0/24
</Directory>
--Troubleshooting--
防火墙
如果虚拟机的httpd已经正确启动,物理机浏览器连接虚拟机失败,有可能是虚拟机上防火墙的影响(可能是防火墙设置不当)。
可以先关闭iptables和selinux进行测试。
# setenforce 0
权限
用户目录需要755权限里面的内容才能被访问;
未建立用户目录
用户目录一般情况下要自行建立。