Apache默认虚拟主机 用户认证 域名跳转 访问日志 日志切割 静态元素过期时间...

Apache默认虚拟主机

默认虚拟主机,可以理解成Apache(也就是httpd),一个服务下面跑多了多个网站,跑了多个域名 - 例子,假如在服务器上,它既能访问百度,又能访问谷歌,这是两个不同的网站,但同时都在一台服务器运行着,就用了一个httpd的服务,这个就是一个网站多个域名,每一个域名对着一个虚拟主机

  • 一台服务器可以访问多个网站,每个网站都是一个虚拟主机
  • 概念:域名(主机名)、DNS、解析域名、hosts
  • 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机

配置如下:

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

//搜索httpd-vhost,去掉# 

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //改为如下

<VirtualHost *:80>
    ServerAdmin harry@harrylinux.com
    DocumentRoot "/data/wwwroot/harry.com"
    ServerName harry.com
    ServerAlias www.harry.com
    ErrorLog "logs/haryy.com-error_log"
    CustomLog "logs/harry.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com

//启动apache
[root@harry-01 data]# /usr/local/apache2.4/bin/apachectl -t 
Syntax OK
[root@harry-01 data]# /usr/local/apache2.4/bin/apachectl graceful 
httpd not running, trying to start
[root@harry-01 data]# /usr/local/apache2.4/bin/apachectl start 
httpd (pid 2291) already running
[root@harry-01 data]# /usr/local/apache2.4/bin/apachectl graceful 
[root@harry-01 data]# 

 

更改hosts :

hosts的作用:它的目的就是让你临时访问到一个服务器上去

e8cdaae49e4d229586d51b2e28541943359.jpg可以在这个里面定义一个IP,定义一个域名,然后让这个域名指向到这个IP上去

格式: 192.168.31.137           www.haryy.com  

           192.168.31.137           www.123.com 

物理机去ping 网址,能看到都能ping通 

5043494aee2564f447c2865f694b5e69ef0.jpg

 

然后用物理机中的浏览器去访问www.abc.co测试虚拟主机m或www.123.com  出现了403错误  没有权限进入这台服务器。

b443dff6e74f8e30cf6b32e852762c9d756.jpg

第一步:

apache主配置文件修改:

用文本编辑器打开apache的conf目录下 httpd.conf

将下面以下代码取消注释

LoadModule rewrite_module  modules/mod_rewrite.so

Include conf/extratpd-vhosts.conf

 

第二步:

httpd-vhosts.conf文件修改

<VirtualHost *:80>
    ServerAdmin harry@harrylinux.com
    DocumentRoot "/data/wwwroot/harry.com"  //虚拟主机根目录

    ServerName harry.com
    ServerAlias www.harry.com
    ErrorLog "logs/haryy.com-error_log"
    CustomLog "logs/harry.com-access_log" common
<Directory "/data/wwwroot/harry.com/">  //目录权限

    Options FollowSymLinks Indexes
    AllowOverride none
    Order deny,allow
    Allow from all
</Directory>

</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"  //虚拟主机根目录
    ServerName www.123.com
<Directory "/data/wwwroot/www.123.com/">   //目录权限
    Options FollowSymLinks Indexes
    AllowOverride none
    Order deny,allow
    Allow from all

然后在虚拟的根目录下创建测试文件

<?php
phpinfo()
?>

fad25e35423f2766acf0da7f8516eb5e61d.jpg

5ad0458b62e7cc438aa9947302ba4d045ae.jpg

 

测试虚拟主机

curl -x命令

假如现在要访问harry.com,若不去绑定hosts,那么在虚拟机中ping www.abc.com会ping到外网上去,并没有在这台机器上。若想要访问harry.com在在这台机器上,可以编辑/etc/hosts文件去指定下,或者使用curl -x选项

77175dbdae1fdf949896c2e76b72f0a8af5.jpg

默认虚拟主机,就是无论访问什么域名,只要解析到192.168.31.137IP上,它都会访问这个网站对应的虚拟主机配置

在主配置文件中,httpd.conf里面,打开了虚拟主机配置文件,也就是删除到 # 号,那虚拟主机配置就生效了,一旦虚拟主机配置文件生效,那主配置文件里面所定义的DocumentRoot以及ServerName失效

虚拟主机配置文件一旦打开,可以定义很多个VirtualHost,每一个VirtualHost都都有一个对应的 DocumentRoot 和 ServerName ,每一个VirtualHost都代表着一个站点,都是一个虚拟主机。在虚拟主机里面有一个特殊的默认虚拟主机,所谓默认虚拟主机就是无论任何域名解析到这个IP上,都会去访问默认虚拟主机
 

Apache用户认证

配置用户认证

编辑虚拟主机配置文件“httpd-vhosts.conf 内容如下: 

<VirtualHost *:80>
    ServerAdmin harry@harrylinux.com
    DocumentRoot "/data/wwwroot/harry.com"
    ServerName harry.com
    ServerAlias www.harry.com
    ErrorLog "logs/haryy.com-error_log"
    CustomLog "logs/harry.com-access_log" common
<Directory "/data/wwwroot/harry.com/"> #指定认证的目录
    Options FollowSymLinks Indexes
    AllowOverride AuthConfig  #该行相当于打开用户认证的开关
    AuthType Basic                 #认证类型,一般为basic
    AuthUserFile /data/.htpasswd   #指定密码文件所在位置(需要手动添加)
    require valid-user   #设定需要认证的用户为“AuthUserFile”中定义的所有可用用户
    Order deny,allow
    Allow from all

</Directory>

</VirtualHost>

 

创建“httpd-vhosts.conf”中指定的密码文件

 

[root@harry-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
[root@harry-01 ~]# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd 123
New password: 
Re-type new password: 
Adding password for user 123
[root@harry-01 ~]# [root@harry-01 ~]# cat /data/.htpasswd 
123:$apr1$4AdnPKdh$nz.3JkuXn0cAooEyD0FrS1
[root@harry-01 ~]# 

在“/data/.htpasswd”为用户adai(自动创建)创建一个使用MD5算法加密的密码文件。注意: 只有在第一次创建该文件时加-c选项。

 

配置完成后重新加载

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

测试。此时提示状态码为“401”,说明当前所访问的内容需要进行用户认证。

[root@harry-01 ~]# curl -x192.168.31.137:80  haryy.com -I
HTTP/1.1 401 Unauthorized
Date: Mon, 03 Dec 2018 20:03:19 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
WWW-Authenticate: Basic realm="harry.com user auth"
Content-Type: text/html; charset=iso-8859-1

使用用户&密码访问:

[root@harry-01 ~]# curl -x192.168.31.137:80 -uharry:123 haryy.com -I
HTTP/1.1 200 OK
Date: Mon, 03 Dec 2018 20:02:45 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
Content-Type: text/html;charset=ISO-8859-1

状态码“200”,即访问成功

用浏览器测试:

962876ef1354e31502566c64923fb51db4f.jpg

 

对网站中指定文件设置用户认证!

虚拟主机配置如下:

[root@harry-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 

内容如下:
<VirtualHost *:80>
    ServerAdmin harry@harrylinux.com
    DocumentRoot "/data/wwwroot/harry.com"
    ServerName harry.com
    ServerAlias www.harry.com
    ErrorLog "logs/haryy.com-error_log"
    CustomLog "logs/harry.com-access_log" common
<Directory "/data/wwwroot/harry.com/">

    AllowOverride AuthConfig
    AuthName "harry.com user auth"
    AuthType Basic
    AuthUserFile /data/.htpasswd
    require valid-user
    Options FollowSymLinks Indexes
    Order deny,allow
    Allow from all
</Directory>

检测:

[root@harry-01 ~]# curl -x192.168.31.137:80 harry.com/1.php -I
HTTP/1.1 401 Unauthorized
Date: Mon, 03 Dec 2018 20:21:34 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
WWW-Authenticate: Basic realm="harry.com user auth"
Content-Type: text/html; charset=iso-8859-1

[root@harry-01 ~]# curl -x192.168.31.137:80 -uharry:123 harry.com/1.php -I
HTTP/1.1 200 OK
Date: Mon, 03 Dec 2018 20:22:07 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
X-Powered-By: PHP/5.6.32
Content-Type: text/html; charset=UTF-8

a53d8943efb48ff319ed24a7b6c4db62896.jpg

htpasswd命令

语法: htpasswd [option] [参数]

-c:=create,创建一个加密文件

-n:不更新加密文件,只将更新后的用户名密码显示在屏幕上

-m:使用MD5算法对密码进行加密(默认)

-d:使用CRYPT算法对密码进行加密

-p:不对密码进行加密,即明文密码

-s:使用SHA算法对密码进行加密

-b:在命令行一并输入用户名和密码,而不是根据提示输入密码

-D:删除指定用户

 

域名跳转

域名跳转分类及区别

种类:

301表示永久跳转;302表示临时跳转。

区别:

使用效果不同

  • 302跳转是暂时的跳转,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。
  • 301重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址

SEO使用方式不同

在搜索引擎优化中302跳转被众多黑帽SEO优化人员追求,对网站进行恶意302跳转至非用户目标访问网站,因此搜索引擎对于网站的302跳转通常是比较不友好,所以要慎用302跳转!

SEO

SEO(Search Engine Optimization)搜索引擎优化,在了解搜索引擎自然排名机制的基础上,对网站进行内部及外部的调整优化,改进网站在搜索引擎中的关键词自然排名,获得更多流量,从而达成网站销售及品牌建设的预期目标。

域名跳转配置

配置虚拟主机配置文件:httpd-vhosts.conf

[root@harry-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 


<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com
    <IfModule mod_rewrite.c>
    #需要mod_rewrite的支持
    RewriteEngine on
     #开启rewrite功能
    RewriteCond %{HTTP_HOST} !^www.123.com$
    #Cond=condition,定义rewrite条件:所有非111.com的主机名(域名)
    RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L]
     #定义rewrite规则:当满足上面条件时才执行当前规则,即跳转到111.com。
    </IfModule>
    ErrorLog "logs/111.com-error_log"
    Customlog "logs/111.com-access_log" common
<Directory "/data/wwwroot/www.123.com/">
    Options FollowSymLinks Indexes
    AllowOverride none
    Order deny,allow
    Allow from all
</Directory>

</VirtualHost>

 

检查系统配置:

[root@harry-01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@harry-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@harry-01 ~]# /usr/local/apache2.4/bin/apachectl -M
#在此检查Apache是否加载了虚拟主机配置中调用的rewrite模块,如果没有加载,需要编辑Apache配置文件“httpd.conf”

LoadModule rewrite_module modules/mod_rewrite.so

LoadModule php5_module        modules/libphp5.so

使用curl检测:

[root@harry-01 ~]# curl -x192.168.31.137:80 www.example.com -I
HTTP/1.1 301 Moved Permanently
Date: Tue, 04 Dec 2018 05:18:47 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
Location: http://www.123.com/
Content-Type: text/html; charset=iso-8859-1

[root@harry-01 ~]# 

此时,状态码为301,即设定了域名永久跳转!

在浏览器进行检测时,访问“www.example.com”会直接跳转到“www.123.com”

 

访问日志

日志文件所在位置:/usr/local/apache2.4/logs

a994893556d6744635a2a5b1f53ed7fa2ef.jpg

2591242d063616588fac12c22398cca8ffd.jpg

 

自定义日志格式

系统自带日志格式:combined   common

默认使用common模式。

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

#h表示host来源IP,l表示login用户,u表示user用户密码,t表示time时间,r表示request(行为),s表示status状态码,b表示byte大小

#user-agent:用户代理

#referer:跳转到当前位置的上一个网址(即:提供当前IP的网站)

 

配置日志格式

编辑虚拟主机配置文件“httpd-vhosts.conf”

将日志文件后面原有 common改为combined。

<VirtualHost *:80>
    ServerAdmin harry@harrylinux.com
    DocumentRoot "/data/wwwroot/harry.com"
    ServerName harry.com
    ServerAlias www.harry.com
    ErrorLog "logs/haryy.com-error_log"
    CustomLog "logs/harry.com-access_log" combined
<Directory "/data/wwwroot/harry.com/">

    AllowOverride AuthConfig
    AuthName "harry.com user auth"
    AuthType Basic
    AuthUserFile /data/.htpasswd
    require valid-user
    Options FollowSymLinks Indexes
    Order deny,allow
    Allow from all
</Directory>

 

重新加载后查看样式:

[root@harry-01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@harry-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@harry-01 ~]# cat /usr/local/apache2.4/logs/harry.com-access_log 

b1b3cd91f08d3fc97cd4bc01a971e36094a.jpg

 

访问日志不记录静态文件

 

编辑虚拟主机配置文件“httpd-vhosts.conf”

[root@harry-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com
    ServerAlias www.example.com
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^www.123.com$
    RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L]
    </IfModule>
    ServerName www.123.com
    ServerAlias www.example.com
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^www.123.com$
    RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L]
    </IfModule>
    RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L]
    </IfModule>
    ErrorLog "logs/www.123.com-error_log"
    setEnvIf Request_URI ".*\.gif$" img
    setEnvIf Request_URI ".*\.jpg$" img
    setEnvIf Request_URI ".*\.bmp$" img
    setEnvIf Request_URI ".*\.swf$" img
    setEnvIf Request_URI ".*\.js$" img
    setEnvIf Request_URI ".*\.css$" img
    #以上为定义变量:将所有关于图片的请求定义为变量img
    Customlog "logs/www.123.com-access_log" combined
    #“env=!img”表示非img变量。本行命令的含义是:不记录关于变量img的请求日志。
<Directory "/data/wwwroot/www.123.com/">
    Options FollowSymLinks Indexes
    AllowOverride none
    Order deny,allow
    Allow from all
</Directory>

</VirtualHost>

将所有访问图片的请求定义为变量img,在访问记录(日志)中将其排除即可。重新加载后使用curl访问img变量中所指定格式的文件内容时将不会产生访问记录

 

访问日志切割

 

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

把虚拟主机配置文件改成如下:

[root@harry-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 

更改CustomLog配置

1.首先指定一个工具rotatelogs

2.在定义一个日志的名称%Y%m%d

3.规定时间去生成,时间段就为1天,换算成秒,就是86400秒

CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img

rotatelogs工具,它是Apache自带的一个切割工具

-l参数,目的是以当前系统时间为基准。如果不指定 -l ,那么就会指定 UTC时间 的格式去切割日志

在中国是 CST,在美国是 UTC ,两者时区不同

 

定义日志的名称,因为是切割的,所以根据时间日期让它自动变,就需要加一个变量%Y%m%d

  • %Y,表示 年
  • %m,表示 月
  • %d,表示 日

按规定时间去生成,时间段为1天,换算成秒,就是86400秒

查看配置文件语法有无错误,并重新加载配置文件

140488eedd98b631788a02ea4b1ecd5148e.jpg

这时候还需要去做一些访问,因为还没有任何的日志生成,在这个目录下还没有生成一个新的文件

[root@harry-01 ~]# ls /usr/local/apache2.4/logs/
access_log  error_log  harry.com-access_log  haryy.com-error_log  httpd.pid  www.123.com-access_log  www.123.com-error_log

#用curl命令访问
[root@harry-01 ~]# curl -x192.168.31.137:80 www.123.com/1.php

#这时候会看到一个以日期为后缀的新日志文件
[root@harry-01 ~]# ls /usr/local/apache2.4/logs/
access_log  harry.com-access_log  httpd.pid                        www.123.com-access_log
error_log   haryy.com-error_log   www.123.com-access_20181204.log  www.123.com-error_log

 

查看新生成的日志文件内容,会看到就是刚刚curl命令访问的

f2b5b3598db6474326b27784ebd30894e2b.jpg

 

配置静态元素过期时间

静态元素,就是访问的图片、css、js

当用浏览器去访问一个网站的时候,这个网站里所有的静态文件(比如图片的样式、js),浏览器就会默认把静态文件缓存在电脑里,叫做临时的目录或目录

缓存的时间是在服务器上定义的,如果不去定义,那么浏览器也不会把这些文件清空,或者浏览器有自己的机制去清空这些文件,或者说电脑软件会定时帮你清理这些缓存的文件

为什么电脑会自动加载这些静态文件呢?目的就是第二次,第三次访问的时候,不去服务器去下载这些静态文件了

定义静态文件失效日期

启用expires_module模块,定义失效日期

b990ea396cffcb119cb4613e312d0b979f9.jpg

 

打开虚拟主机配置文件vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf,并添加配置文件

  • 这里有所有的图片定义成一天
  • 所有的 css 和 js 都定义成两小时
  • 其他的没有任何的缓存
[root@harry-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 

<IfModule mod_expires.c>
    ExpiresActive on      #打开该功能的开关
    ExpiresByType image/gif "access plus 1 days" #定义Type类型,这里是一天
    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>

然后检查是否存在语法错误

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

 

按ctrl+F5可以强制把浏览器本地的缓存清空

用curl命令去访问图片

[root@harry-01 ~]# curl -x192.168.31.137:80 www.123.com/sugar.jpg -I
HTTP/1.1 200 OK
Date: Tue, 04 Dec 2018 13:57:16 GMT #当前时间
Server: Apache/2.4.33 (Unix) PHP/5.6.32
Last-Modified: Tue, 04 Dec 2018 12:17:46 GMT
ETag: "26bfc-57c3140cd6e80"
Accept-Ranges: bytes
Content-Length: 158716
Cache-Control: max-age=86400  #缓存的时间
Expires: Wed, 05 Dec 2018 13:57:16 GMT  #过期时间
Content-Type: image/jpeg

 

转载于:https://my.oschina.net/u/3993226/blog/2967679

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值