一、Apache用户认证

   功能是用户在访问网站时,需要输入用户名和密码才能进入网站。一些重要站点或网站后台通常加用户认证,目的是保证安全。

# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

DocumentRoot "/data/wwwroot/111.com"

   ServerName 111.com

   ServerAlias www.example.com

      //指定认证的目录

      AllowOverride AuthConfig                //打开认证的开关

      AuthName "111.com user auth"       //自定义认证的名字,作用不大  

      AuthType Basic                                 //认证的类型,一般为Basic

      AuthUserFile /data/.htpasswd           //指定密码文件所在位置

      require valid-user                   //指定需要认证的用户为全部可用用户

   

   ErrorLog "logs/111.com-error_log"

   CustomLog "logs/111.com-access_log" common

httpd配置文件配置完成,创建密码文件:

# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd MRX

New password:

Re-type new password:

Adding password for user MRX

     htpasswd命令为创建用户的工具,-c创建(create),-m指定密码加密方式为MD5,再加上用户名;

       /data/.htpasswd为密码文件,MRX为要创建的用户,第一次执行该命令需要加-c;

       第二次再创建新的用户时,就不用加-c了,否则/data/.htpasswd文件会被重置,之前的用户被清空。

# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

# /usr/local/apache2.4/bin/apachectl graceful

# curl -x 127.0.0.1:80 111.com

</span><span style="font-size: 18px; color: rgb(223, 64, 42);">401</span><span style="font-size: 18px;"> Unauthorized

Unauthorized

This server could not verify that you

are authorized to access the document

requested.  Either you supplied the wrong

credentials (e.g., bad password), or your

browser doesn't understand how to supply

the credentials required.

    //401状态码,表示访问的内容需要做用户验证,验证不对就401,对就200。

    可以在浏览器访问这个111.com,前提是需要在Windows的hosts文件里加上111.com。

# curl -x 127.0.0.1:80 -uMRX:12345 111.com

111.com[root@MRX ~]#        //访问成功,状态码200。

-u:指定用户名和密码

       上面的操作是对整个站点做的认证,其实也可以针对某个目录或者文件进行认证,比如对www.111.com/admin/目录进行认证,只需要修改一个地方,把;如果是文件,则需要这样改:

#  //注释掉

<FilesMatch 123.php>

AllowOverride AuthConfig

AuthName "111.com user auth"

AuthType Basic

AuthUserFile /data/.htpasswd

require valid-user

</FilesMatch>

#    //注释掉

# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

# /usr/local/apache2.4/bin/apachectl graceful

# vim /data/wwwroot/111.com/123.php

echo "123,php";

# curl -x 127.0.0.1:80 111.com/123.php -I  //此时访问这个文件时就会401

HTTP/1.1 401 Unauthorized

Date: Fri, 13 Apr 2018 10:26:40 GMT

Server: Apache/2.4.33 (Unix) PHP/7.1.6

WWW-Authenticate: Basic realm="111.com user auth"

Content-Type: text/html; charset=iso-8859-1


二、域名跳转(域名重定向)

301状态码:永久重定向,永久跳转。将权重转移。

域名跳转的作用:

1.一个站点有多个域名会对SEO有影响。

2.若之前的某个域名不再使用,但是搜索引擎还留着之前老域名的链接,意味着用户可能会搜到并点击老域名,则需要把老域名做个跳转,跳到新域名,这样用户搜索老域名的时候,可以直接跳转访问到新网站。

# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

   DocumentRoot "/data/wwwroot/111.com"

   ServerName 111.com

   ServerAlias www.example.com 2111.com.cn

  //需要mod_rewrite模块支持

       RewriteEngine on          //打开rewrite功能

       RewriteCond %{HTTP_HOST} !^111.com$

//定义rewrite的条件,当访问的主机名(域名)不是111.com时满足条件。以111开头^,以com结尾$的跳转到111.com来。

       RewriteRule ^/(.*)/([1-9]+)$ http://111.com/$1/$2 [R=301,L]

//定义rewrite规则,当满足上面的条件时,这条规则才会执行,跳到111.com,/(.*)意思是111.com/123.php,123.php就是.*,$1就是第一个小括号,$2第二个小括号,L:只跳转一次结束。302:临时重定向。

   

这里是在新域名的配置文件里做设置。

# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

# /usr/local/apache2.4/bin/apachectl graceful

测试前要看rewrite的模块是否打开:

# /usr/local/apache2.4/bin/apachectl -M |grep rewrite

进入主配置文件打开:

# vim /usr/local/apache2.4/conf/httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so

把这行的#去掉。

# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

# /usr/local/apache2.4/bin/apachectl graceful

# /usr/local/apache2.4/bin/apachectl -M |grep rewrite

rewrite_module (shared)

模块加载好,开始测试:

# curl -x 127.0.0.1:80 2111.com.cn -I

HTTP/1.1 301 Moved Permanently        状态码301

Date: Fri, 13 Apr 2018 12:17:18 GMT

Server: Apache/2.4.33 (Unix) PHP/7.1.6

Location: http://111.com/

Content-Type: text/html; charset=iso-8859-1

# curl -x 127.0.0.1:80 2111.com.cn

301 Moved Permanently

Moved Permanently

The document has moved http://111.com/">here.

跳到了111.com


三、Apache访问日志

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com 2111.com.cn

#

#

#    AllowOverride AuthConfig

#    AuthName "111.com user auth"

#    AuthType Basic

#    AuthUserFile /data/.htpasswd

#    require valid-user

#

#

RewriteEngine on

RewriteCond %{HTTP_HOST} !^111.com$

RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]

ErrorLog "logs/111.com-error_log"

CustomLog "logs/111.com-access_log" common

该虚拟主机的访问日志路径:/usr/local/apache2.4/logs/111.com-access_log

127.0.0.1 - - [13/Apr/2018:20:17:08 +0800] "GET HTTP://2111.com.cn/ HTTP/1.1" 301 223

127.0.0.1 - - [13/Apr/2018:20:17:18 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 -

GET:没加-I;HEAD:加了-I,只显示状态码301。

HTTP/1.1:HTTP的版本;301状态码,223:大小。


# vim /usr/local/apache2.4/conf/httpd.conf

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

两种日志的格式,默认common。

User-Agent:浏览器标识。

Referer:User-Agent的上一步网址。

# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com 2111.com.cn

ErrorLog "logs/111.com-error_log"

CustomLog "logs/111.com-access_log" combined  更改格式

# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

# /usr/local/apache2.4/bin/apachectl graceful

# curl -x 127.0.0.1:80 111.com/123.php -I

# curl -x 127.0.0.1:80 111.com/123.php

# cat /usr/local/apache2.4/logs/111.com-access_log  刚改的格式发生变化

127.0.0.1 - - [13/Apr/2018:21:01:07 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 "-" "curl/7.29.0"

127.0.0.1 - - [13/Apr/2018:21:02:40 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - "-" "curl/7.29.0"

curl/7.29.0:这个就是User-Agent。


扩展 

apache虚拟主机开启php的短标签 http://ask.apelearn.com/question/5370