httpd 相关配置
一、前言
关于Apache httpd 安装见 LAMP httpd+mysql+php 环境安装及配置
LAMP 环境搭建完成,仅仅是安装上了软件,在这之后还有很多具体的配置工作要做。
二、配置 httpd 虚拟主机
在一个 Apache 服务器上可以配置多个虚拟主机,实现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录。Apache 虚拟主机配置有 3 种方法:基于 IP 配置、基于域名配置和基于端口配置,这里介绍基于域名配置和基于端口配置,基于IP配置方法类似。
打开虚拟主机,搜索httpd-vhost
,去掉该行注释:
vim /usr/local/apache24/conf/httpd.conf
Include conf/extra/httpd-vhosts.conf
1)、配置虚拟主机文件
将配置修改如下:
vim /usr/local/apache24/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.111.com
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/www/www.222.com"
ServerName www.222.com
</VirtualHost>
在以上的配置参数中:ServerAdmin
指定管理员邮箱,一般不用;DocumentRoot
为该虚拟主机站点的根目录;ServerName
是网站的域名;ServerAlias
为网站的第二域名,可以写多个,用空格分开;ErrorLog
是网站的错误日志;CustomLog
是网站的访问日志。
其中,以<VirtualHost>
开头,</VirtualHost>
结尾为一个配置段。第一个配置段为默认虚拟主机。
在 httpd 中,如果一个站点没有配置虚拟主机,则指向默认虚拟主机。这两个配置段中,基于不同域名来配置虚拟主机,而域名站点的根目录也各不相同。
每一次修改完配置文件后,都要检查语法并重新加载 httpd:
/usr/local/apache24/bin/apachectl -t
/usr/local/apache24/bin/apachectl graceful
2)、创建网站目录及文件
mkdir -p /data/wwwroot/111.com /www/www.222.com
echo "111.com" > /data/wwwroot/111.com/index.html
echo "222.com" > /www/www.222.com/index.html
注意:如果在本地进行配置测试的话,需要在hosts文件中加入域名到本地IP地址的映射(hosts文件位置:C:WindowsSystem32driversetchosts):
服务器IP地址 www.111.com www.222.com
打开浏览器访问是否正常。
三、用户认证
用户认证是指在用户访问网站的时候,需要输入用户名密码才能正常访问,一般比较重要的站点或者网站后台通常会加上用户认证来保证安全。
1)、修改虚拟主机配置文件,将第二配置段修改如下:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.111.com"
ServerName www.111.com
<Directory /data/wwwroot/www.111.com> //指定认证的目录
AllowOverride AuthConfig //这个相当于打开认证的开关
AuthName "111.com user auth" //自定义认证的名字,作用不大
AuthType Basic //认证的类型,一般为Basic,其他类型没用过
AuthUserFile /data/.htpasswd //指定密码文件所在位置
require valid-user //指定需要认证的用户为全部可用用户
</Directory>
</VirtualHost>
2)、创建密码文件:
/usr/local/apache24/bin/htpasswd -cm /data/.htpasswd admin
New passwod:
Re-type new password:
Adding password for user admin
htpasswd
为创建用户的工具,-c 为创建,-m 指定密码加密方式为 MD5。/data/.htpasswd
是密码文件,admin 为用户。第一次执行时需要加 -c,第二次再创建新用户时则不用添加,否则密码文件会被重置。
重新加载 httpd 后,再次打开浏览器输入域名则会发现弹出认证窗口,输入用户名密码后正常访问。
上例中进行的是对整个站点的用户认证,如果一个文件,则需要修改成以下配置:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.111.com"
ServerName www.111.com
<FilesMatch test.php>
AllowOverride AuthConfig
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</FilesMatch>
</VirtualHost>
注:网址中所有带有 test.php
的链接都会弹出认证窗口。
四、域名301重定向
页面永久性移走(301重定向)是一种非常重要的“自动转向”技术。网址重定向最为可行的一种办法。当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。
在我们网站建设中,时常会遇到需要网页重定向的情况:像网站调整,改变了网站的目录结构,网页被移到一个新地址。或者网页扩展名改变,如因应用需要把.php改成.Html或.shtml,在这些情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失。又比如某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点,等等。
将虚拟主机配置文件修改为如下配置:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.111.com"
ServerName www.111.com
ServerAlias www.222.com
<IfModule mod_rewrite.c> //需要mod_rewrite模块支持
RewriteEngine on //打开rewrite功能
RewriteCond %{HTTP_HOST} ^www.222.com$ //定义rewrite的条件
RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行
</IfModule>
</VirtualHost>
查看是否开启 mod_rewrite 模块:
/usr/local/apache24/bin/apachectl -M|grep -i rewrite
返回如下信息则证明开启:
rewrite_module (shared)
测试:
curl -x127.0.0.1:80 -I www.222.com
返回如下信息:
HTTP/1.1 301 Moved Permanently
Date: Fri, 02 Mar 2018 13:37:51 GMT
Server: Apache/2.4.27 (Unix) PHP/7.0.27
Location: http://zabbix.123.com/
Content-Type: text/html; charset=iso-8859-1