一、Apache默认虚拟主机

  • 一台服务器可以访问多个网站,每个网站都是一个虚拟主机
  • 概念:域名(主机名)、DNS、解析域名、hosts
  • 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机
  • windows的hosts的文件路径:C:\Windows\System32\drivers\etc\hosts
  • 设定hosts可以临时将域名指定到设置的ip上去。
  • 打开虚拟主机,在/usr/local/apache2.4/conf/httpd.conf 配置文件中,将httpd-vhosts.conf这一行的注释去除。

  • 在虚拟主机配置文件中,可以自定义虚拟主机:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>                                                                                                           与结尾成对出现,表示为一个虚拟主机ServerAdmin webmaster@dummy-host.example.com                                           定义管理员的邮箱,可以删除。DocumentRoot "/usr/local/apache2/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>                                                                                                                  与首行成对出现,表示为一个虚拟主机

测试虚拟主机

  • curl -x命令
  1. 比如说,现在要访问abc,com,若不去绑定hosts,那么在虚拟机中ping www.abc.com会ping到外网上去,并没有在这台机器上。若想要访问abc.com在在这台机器上,可以编辑/etc/hosts文件去指定下,或者使用curl -x选项
  • 一旦让虚拟主机配置文件生效了,那么之前定义的www.example.com就会失效了

虚拟主机配置:

<VirtualHost *:80>DocumentRoot "/data/wwwroot/abc.com"ServerName abc.comServerAlias www.abc.com www.123.comErrorLog "logs/abc.com-error_log"CustomLog "logs/abc.com-access_log" common
</VirtualHost><VirtualHost *:80>DocumentRoot "/data/wwwroot/111.com"ServerName 111.comServerAlias www.example.comErrorLog "logs/111.com-error_log"CustomLog "logs/111.com-access_log" common
</VirtualHost>
  • 创建两个虚拟主机的网站根目录: mkdir -p /data/wwwroot/abc.com ;mkdir /data/wwwroot/111.com
  • 在两个根目录下,分别创建一个php文件,并编辑内容。
<?php
echo "111.com";
和
<?php
echo "abc.com";
  • 检查httpd配置文件是否正确:/usr/local/apache2/bin/apachectl -t
  • 重新加载配置文件:/usr/local/apache2/bin/apachectl graceful
  • 当输入的域名没有在虚拟主机配置文件中设置时,都会去访问默认的虚拟主机(第一个虚拟主机就是默认虚拟主机)。
  • curl -x192.168.199.128:80 abc.com 输出如图:
[root@gaodehua33 ~]# curl -x192.168.199.128:80 www.abc.com
abc.com[root@gaodehua33 ~]# curl -x192.168.199.128:80 www.abcd.com
abc.com[root@gaodehua33 ~]# curl -x192.168.199.128:80 www.abcde.com
abc.com[root@gaodehua33 ~]# curl -x192.168.199.128:80 www.456.com
abc.com[root@gaodehua33 ~]# curl -x192.168.199.128:80 www.example.com
111.com[root@gaodehua33 ~]# curl -x192.168.199.128:80 111.com

二、Apache用户认证

  • 修改虚拟主机配置文件:   vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
  • 本章使用浏览器进行检测的前提是在物理机hosts文件添加虚拟机IP和虚拟主机域名。
  • 编辑成如下内容:

[root@gaodehua33 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
……
<VirtualHost *:80>DocumentRoot "/data/wwwroot/111.com"ServerName 111.comServerAlias www.example.com<Directory /data/wwwroot/111.com>#指定认证的目录Allowoverride AuthConfig#该行相当于打开用户认证的开关AuthName "111.com user auth"#自定义认证的名字,作用不大AuthType Basic#认证类型,一般为basicAuthUserFile /data/.htpasswd#指定密码文件所在位置(需要手动添加)require valid-user#设定需要认证的用户为“AuthUserFile”中定义的所有可用用户</Directory>ErrorLog "logs/111.com-error_log"CustomLog "logs/111.com-access_log" common
</VirtualHost>
  • /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd qwe 生成密码文件
  1. 选项-c创建密码文件。注意: 只有在第一次创建该文件时加-c选项。
  2. 选项-m指定加密类型为MD5
  • 配置完成后重新加载
  1. /usr/local/apache2.4/bin/apachectl -t
  2. /usr/local/apache2.4/bin/apachectl graceful
  • 在linux使用命令curl可以访问加密的服务器:curl -x192.168.229.128:80 -uaming:73748196 111.com -I 
  1. 选项-x指定ip和端口
  2. 选项-u后面指定用户名和密码
  3. 选项-I只显示头部请求信息
  4. 状态码“200”,即访问成功。

htpasswd命令

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

[root@gaodehua33 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf<VirtualHost *:80>DocumentRoot "/data/wwwroot/111.com"ServerName 111.comServerAlias www.example.com#<Directory /data/wwwroot/111.com><FilesMatch 123.php>Allowoverride AuthConfigAuthName "111.com user auth"AuthType BasicAuthUserFile /data/.htpasswdrequire valid-user</FilesMatch>#</Directory>ErrorLog "logs/111.com-error_log"CustomLog "logs/111.com-access_log" common
</VirtualHost>

三、域名跳转

域名跳转分类及区别

  • 种类:
  1. 301表示永久跳转;302表示临时跳转。
  • 区别:
  1. 使用效果不同
  2. 302跳转是暂时的跳转,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。
  3. 301重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。
  4. SEO使用方式不同
  5. 在搜索引擎优化中302跳转被众多黑帽SEO优化人员追求,对网站进行恶意302跳转至非用户目标访问网站,因此搜索引擎对于网站的302跳转通常是比较不友好,所以要慎用302跳转!

SEO

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

域名跳转配置

  • 打开rewrite模块,修改vim /usr/local/apache2.4/conf/httpd.conf 去除#注释符号

  • 配置虚拟主机配置文件:httpd-vhosts.conf。
[root@gaodehua33 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
……
<VirtualHost *:80>DocumentRoot "/data/wwwroot/111.com"ServerName 111.comServerAlias www.example.com<IfModule mod_rewrite.c>#需要mod_rewrite的支持RewriteEngine on#开启rewrite功能RewriteCond %{HTTP_HOST} !^111.com$#Cond=condition,定义rewrite条件:所有非111.com的主机名(域名)RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]#定义rewrite规则:当满足上面条件时才执行当前规则,即跳转到111.com。</IfModule>ErrorLog "logs/111.com-error_log"CustomLog "logs/111.com-access_log" common
</VirtualHost>
  • 加载前使用选项-t查看配置文件是否正确
  • 选项-M查看rewrite模块是否开启
  • 加载配置文件 graceful  
[root@gaodehua33 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@gaodehua33 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@gaodehua33 ~]# /usr/local/apache2.4/bin/apachectl -M
  • 使用curl检测:
  • 此时,状态码为301,即设定了域名永久跳转!
  • 在浏览器进行检测时,访问“www.2111.com.cn”会直接跳转到“111.com”。
[root@gaodehua33 ~]# curl -x192.168.8.131:80 www.2111.com.cn -I
HTTP/1.1 301 Moved Permanently
Date: Mon, 31 Jul 2017 07:17:37 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Location: http://111.com/
Content-Type: text/html; charset=iso-8859-1

四、Apache访问日志

  • 在虚拟主机配置文件中可以指定日志的名称,默认日志路径为/usr/local/apache2.4/logs/(即apache的安装目录)

系统自带日志格式:

  • 即:有combinecommon两种格式,默认使用common模式。
[root@gaodehua33 ~]# vim /usr/local/apache2.4/conf/httpd.conf
.........
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %b" common
#h表示host来源IP,l表示login用户,u表示user用户密码,t表示time时间,r表示request(行为),s表示status状态码,b表示byte大小
其中referer:表示从哪一个链接跳转过来的。
user-agent:用户代理( 浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息)。
  • 编辑虚拟主机配置文件“httpd-vhosts.conf”:将虚拟主机配置文件中日志结尾处的common修改为combined,即可修改日志文件格式为第一种格式。

[root@gaodehua33 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>DocumentRoot "/data/wwwroot/111.com"ServerName 111.comServerAlias www.example.com<IfModule mod_rewrite.c>RewriteEngine onRewriteCond %{HTTP_HOST} !^111.com$RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]</IfModule>ErrorLog "logs/111.com-error_log"CustomLog "logs/111.com-access_log" combined
</VirtualHost>

重新加载测试:


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

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

  • apache的访问日志会记录网站每个文件被获取的信息,这样日志信息量会很大,我们排查日志的时候不容易筛选有用的记录。我们可以把静态文件的日志设置为不记录,提高我们排查日志信息的效率
  • 编辑虚拟主机配置文件“httpd-vhosts.conf”:
  • 重新加载配置文件后(-t,graceful),即可在日志中不记录设定的静态文件。
[root@gaodehua33 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
……
<VirtualHost *:80>DocumentRoot "/data/wwwroot/111.com"ServerName 111.comServerAlias www.example.com<IfModule mod_rewrite.c>RewriteEngine onRewriteCond %{HTTP_HOST} !^111.com$RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]</IfModule>ErrorLog "logs/111.com-error_log"SetEnvIf Request_URI ".*\.gif$" imgSetEnvIf Request_URI ".*\.jpg$" img SetEnvIf Request_URI ".*\.png$" imgSetEnvIf Request_URI ".*\.bmp$" imgSetEnvIf Request_URI ".*\.swf$" imgSetEnvIf Request_URI ".*\.js$" imgSetEnvIf Request_URI ".*\.css$" img  #以上为定义变量:将所有关于图片的请求定义为变量imgCustomLog "logs/111.com-access_log" combined env=!img#“env=!img”表示非img变量。本行命令的含义是:不记录关于变量img的请求日志。感叹号取反,即不记录标签img所包含的静态文件。
</VirtualHost>

六、访问日志切割

  • 日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件
  • 把虚拟主机配置文件改成如下:
  • 打开配置文件
  • vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

[root@gaodehua33 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf更改CustomLog配置
1.首先指定一个工具rotatelogs
2.在定义一个日志的名称%Y%m%d
3.规定时间去生成,时间段就为1天,换算成秒,就是86400秒
4.双引号中即日志切割的相关配置
5.选项-l 以当前系统的时间为基准(apache2.4版本中可以不加该选项)CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img然后保存退出
  • 然后查看配置文件语法有无错误,并重新加载配置文件 (-t,graceful)
  • rotatelogs工具,它是Apache自带的一个切割工具
  1. -l参数,目的是以当前系统时间为基准。如果不指定 -l ,那么就会指定 UTC时间 的格式去切割日志
  2. 在中国应该是 CST,在美国是 UTC ,两者时区不同,相差几个小时
  • 定义日志的名称,因为是切割的,所以根据时间日期让它自动变,就需要加一个变量%Y%m%d
  1. %Y,表示 年
  2. %m,表示 月
  3. %d,表示 日

七、静态元素过期时间

  • 浏览器访问网站,获取的图片、css等静态元素会保存在本地电脑缓存文件夹里,方便下次再此访问的时候提高访问速度。我们也可以在服务器端设置这些静态元素的过期时间,可以减网站的带宽压力。不设定过期时间时,当服务器更改时也依然回去读取缓存,所以需要为这些缓存设定一个过期时间
  • 在apache子配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf里设定:是通过expires模块实现的。
  • 修改apapche配置文件,开启expires模块,并查看expire
[root@gaodehua33 ~]# vim /usr/local/apache2.4/conf/httpd.conf搜索 /expire ,找到该行的配置文件,并去除的注释符 # 号
LoadModule expires_module modules/mod_expires.so然后保存退出
[root@gaodehua33 ~]# /usr/local/apache2.4/bin/apachectl -M |grep expireexpires_module (shared)
[root@gaodehua33 ~]#
  1. 打开虚拟主机配置文件vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf,并添加配置文件
  • 需要添加的配置文件

    1. 这里有所有的图片定义成一天
    2. 所有的 css 和 js 都定义成两小时
    3. 其他的没有任何的缓存

<IfModule mod_expires.c>ExpiresActive on      //打开该功能的开关ExpiresByType image/gif  "access plus 1 days"    //定义Type类型,这里是一天ExpiresByType image/jpeg "access plus 24 hours"        //定义Type类型,这里是24小时ExpiresByType image/png "access plus 24 hours"        //定义Type类型ExpiresByType text/css "now plus 2 hour"                        //定义Type类型,两小时ExpiresByType application/x-javascript "now plus 2 hours"       // 定义Type类型ExpiresByType application/javascript "now plus 2 hours"        //定义Type类型ExpiresByType application/x-shockwave-flash "now plus 2 hours"        //定义Type类型ExpiresDefault "now plus 0 min"            //定义Type类型
</IfModule>
  • 游览器,开发者工具中可以查看
  • 按ctrl+F5可以强制把浏览器本地的缓存清空

  • linux下curl也可以查看设置的过期时间。
[root@gaodehua33 111.com]# curl -x127.0.0.1:80 111.com/11.png -I
HTTP/1.1 200 OK
Date: Thu, 21 Dec 2017 22:42:28 GMT         //当前时间
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Last-Modified: Thu, 21 Dec 2017 14:40:05 GMT
ETag: "20aa-560daacfdbb40"
Accept-Ranges: bytes
Content-Length: 8362
Cache-Control: max-age=86400         //缓存的时间
Expires: Fri, 22 Dec 2017 22:42:28 GMT         //过期时间
Content-Type: image/png[root@gaodehua33 111.com]# 

课堂笔记

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

LAMP架构 【2】相关推荐

  1. LAMP架构介绍、MySQL和MariaDB介绍、MySQL安装

    2019独角兽企业重金招聘Python工程师标准>>> LAMP架构介绍 Linux+Apache+MySQL+PHP 就是在linux系统上安装httpd. mysql .PHP, ...

  2. php动态网页简书,LAMP架构部署和动态网站环境的配置

    本文属于原创,比较适合企业应用,具体详细的介绍可以参考<Linux就该这么学>里边教程的第20章,里面详细的介绍了LNMP架构,而我这里是介绍LAMP架构,LAMP.LNMP在企业都应用比 ...

  3. Netlog 的数据库及 LAMP 架构

    Database Sharding@Netlog 详细的描述了 Netlog 数据库架构的演变过程,文章浅显易懂,非常值得学习.本文数据.图片均来自:Database Sharding at Netl ...

  4. 5月23日任务 LAMP架构介绍、MySQL、MariaDB介绍、 MySQL安装

    2019独角兽企业重金招聘Python工程师标准>>> 11.1 LAMP架构 LAMP 是Linux. Apache. MySQL. PHP的简写,其实就是把Apache.MySQ ...

  5. LAMP架构介绍,MySQL、MariaDB介绍,MySQL安装

    2019独角兽企业重金招聘Python工程师标准>>> LAMP架构介绍: MySQL.MariaDB介绍: Community 社区版本   =开源版本 Enterprise 企业 ...

  6. [导入]LAMP架构下安装Drupal

    LAMP架构: Linux + Apache + MySQL + PHP 用的是RedHat 7.2 Linux 操作系统. 由于该系统本身已经带有Apache,MySQL和PHP,因此尝试使用回原来 ...

  7. Web服务 源码编译安装LAMP架构

    Web服务 源码编译安装LAMP架构 一.LAMP架构 1.LAMP架构是什么 2.各组件的主要作用 二.编译安装Apache httpd服务 1.关闭防火墙,将安装Apache所需软件包传到/opt ...

  8. lamp架构-访问控制-禁止php解析、屏蔽curl命令访问

    lamp架构-访问控制-禁止php解析 有的网站论坛开启了上传图片功能,导致******捆绑图片上传到服务器,通过访问php来提升服务器后台权限, 这里我们就需要将上传图片的目录禁止访问php文件,来 ...

  9. 百度贴吧10亿量级LAMP架构分享

    导读:天下武功,唯快不破.对日益激烈的互联网竞争你所拥有的利器就是快!本文来自百度贴吧的LAMP解决方案介绍,摘录至此旨在研究分享,看看其是如何全面支持快速迭代的. 文章内容如下: 贴吧是功能性产品, ...

  10. 第五天、LAMP架构

    LAMP架构    1.配yum源如下图: [root@ATM ~]# vi /etc/yum.repo.d/dvd.repo 2.关闭防火墙: [root@ATM ~]# iptables -F [ ...

最新文章

  1. rabbitmq java集群_RabbitMQ集群整合SpringBoot2.x
  2. 更换Spring底层日志框架
  3. php imagecreatefromjpeg图片太大_PHP图像处理技术及应用
  4. 设计师必收藏!!!让你灵感迸发的配色网站
  5. 【实践】短视频场景下信息流广告的挑战和技术实践.pdf(附下载链接)
  6. Java跳出多重循环的方法
  7. textview 复制粘贴_Android TextView使用剪贴板复制粘贴
  8. Linux串口编程详解(转)
  9. 百度贴吧里如何留网址
  10. 液压与气动传动(PLC控制)
  11. input隐藏边框、设置透明背景色
  12. 如何制作微信二维码指纹扫描图片
  13. 淘宝直通车可以退款吗?怎么退?
  14. Java面试:数据库,Java,框架,前端技术。应有尽有
  15. Java实现快递管理系统一(views)
  16. 市场调研报告-全球与中国教育互动白板市场现状及未来发展趋势
  17. 【Python】如何判断丑数
  18. pixfllow光流传感器数据获取及悬停程序编写
  19. Web技术-1 Web前端总结
  20. VUE中$refs和$el的使用

热门文章

  1. Dungeon Master POJ - 2251 BFS
  2. 【卡顿检测】深入理解
  3. 11款最好的JavaScript源代码编辑器
  4. 《Microsoft SQL Server入门教程》第02篇 SQL Server 下载与安装
  5. 泰勒公式求极限(如何用+精度怎么确定)一文扫除泰勒公式难点
  6. 软件开发的目标是什么
  7. 【swaggo】swaggo使用详解
  8. PAT 1094 谷歌的招聘 (20 分) c语言
  9. Ardunio开发实例-被动红外(PIR)运动传感器使用
  10. Centos8搭建并应用NIS服务