例1、搭建一台测试 web 服务器
部门内部搭建一台WEB服务器,采用的IP地址和端口为192.168.1.128:80,首页采用index.html文件。管理员E-mail地址为 cool@,网页的编码类型采用UTF-8,所有网站资源都存放在/var/www/html目录下,并将Apache的配置文件根目录设置为/etc/httpd目录。
修改配置文件:
vim /etc/httpd/conf/httpd.conf
设置Apache 的根目录为/etc/httpd
设置httpd 监听端口80
设置管理员E-mail地址为 cool@
设置WEB 服务器的主机名和监听端口为192.168.1.128:80
设置Apache 文档目录为/var/www/html
设置主页文件为 index.html
设置服务器的默认编码为UTF-8
修改配置文件之前,备份一份
vim /etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd" #apache配置文件的根目录
Timeout 60 #超时时间
Listen 80 监听的端口
ServerAdmin cool@ #设置管理员,e-mail 地址
ServerName 192.168.1.128:80 #服务器主机名
DocumentRoot "/var/www/html" #网站页面根目录
Options Indexes FollowSymLinks #当一个目录没有默认首页时,允许显示此目录列表
DirectoryIndex index.html index.php #指定默认首页
AddDefaultCharset UTF-8 # 设置服务器的默认编码为: UTF-8
取消 apache 默认欢迎页
vim /etc/httpd/conf.d/welcome.conf
#
# This configuration file enables the default "Welcome"
# page if there is no default index page present for
# the root URL. To disable the Welcome page, comment
# out all the lines below.
#
#<LocationMatch "^/+$"> #把红色内容注释
# Options -Indexes
# ErrorDocument 403 /error/noindex.html
#</LocationMatch>
创建首页
echo 'Welcome to my life !' > /var/www/html/index.html
测试:
LAMP 环境,几种不同的安全访问机制的实现:
一、修改网站目录对应参数及权限
修改网站默认根目录,并且设置访问权限,只有在我允许的范围之内可以访问
修改网站默认根目录
设置文档目录为/var/www/html/bbs
修改 DocumentRoot 路径为 指定的目录
允许所有人访问/var/www/html/bbs 目录
目录与访问控制:
<Directory "/var/www/html/bbs"> #子目录会继承这个目录的属性
Options FollowSymLinks #Options:Indexes:目录浏览
AllowOverride None #Followsymlinks:可以用连接
Order allow,deny
Allow from 192.168.18.0/24 #从哪里来的允许
Deny from 192.168.16.0/24 #从哪里来的拒绝
Allow from .baidu.com
#Allow,Deny都会读取,如果有冲突和未说明的时候按照Order选项逗号后面的那个为准。
谁写到后面,谁的优先级高。
</Directory>
创建目录,创建测试首页
[root@python ~]# mkdir /var/www/html/bbs
[root@python ~]# cp /var/www/html/index.html /var/www/html/bbs/
注意:上面的访问控制的方法是Apache2.2版本中的写法,在2.4中是不支持的
Apache2.4的访问控制:
Require all granted #允许所有
Require all denied #拒绝所有
Require method http-method [http-method] ... #允许,特定的HTTP方法
Require user userid [ userid ] ... #允许,特定用户
Require group group-name [group-name] ... #允许,特定用户组
Require valid-user # #允许,有效用户
Require ip 10 172.20 192.168.2 #允许 特定IP和网段
二、使用别名,引用网站根目录以外的路径
将/usr/local/phpdata 目录通过虚拟目录功能添加到网站根目录。当访问http://192.168.1.128/ phpdata/ 时,就可以访问目录/usr/local/phpdata中的内容。
注:apache的别名也叫虚拟目录
语法:
AliasURL路径 PATH物理路径
创建测试数据:
[root@python conf]# mkdir /usr/local/phpdata
[root@python conf]# echo "This Alias PHPdata" > /usr/local/phpdata/index.html
修改配置文件:
[root@python ~]# vim /etc/httpd/conf/httpd.conf
Alias /phpdata/ "/usr/local/phpdata/"
<Directory "/usr/local/phpdata/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
注:Alias /phpdata/ "/usr/local/phpdata/" #/phpdata/ 可以随意起。比如改/phpdata/ 为/php/ 则访问链接: http://192.168.1.128/php/
测试:
三、当一个目录下没有默认首页时,访问http://192.168.1.128/phpdata/ 禁止显示目录列表
显示目录列表:
cp -a /boot/grub/ /var/www/html/bbs/
cd /var/www/html/
rm -rf index.html
当网站没有默认的首页的时候,直接访问显示网站更目录下的文件夹资源
修改配置文件:
vim /etc/httpd/conf/httpd.conf # 修改红色标记内容
328 # The Options directive is both complicated and important. Please see
329 # http://httpd.apache.org/docs/2.2/mod/core.html#options
330 # for more information.
331 #
-Indexes注释index这行即可
334 #
四、通过用户认证的方式,对网站下/usr/local/phpdata/目录进行保护
设置/usr/local/phpdata/目录,只能通过用户名密码方式访问。
vim /etc/httpd/conf/httpd.conf #在需要使用用户验证的目录的相关Directory段落添加以下红色标记内容:
Alias /phpdata/ "/usr/local/phpdata /"
<Directory "/usr/local/phpdata /">
Options Indexes FollowSymLinks
AllowOverride None
authtype basic
authname "my web site"
authuserfile /etc/httpd/conf/passwd.secret
require valid-user
</Directory>
参数说明:
authtype basic #authtype命令:指定认证类型为:basic。
authname "my web site "# AuthName命令:指定认证区域名称。区域名称是在提示要求认证的对话框中显示给用户的。
authuserfile /etc/httpd/conf/passwd.secret# AuthUserFile命令:指定一个包含用户名和密码的文本文件,每行一对。
require命令 #指定哪些用户或组才能被授权访问。如:
require user user1 user2 (只有用户user1和user2可以访问)
require valid-user (在AuthUserFile指定的文件中任何用户都可以访问)
利用Apache附带的程序htpasswd,生成包含用户名和密码的文本文
[root@python ~]# htpasswd -cm /etc/httpd/conf/passwd.secret tom
New password:
Re-type new password:
Adding password for user tom
[root@python ~]# htpasswd -m /etc/httpd/conf/passwd.secret bob
New password:
Re-type new password:
Adding password for user bob
[root@python ~]# cat /etc/httpd/conf/passwd.secret
bob:$apr1$ghXTDKYU$H/6GDBbFFZ/b7sqUzdfTP.
tom:$apr1$t5uT9/jI$z.obpguKI5S2.OGbpWwyf0
测试:
五、配置apache虚拟主机,实现在一台服务器上运行多个网站
apache虚拟主机实现有三种方法:
1、通过不同的IP地址
2、通过不同的域名
3、通过不同的端口号
三种都需要把虚拟主机功能打开:
方法1:
通过不同的IP地址,解析不同域名
给服务器增加IP(另一个域名解析出来的那个IP)
ifconfig ens33:1 192.168.1.166 netmask 255.255.255.0
mkdir /var/www/html/bbs/
cp -a /boot/grub/ /var/www/html/bbs/
创建虚拟主机的配置文件:
vim zhtest.conf
<VirtualHost 192.168.1.128:80>
ServerAdmin webmaster@
DocumentRoot /var/www/html/
ServerName
ErrorLog logs/-error_log
CustomLog logs/-access_log common
</VirtualHost>
<VirtualHost 192.168.1.166:80>
ServerAdmin webmaster@
DocumentRoot /var/www/html/bbs/
ServerName
ErrorLog logs/-error_log
CustomLog logs/-access_log common
</VirtualHost>
测试:
方法二:
通过不同域名:
在域名管理后台,修改DNS配置,zh128与zh166 解析成相同的IP。
[root@python ~]# cat /etc/httpd/conf.d/zhtest.conf
<VirtualHost *:80>
ServerAdmin webmaster@
DocumentRoot /var/www/html/
ServerName zh128
ErrorLog logs/zh128-error_log
CustomLog logs/zh128-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@
DocumentRoot /var/www/html/bbs/
ServerName zh166
ErrorLog logs/zh166-error_log
CustomLog logs/zh166-access_log common
</VirtualHost>
[root@python ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.128 zh128
192.168.1.166 zh166
测试:
方法3:基于端口配置虚拟主机:
[root@python conf.d]# cat zhtest.conf
<VirtualHost 192.168.1.128:80>
ServerAdmin webmaster@
DocumentRoot /var/www/html/
ServerName www.xuegod.com
ErrorLog logs/www.xuegod.com-error_log
CustomLog logs/www.xuegod.com-access_log common
</VirtualHost>
<VirtualHost 192.168.126.128:81>
ServerAdmin webmaster@
DocumentRoot /var/www/html/bbs/
ServerName
ErrorLog logs/-error_log
CustomLog logs/-access_log common
</VirtualHost>
vim /etc/httpd/conf/httpd.conf
Listen 80
Listen 81
测试: