0508LAMP架构(二)

0508LAMP架构(二)

一、Apache默认虚拟主机

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

1、在windows下写host

(1)按下图路径找到windows下的host文件

342d70c1300b6f5afde5f383766b3bcc7ed.jpg

(2)以记事本方式打开

b2c1d0e552e89d21a9d75a5a3c6691ead0b.jpg

(3)添加测试域名

6a659d293fa3bfabc64358336fe4389111e.jpg

(4)此时我们能够ping通

c959de8a34544591bab13796a2f562e76ff.jpg

(5)使用浏览器访问域名也能够访问成功

315c1605cfe56488564addf6751d9e79caf.jpg

2、在Linux下配置虚拟主机

(1)vim /usr/local/apache2.4/conf/httpd.conf  //编辑配置文件,搜索httpd-vhost,去掉#

e681131a9726f07ea880921e2bf200bf2cf.jpg

(2)打开二级配置文件(虚拟主机配置文件,可定义多个service name)

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

afaa93f09446aeeed0a1b036e3a7c9154b1.jpg

更改为以下内容:

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/abc.com" //定义网站的根目录

ServerNameabc.com //定义域名,只能写1个

ServerAliaswww.abc.com www.123.com //定义别名,可以写多个

ErrorLog "logs/abc.com-error_log" //定义错误日志

CustomLog "logs/abc.com-access_log" common //定义访问日志

</VirtualHost>

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName111.com

ServerAliaswww.example.com

ErrorLog "logs/111.com-error_log"

CustomLog "logs/111.com-access_log" common

</VirtualHost>

(3)创建和虚拟主机对应的站点根目录,以及新建相应index.php

b606afa95d4a2af7759b451f6c35e98a75d.jpg

721d7d7aeb341ea4a4226d7f04da6a9c760.jpg

(4)在111.com中也定义一个php

d5084f48ba41fd8d98676082496b3a771bc.jpg

73d0021a77d9fa0d5c7bddbd6d0b259aca4.jpg

(5)检查是否有错并重进加载

dc32e0aa37282421d70e2e918421908de08.jpg

(6)用curl -x192.168.133.130:80 abc.com 来测试,无论使用什么域名访问过来,解析到此ip都会指向到abc.com,此abc.com为虚拟主机配置文件中的第一个虚拟主机,它即为默认虚拟主机。

7a0103bef14f062eb32c920a70944773af3.jpg

111.com为第二个虚拟主机

bbc5c908551efba78caf20961ca1f481d13.jpg

结论:

1、主配置文件httpd.conf中,打开了虚拟主机配置文件httpd-vhost,conf,那么主配置文件中所定义的DocumentRoot以及Servername失效。

2、虚拟主机配置文件一旦打开,则里面可以定义很多个VirtualHost,每一个VirtualHost都有一个DocumentRoot和Servername,Servername可以写多个,每一个VirtualHost都代表一个站点,都是一个虚拟主机。在虚拟主机中有一个比较特殊的,叫默认虚拟主机,即无论任何域名解析到这个ip上,它都会去访问这个默认虚拟主机。

二、Apache用户认证

1、全局用户认证

编辑虚拟主机配置文件 httpd-vhosts.conf ,配置第二台虚拟主机信息 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

以下为配置信息,配置完后保存退出:

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com

<Directory /data/wwwroot/111.com> //指定认证的目录

AllowOverride AuthConfig //这个相当于打开认证的开关

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

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

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

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

</Directory>

ErrorLog "logs/111.com-error_log"

CustomLog "logs/111.com-access_log" common

</VirtualHost>

2、创建密码htpasswd命令

htpasswd命令是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。

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

New password:

Re-type new password:

Adding password for user luo

cat /data/.htpasswd luo:$apr1$XFA4gjrQ$z7d4/5h81llfs5jb5i/Ot.

-c为创建的意思,若想再增加一个用户张三,则不用再添加-c

/usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd zhangsan

New password:

Re-type new password:

Adding password for user zhangsan

cat /data/.htpasswd

luo:$apr1$XFA4gjrQ$z7d4/5h81llfs5jb5i/Ot.

zhangsan:$apr1$9JUoqWLH$MwA8PpAq.9ZtqHCjh9Qod/

3、重新加载测试

/usr/local/apache2.4/bin/apachectl -t //更改配置后,需要检查配置语法

Syntax OK

/usr/local/apache2.4/bin/apachectl graceful //需要加载

d66c6e01dfd820c5f165226a73b3eca9f06.jpg

再访问时会提示401错误,说明访问的内容需要做用户验证

bc89aa5e7ede327456adf8c050725de061f.jpg

curl命令的 -u 参数,可以登录用户名,及密码,状态码为200就意味登录成功

2bba0ea3570e23573f330a183e06ecae3c2.jpg

如果故意输错密码,则又会变为401

4fceb15e8ca9547a33afd88c052ac2b5aab.jpg

4、单个文件进行认证

(1)、编辑虚拟主机配置文件 httpd-vhosts.conf ,按下面修改信息;

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com

#<Directory /data/wwwroot/111.com> //加上#,这行不执行

<FilesMatch 123.php> //访问 123.php才认证

AllowOverride AuthConfig

AuthName "111.com user auth"

AuthType Basic

AuthUserFile /data/.htpasswd

require valid-user

</FilesMatch>

#</Directory>

ErrorLog "logs/111.com-error_log"

CustomLog "logs/111.com-access_log" common

</VirtualHost>

(2)、更改完毕后,检测重新加载

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

Syntax OK

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

(3)、在111.com目录下,新建123.php测试

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

8a68a1e52cd6b7356df9bb7aca3b919850d.jpg

访问123.php

curl -x192.168.133.130:80 111.com/123.php -I

HTTP/1.1 401 Unauthorized //401错误,需要用户认证

此时再用-u参数,将用户名luo,密码www123带上,再次访问123.php则成功:

curl -x192.168.112.136:80 -uluo:www123 111.com/123.php -I

HTTP/1.1 200 OK //200状态码,成功

结论:何时会用到用户认证?当有些内容不想让别人随便访问的时候,就需要用到用户认证

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

域名跳转类似于将网页重新指向另一个网站,但区别是域名跳转会将域名本身重新指向网站,而不使用HTML或脚本来进行重新指向。当域名被设置为跳转至另一网站,域名的地址将不会保留在浏览器的URL栏中,该栏显示的会是新页面的URL。如果您希望保留该栏中的URL,则需要使用隐形跳转。

1、编辑虚拟主机配置文件

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

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com 2111.com.cn

#<Directory /data/wwwroot/111.com> //去掉#,不执行

#<FilesMatch 123.php>

#AllowOverride AuthConfig

#AuthName "111.com user auth"

#AuthType Basic

#AuthUserFile /data/.htpasswd

#require valid-user

#</FilesMatch>

#</Directory> //去掉#,不执行

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP_HOST} !^111.com$ //定义rewrite的条件,主机名(域名)不是www.123.com满足条件

RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行

</IfModule>

ErrorLog "logs/111.com-error_log"

CustomLog "logs/111.com-access_log" common

 

</VirtualHost>

2、检测并加载

e776ed1c781d41712978102ab78d3f7456b.jpg

3、打开Apache的rewrite模块

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

搜索rewrite

将#删除,保存退出

7a2e1d6231c8a20d870a0486c99e54a66e1.jpg

再次检测加载

4、查看网络链接

:::80 代表全网都支持跳转

cae081d38fa3fd07baf903f5ab9956bcc9a.jpg

5、访问2111.com.cn

curl -x192.168.112.158:80 2111.com.cn -I //-I不显示访问内容,只显示状态码

HTTP/1.1 301 Moved Permanently //状态为301码,跳转

Date: Fri, 29 Jun 2018 02:55:49 GMT

Server: Apache/2.4.33 (Unix) PHP/7.1.6

Location: http://111.com/

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

6、访问真实存在的域名,会显示200状态码

a6196b781cc603b5c25db732d81200176ca.jpg

四、Apache访问日志

1、打开Apache日志目录

/usr/local/apache2.4/logs/

cat /usr/local/apache2.4/logs/111.com-access_log

c4e5d87b875209fca72105f86e8e69140a9.jpg

2、定义日志格式

打开apache主配置文件,查找日志的格式

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

搜索LogFormat

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined //复杂的格式

LogFormat "%h %l %u %t \"%r\" %>s %b" common //默认的格式

3、打开虚拟主机,配置文件

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

CustomLog "logs/111.com-access_log" combined //把之前的common,改为combined

重新加载主机配置文件

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

Syntax OK

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

curl -x192.168.112.158:80 111.com/123.php -I

HTTP/1.1 200 OK //200码

再次查看新生成的日志内容更加完善:

c7694bc41929ecc0f30d3b866cbea7e39b2.jpg

五、访问日志不记录静态文件

很多网站大多为静态网页,网页内部的图片、css文件等同样有其网址链接,我们可以通过设置不记录某些文件来减少无效信息,节省内存资源。

1、配置虚拟主机的配置文件

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

定义如下配置

</IfModule>

ErrorLog "logs/111.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/111.com-access_log" combined env=!img //不记录关于变量img的请求日志

</VirtualHost>

(1)保存加载配置前,先模拟访问jpg格式的图片,查看生成的访问日志

9168d068db4f5633ddca8b3c766f31f5bcc.jpg

(2)保存加载后,再次模拟访问jpg格式的图片,查看生成的访问日志,则不会包含jpg格式的日志,这样这些无效的访问日志就不会被记录占用空间,节省了内存资源。

六、访问日志切割

在每次打开一个网站后,访问日志都会有一条记录,总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除旧的日志文件;

1、进入配置文件

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

2、修改配置文件如下

</IfModule>

ErrorLog "logs/111.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/111.com-access_%Y%m%d.log 86400" combined env=!img

 

</VirtualHost>

修改的CustomLog内容说明:

  • /usr/local/apache2.4/bin/rotatelogs工具是apache自带的分割日志的工具
  • -l参数按当前系统时间为基准进行切割(我国为CST),否则默认UTC(美国)
  • %Y%m%d表示年月日,这样会每天记录一个带日期的日志文件,更方便
  • 86400(s)表示每天都进行切割,一天24小时等于86400秒
  • 还需要做一个任务计划,把超过一个月的日志删除

七、配置静态元素过期时间

静态元素:比如访问的图片、css、js等

当使用浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了。 但是缓存多久呢?如果网站图片更新了呢,那么应该访问新图片才是。所以这就涉及到静态文件缓存时长的问题了,也就是“缓存过期时间”。

1、进入配置文件,启用expires模块

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

LoadModule expires_module modules/mod_expires.so //去掉#,加载模块

2、再次进入虚拟机配置文件

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

添加以下配置内容:

<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>

相关的名词定义:

Acess:表示从访问时间开始

Now:表示按当前时间开始

Plus:在前面的时间基础上加

1 hours/days:表示文件的生命周期

示例:access plus 24 hours 指该文件从访问的时间开始24小时内有效,无需重新获取。

3、保存配置文件,检查语法错误,重新加载

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

Syntax OK

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

 

                 课堂笔记

1、学会多种途径搜索解决问题的方法

2、Apache2编译安装的另一种方法

下载apr-1.6、apr-util-1.6以及httpd-2.4,分别解压三个源码包

把apr-1.6.3 放到httpd源码包的/srclib/下,改名apr

把apr-util-1.6.1 放到httpd源码包的/srclib/下,改名apr-util4)编译参数./configure --prefix=/dir/ --enable-so --enable-mpms-shared=all --with-mpm=event --enable-mods-shared=most --with-included-apr

说明:这里的/dir/为apache安装路径,根据需求定目录

apache的一些学习文档: https://github.com/aminglinux/apache

转载于:https://my.oschina.net/u/4095803/blog/3047969

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值