您的位置:首页 > 运维架构 > Apache

Apache和PHP结合,Apache默认虚拟主机

2017-10-30 14:47 447 查看
笔记内容:
11.14/11.15 Apache和PHP结合

11.16/11.17 Apache默认虚拟主机

笔记日期:2017.9.29

11.14/11.15 Apache和PHP结合



LAMP我们都安装好了,但是现在在浏览器访问apache的话还不能解析php脚本,所以这会需要配置apache让apache能够解析php脚本:
在这之前先解决一个问题,我们启动apache时会发现有这么一个警告:



不想有这个警告就得编辑apache的配置文件:
vim /usr/local/apache2.4/conf/httpd.conf
将文件中ServerName参数的注释取消掉(把#号去掉):



现在再开启Apache服务就没有出现之前的警告了:



如果安装了两个PHP就要注释掉其中一个,不然会发生冲突:



启动了Apache后我们可以通过Windows上的浏览器来访问,如果出现服务器响应时间过长的问题:



就先检查一下ip是否能ping通:



ip能ping通的话,就再检查端口是否能通,在Windows上得先在控制面板里打开telnet客户端:



然后打开cmd检测80端口:



出现无法连接的情况就是你的Linux没有打开80端口,所以先去Linux里打开80端口:
命令:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
这是临时打开80端口的命令。
打开端口后再使用浏览器连接,出现以下结果说明可以访问了:



如果显示的是403的话,就要去apache配置文件里把Require all denied修改成Require all granted:



修改完成后,重新加载配置:



因为要让Apache支持php解析,所以要增加一条php相关的配置,让apache能够解析php:
AddType application/x-httpd-php .php



然后是增加一个索引页,这是为了能够跳转到这个页面上去:
DirectoryIndex index.html index.php



测试一下Apache是否能解析php,首先写一个测试用的php脚本:
vim /usr/local/apache2.4/htdocs/1.php



然后使用浏览器访问,在ip地址后面加上1.php,也就是刚刚编辑的那个脚本文件的名称:



能够出现php的相关信息,代表能够解析成功:



如果不能够解析的话,就只会显示源代码:



出现无法解析php时,检查一下这个几个地方:
出现无法解析php的话,首先使用apache -M检查一下Apache是否加载了php的模块,然后再检查apache 的modules目录下是否有php的.so文件。模块有被加载而且.so文件也存在的话,就检查Apache的配置文件是否有这行配置信息:
AddType application/x-httpd-php .php
有这行配置信息的话,再检查一下是否有模块信息:



最后就是检查配置文件的语法上是否有存在错误:



介绍一个快捷键:
Ctrl+r能够帮助我们快速的执行命令历史里面的命令,输入相关的字符就能显示出命令历史里面与之对应的命令,例如我输入vim,就可以显示之前执行过的vim命令:



11.16/11.17 Apache默认虚拟主机



先来解释一下虚拟主机的概念,早期的Linux服务器上,一个服务器只能运行一个网站,只能跑一个域名。但随着技术的发展,现在一个服务器上能够跑多个域名了,这样可以帮我们节省了一些成本。其实这里的服务器就叫做主机,早期一个主机对应一个站点。但是现在一个主机可以跑多个站点,所以就有了虚拟主机的概念。我们可以把一台服务器虚拟多个主机出来,这样就实现了一台服务器上跑多个站点。

我们能够在浏览器中访问到htdocs目录下的文件,是因为Apache的配置文件里面定义好的了:



ServerName参数定义了域名:



先介绍一下如何编辑Windows的hosts,Windows的hosts一般在这个路径下:



这个hosts与Linux下的hosts类似,可以在这个文件里定义一个IP和一个域名,然后让这个域名指向这个IP:



我在hosts里添加了一行内容,让这个两个域名指向192.168.77.130地址,然后再cmd里ping一下这个两个域名看看是否能通:



从结果可以看到两个域名都指向192.168.77.130,并且都能ping通。
现在把刚刚添加的那一行给注释掉,就会发现ping到别的服务器IP上去了:



现在指向的IP才是这两个域名真正的服务器IP,因为我编辑了hosts所以才能指向我所指定的IP地址。
把刚刚的注释去掉,然后使用浏览器去访问:



可以看到访问的是我们Linux里的apache服务的页面。

这两个域名我们没有在httpd的配置文件里去定义,配置文件里只定义了一个www.example.com,这个就是Apache的默认主机,任何一个域名只要是指向到这个IP,就会访问到这个站点,这个站点就是默认虚拟主机。
注意这是虚拟主机,如果仅仅使用的是httpd.conf文件,那么访问的就仅仅是这个文件ServerName参数里定义的主机,和DocumentRoot里定义的路径地址,因为配置文件里只能定义一个ServerName。
一台服务器上可以跑多个域名,如果都指向到httpd.conf文件里,就不太好管理,所以需要打开一个二级文件这个文件就是虚拟主机配置文件,在这个文件里是可以定义多个ServerName的,先在httpd.conf文件里搜索关键词extra,然后把这一行的注释去掉:



编辑httpd-vhosts.conf虚拟主机配置文件:
路径:
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf



几个主要参数的作用介绍:
DocumentRoot:网站的根目录路径
ServerName:定义域名
ServerAlias:定义别名
ErrorLog:定义错误日志存放路径
修改文件内容如下:



在这有一个常识,一旦你让虚拟主机配置文件生效了,那么之前在httpd.conf文件里定义的www.example.com就会失效,不过我在虚拟主机配置文件里定义了www.example.com,但是这个域名对应的是/data/wwwroot/111.com路径。
创建与配置文件对应的目录:



在目录下创建php文件:
vim /data/wwwroot/abc.com/index.php
文件内容如下:



vim /data/wwwroot/111.com/index.php
文件内容如下:



检查服务的配置文件是否有错误,并且重新加载配置文件:



测试虚拟主机:
先介绍一下curl命令:
curl -x可以设置一个域名指向的IP地址,这样就不用每次都去修改hosts文件了,示例:





从图片可以看到,运行的几个结果都是访问的abc.com,这是因为我们设置了虚拟主机配置文件,虚拟主机配置文件里的第一个虚拟主机就是abc.com,这个就是默认的虚拟主机,所以不管访问的是什么域名,只要这个域名是指向的这个IP,都会访问到这个虚拟主机(abc.com):



而且当我们访问www.example.com域名的时候,并不是访问的httpd.conf里面设置的那个域名,而是访问的是虚拟主机配置文件里的111.com,因为在虚拟主机配置文件里www.example.com是111.com的别名:



从测试结果中可以知道,一旦开启了虚拟主机配置文件,那么就会按照虚拟主机配置文件里面配置的去走,而不会按照httpd.conf里设置的去走。
从配置虚拟主机文件的过程,可以得出两个总结,第一个是只要在httpd.conf里开启了虚拟主机文件,虚拟主机文件生效后,httpd.conf里关于主机的配置就会失效。
第二个是虚拟主机文件内容的结构是标签的形式,每一个VirtualHost就是一个虚拟主机,VirtualHost可以配置多个,而文件中的第一个VirtualHost就是默认的虚拟主机,访问任何指向本机IP的域名都是去访问的默认虚拟主机,如果访问的是在文件里有配置的域名则是访问其域名相应配置的虚拟主机。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息