配置默认主机,Apache用户认证,域名跳转,Apache访问日志,访问日志

配置默认主机

任何一个域名指向这台服务器,只要是没有对应的虚拟主机,就会由这个默认虚拟主机来处理。先编辑一下配置文件httpd.confjavascript

vim /usr/local/apache2.4/conf/httpd.conf
搜索httpd-vhost找到这行吧行首的#号删除

保存主配置文件,而后编辑虚拟主机配置文件:php

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
// 这个配置文件就是虚拟主机配置文件了,后面的操做都是在这个里面完成的。

这里面每个段,都是一个主机css

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/dummy-host.example.com-error_log"
    CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "/usr/local/apache2.4/docs/dummy-host2.example.com"
    ServerName dummy-host2.example.com
    ErrorLog "logs/dummy-host2.example.com-error_log"
    CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com                   //定义用户的邮箱,没用能够直接删掉
    DocumentRoot "/data/wwwroot/abc.com"    //定义网站的根目录
    ServerName abc.com
    ErrorLog "logs/abc-host2.example.com-error_log"                  //指定错误日志
    CustomLog "logs/abc-host2.example.com-access_log" common           //指定访问日志  
</VirtualHost>

建立一个网站根目录[root@aminglinux-01 ~]# mkdir /data/wwwroot/abc.comhtml

定义一个phpjava

[root@aminglinux-01 ~]# vim /data/wwwroot/abc.com/index.php


<?php
echo "abc.com";
?>
~
  • 测试一下虚拟主机

curl -x192.168.245.128:80 abc.comlinux

[root@aminglinux-01 ~]# curl -x192.168.245.128:80 abc.com
abc.com[root@aminglinux-01 ~]#

不生效的话 能够试着从新加载配置文件/usr/local/apache2.4/bin/apachectl gracefulweb

curl -x/--proxy 在给定的端口上使用HTTP代理apache

虚拟主机配置文件一但生效,其余配置就会失效。vim

所谓默认主机,不管任何域名解析到这个ip上,都会访问默认虚拟主机。浏览器


Apache用户认证

  • vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 把123.com那个虚拟主机编辑成以下内容

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com
    <Directory /data/wwwroot/www.123.com> //指定认证的目录
        AllowOverride AuthConfig //这个至关于打开认证的开关
        AuthName "123.com user auth" //自定义认证的名字,做用不大
        AuthType Basic //认证的类型,通常为Basic,其余类型阿铭没用过
        AuthUserFile /data/.htpasswd  //指定密码文件所在位置
        require valid-user //指定须要认证的用户为所有可用用户

改为:

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName abc.com
    ServerAlias www.abc.com
<Directory /data/wwwroot/abc.com>
    AllowOverride AuthConfig
    AuthName "abc.com user auth"
    AuthType Basic
    AuthUserFile /data/.htpasswd
    require valid-user
    </Directory>
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common
</VirtualHost>
  • 而后添加如下用户名和密码以及所在位置

[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming
New password: 
Re-type new password: 
Adding password for user aming
[root@aminglinux-01 ~]#

-c 建立

htpasswd第一次建立用户要用到-c 参数 第2次就不能加-c了,不然会覆盖前面已创建好的用户

-m 指定密码加密类型

  • 从新加载

[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@aminglinux-01 ~]#
  • 验证

curl -x192.168.245.128:80 abc.com

[root@aminglinux-01 ~]# curl -x192.168.245.128:80 abc.com
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>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.</p>
</body></html>

出现401报错,从浏览器输入网址,提示须要输入用户名密码

或者curl -x192.168.245.128:80 -uaming:123456 abc.com -I 出现状态码 200

[root@aminglinux-01 ~]# curl -x192.168.245.128:80 -uaming:123456 abc.com -I
HTTP/1.1 200 OK
Date: Mon, 09 Oct 2017 10:16:45 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8

这样就成功了

  • 还能够针对单个文件进行认证

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com
    <FilesMatch admin.php>   
        AllowOverride AuthConfig
        AuthName "123.com user auth"
        AuthType Basic
        AuthUserFile /data/.htpasswd
        require valid-user
    </FilesMatch>
</VirtualHost>

惟一的区别就是<FilesMatch admin.php> ,指定的是单个文件才会出现认证。而以前是用Directory指定整个目录

FilesMatch后面的文件是相对路径,而Files、Directory则使用绝对路径


域名跳转

  • 需求,把2111.com.cn域名跳转到www.abc.com,配置以下:

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com
    ServerAlias 123.com
    <IfModule mod_rewrite.c> //须要mod_rewrite模块支持
        RewriteEngine on  //打开rewrite功能
        RewriteCond %{HTTP_HOST} !^www.123.com$  //定义rewrite的条件,主机名(域名)不是www.123.com知足条件
        RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L] //定义rewrite规则,当知足上面的条件时,这条规则才会执行
</IfModule>
</VirtualHost> 
 /usr/local/apache2/bin/apachectl -M|grep -i rewrite //若无该模块,须要编辑配置文件httpd.conf,删除rewrite_module (shared) 前面的#

实际写成这样子:

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName abc.com
    ServerAlias abc.com www.example.com 2111.com.cn
#<Directory /data/wwwroot/abc.com> 
#    AllowOverride AuthConfig 
#    AuthName "abc.com user auth" 
#    AuthType Basic 
#    AuthUserFile /data/.htpasswd 
#    require valid-user 
#    </Directory>
<IfModule mod_rewrite.c> 
        RewriteEngine on  
        RewriteCond %{HTTP_HOST} !^www.abc.com$  
        RewriteRule ^/(.*)$ http://www.abc.com/$1 [R=301,L] 
</IfModule>
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common
</VirtualHost>
  • 检测

检测,重新加载

[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@aminglinux-01 ~]#

检测前先查看这个模块有没有起来 /usr/local/apache2.4/bin/apachectl -M|grep -i rewrite

若是没有起来须要编辑配置文件httpd.conf

[root@aminglinux-01 ~]# vi /usr/local/apache2.4/conf/httpd.conf

搜索一下rewrite

LoadModule rewrite_module modules/mod_rewrite.so
找到这一行,把#号删掉

在检测rewrite模块

[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl -M|grep rewrite
 rewrite_module (shared)
[root@aminglinux-01 ~]#

检测,从新加载

Syntax OK
[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl graceful

查看结果 -I 是只看状态码

[root@aminglinux-01 ~]# curl -x192.168.245.128:80  2111.com.cn
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.abc.com/">here</a>.</p>
</body></html>

[root@aminglinux-01 ~]# curl -x192.168.245.128:80  2111.com.cn -I
HTTP/1.1 301 Moved Permanently
Date: Mon, 09 Oct 2017 14:08:44 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Location: http://www.abc.com/
Content-Type: text/html; charset=iso-8859-1

[root@aminglinux-01 ~]#

Apache访问日志

  • 访问日志记录用户的每个请求

  • vim /usr/local/apache2.4/conf/httpd.conf //搜索LogFormat

日志格式,默认是common

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

"%{User-Agent}i" 用户代理

"%{Referer}i" 浏览器上一次访问的网站是什么

  • 那怎样去用combined呢,须要修改虚拟主机配置文件

ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common

修改成

ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" combined

从新加载配置文件 -t,graceful

在访问一下:[root@aminglinux-01 ~]# curl -x192.168.245.128:80 2111.com.cn -I

  • 再去查看日志就会发现变化

[root@aminglinux-01 ~]# cat /usr/local/apache2.4/logs/abc.com-access_log

原来common

[root@aminglinux-01 ~]# cat /usr/local/apache2.4/logs/abc.com-access_log
192.168.245.128 - - [09/Oct/2017:17:07:36 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7
192.168.245.128 - - [09/Oct/2017:17:31:25 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7
192.168.245.128 - - [09/Oct/2017:17:53:56 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7
192.168.245.1 - - [09/Oct/2017:17:55:37 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.1 - - [09/Oct/2017:17:55:40 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.1 - - [09/Oct/2017:17:56:03 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.1 - - [09/Oct/2017:17:57:26 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.128 - - [09/Oct/2017:17:58:10 +0800] "GET HTTP://www.abc.com/ HTTP/1.1" 200 7
192.168.245.1 - - [09/Oct/2017:17:59:16 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.128 - - [09/Oct/2017:18:01:40 +0800] "GET HTTP://www.abc.com/ HTTP/1.1" 200 7
192.168.245.1 - - [09/Oct/2017:18:03:15 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.128 - - [09/Oct/2017:18:03:18 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7
192.168.245.128 - - [09/Oct/2017:18:10:01 +0800] "GET HTTP://abc.com/ HTTP/1.1" 401 381
192.168.245.1 - - [09/Oct/2017:18:11:03 +0800] "GET /1.php HTTP/1.1" 401 381
192.168.245.1 - - [09/Oct/2017:18:13:17 +0800] "GET /1.php HTTP/1.1" 401 381
192.168.245.1 - aming [09/Oct/2017:18:14:54 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.1 - aming [09/Oct/2017:18:14:57 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.1 - aming [09/Oct/2017:18:15:40 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.1 - aming [09/Oct/2017:18:15:43 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.128 - aming [09/Oct/2017:18:16:26 +0800] "HEAD HTTP://abc.com/ HTTP/1.1" 200 -
192.168.245.128 - aming [09/Oct/2017:18:16:39 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7
192.168.245.128 - aming [09/Oct/2017:18:16:45 +0800] "HEAD HTTP://abc.com/ HTTP/1.1" 200 -
192.168.245.128 - - [09/Oct/2017:22:08:34 +0800] "GET HTTP://2111.com.cn/ HTTP/1.1" 301 227
192.168.245.128 - - [09/Oct/2017:22:08:44 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 -
192.168.245.128 - - [09/Oct/2017:22:11:47 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 -

改成combined

[root@aminglinux-01 ~]# cat /usr/local/apache2.4/logs/abc.com-access_log
192.168.245.128 - - [09/Oct/2017:17:07:36 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7
192.168.245.128 - - [09/Oct/2017:17:31:25 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7
192.168.245.128 - - [09/Oct/2017:17:53:56 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7
192.168.245.1 - - [09/Oct/2017:17:55:37 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.1 - - [09/Oct/2017:17:55:40 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.1 - - [09/Oct/2017:17:56:03 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.1 - - [09/Oct/2017:17:57:26 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.128 - - [09/Oct/2017:17:58:10 +0800] "GET HTTP://www.abc.com/ HTTP/1.1" 200 7
192.168.245.1 - - [09/Oct/2017:17:59:16 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.128 - - [09/Oct/2017:18:01:40 +0800] "GET HTTP://www.abc.com/ HTTP/1.1" 200 7
192.168.245.1 - - [09/Oct/2017:18:03:15 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.128 - - [09/Oct/2017:18:03:18 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7
192.168.245.128 - - [09/Oct/2017:18:10:01 +0800] "GET HTTP://abc.com/ HTTP/1.1" 401 381
192.168.245.1 - - [09/Oct/2017:18:11:03 +0800] "GET /1.php HTTP/1.1" 401 381
192.168.245.1 - - [09/Oct/2017:18:13:17 +0800] "GET /1.php HTTP/1.1" 401 381
192.168.245.1 - aming [09/Oct/2017:18:14:54 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.1 - aming [09/Oct/2017:18:14:57 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.1 - aming [09/Oct/2017:18:15:40 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.1 - aming [09/Oct/2017:18:15:43 +0800] "GET /1.php HTTP/1.1" 404 203
192.168.245.128 - aming [09/Oct/2017:18:16:26 +0800] "HEAD HTTP://abc.com/ HTTP/1.1" 200 -
192.168.245.128 - aming [09/Oct/2017:18:16:39 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7
192.168.245.128 - aming [09/Oct/2017:18:16:45 +0800] "HEAD HTTP://abc.com/ HTTP/1.1" 200 -
192.168.245.128 - - [09/Oct/2017:22:08:34 +0800] "GET HTTP://2111.com.cn/ HTTP/1.1" 301 227
192.168.245.128 - - [09/Oct/2017:22:08:44 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 -
192.168.245.128 - - [09/Oct/2017:22:11:47 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 -
192.168.245.128 - - [09/Oct/2017:22:36:01 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 - "-" "curl/7.29.0"
192.168.245.128 - - [09/Oct/2017:22:36:05 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 - "-" "curl/7.29.0"

访问日志不记录静态文件

  • 网站大多元素为静态文件,如图片、css、js等,这些元素能够不用记录

  • 把虚拟主机配置文件改为以下:

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName abc.com
    ServerAlias abc.com www.example.com 2111.com.cn
#<Directory /data/wwwroot/abc.com> 
#    AllowOverride AuthConfig 
#    AuthName "abc.com user auth" 
#    AuthType Basic 
#    AuthUserFile /data/.htpasswd 
#    require valid-user 
#    </Directory>
<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} !^www.abc.com$
        RewriteRule ^/(.*)$ http://www.abc.com/$1 [R=301,L]
</IfModule>
    ErrorLog "logs/abc.com-error_log"
    SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img 
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf Request_URI ".*\.css$" img
    CustomLog "logs/abc.com-access_log" combined env=!img  //表示符合img的请求都不会记录到日志里。
</VirtualHost>

访问日志切割

  • 日志一直记录总有一天会把整个磁盘占满,因此有必要让它自动切割,并删除老的日志文件

  • 把虚拟主机配置文件改为以下:

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName abc.com
    ServerAlias abc.com www.example.com 2111.com.cn
#<Directory /data/wwwroot/abc.com> 
#    AllowOverride AuthConfig 
#    AuthName "abc.com user auth" 
#    AuthType Basic 
#    AuthUserFile /data/.htpasswd 
#    require valid-user 
#    </Directory>
<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} !^www.abc.com$
        RewriteRule ^/(.*)$ http://www.abc.com/$1 [R=301,L]
</IfModule>
    ErrorLog "logs/abc.com-error_log"
    SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf Request_URI ".*\.css$" img
    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/abc.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>

用apache自带分割工具rotatelogs,以天天进行日志分割。-l的意思是用cst时间,不用-l是utc时间

配置静态元素过时时间

  • 浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了

  • 增长配置

<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} !^www.abc.com$
        RewriteRule ^/(.*)$ http://www.abc.com/$1 [R=301,L]
</IfModule>
<IfModule mod_expires.c>
    ExpiresActive on  
    ExpiresByType image/gif  "access plus 1 days"
    ExpiresByType image/jpeg "access plus 24 hours"
    ExpiresByType image/png "access plus 24 hours"
    ExpiresByType text/css "now plus 2 hour"
    ExpiresByType application/x-javascript "now plus 2 hours"
    ExpiresByType application/javascript "now plus 2 hours"
    ExpiresByType application/x-shockwave-flash "now plus 2 hours"
    ExpiresDefault "now plus 0 min"
</IfModule>


    ErrorLog "logs/abc.com-error_log"
    SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf Request_URI ".*\.css$" img
    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/abc.com-access_%Y%m%d.log 86400" combined env=!img
  • 而后须要增长一个模块

先看看这个模块有没有打开

[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep expire
[root@aminglinux-01 ~]#

明显没有打开

编辑主配置文件:/usr/local/apache2.4/conf/httpd.conf

找到expire哪一行,把前面#号删掉

[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep expire
 expires_module (shared)
[root@aminglinux-01 ~]#
  • curl测试,看cache-control: max-age


扩展学习:

相关文章
相关标签/搜索