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

标签: web, 优化

添加新评论