十周第二次课(3月1日)

11.14/11.15 Apache和PHP结合 11.16/11.17 Apache默认虚拟主

11.14/11.15 Apache和PHP结合

配置httpd支持php

  • httpd主配置文件/usr/local/apache2.4/conf/httpd.conf

  • vim /usr/local/apache2.4/conf/httpd.conf   //修改以下4个地方

  1. ServerName

搜索ServerName,把#ServerName www.example.com:80前面的#删除。

重启时报错:/usr/local/apache2.4/bin/apachectl restart

修改vim /usr/local/apache2.4/conf/httpd.conf   //因为有二个php模块,注释掉一个

  1. Require all denied   //更改为Require all granted

在虚拟机上没有打开80端口。所以无法访问虚拟机

临时打开80端口:iptables -I INPUT -p tcp --dport 80 -j ACCEPT

上面Require all granted如果改为Require all denied则我们在访问网页会出现403错误

网页显示正常

  1. AddType application/x-httpd-php .php

搜索AddType application/x-gzip .gz .tgz,在该行下面添加AddType application/x-httpd-php .php  //如果不添加这行,php就无法解析

  1. DirectoryIndex index.html index.php

找到DirectoryIndex index.html修改为DirectoryIndex index.html index.php  //增加一个php索引页

  • 检验httpd配置文件是否正确,只有正确配置才能正确解析PHP文件

/usr/local/apache2.4/bin/apachectl -t      //测试语法

/usr/local/apache2.4/bin/apachectl graceful  //重新加载配置文件

/usr/local/apache2.4/bin/apachectl start   //启动服务

查看httpd是否启动:netstat -lntp

 

也可以用curl命令进行简单的测试:curl localhost

 

 测试成功

  • 测试是否正确解析PHP

 编写一个测试脚本,如下所示:

 vim /usr/local/apache2.4/htdocs/1.php   //增加如下内容

 <?php

phpinfo()

?>

网页显示正常

如果不能正常解析,会显示的是源代码

如果遇到php不能解析的情况

  1. 要检查apache配置文件

/usr/local/apache2.4/bin/apachectl –M  //是否加载php模块

 

  1. 如果没有php模块:

ls /usr/local/apache2.4/modules/libphp5.so   //查看有没有libphp5.so文件

  1. 如果有libphp5.so文件单没有显示:

vim /usr/local/apache2.4/conf/httpd.conf   //检查conf配置文件,是否加载了php模块

  1. AddType application/x-httpd-php .php   //检查conf配置文件里,是否添加了这一行

  1. DirectoryIndex index.html index.php  //检查conf配置文件里,这行是否增加一个php索引页

Ctrl+r:  如果命令关键字  //快速查找命令

11.16/11.17 Apache默认虚拟主机

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

既然服务器上可以有多个虚拟主机,每个虚拟主机都会定义一个域名(当然也可以定义多个),只要把这个域名解析指向到该台服务器,我们自然就可以访问这个站点了。说到这儿,你可能又有新的问题:什么叫解析指向?如果你会用浏览器去访问一个站点,那下面的解说肯定不难理解。咱们访问一个网站,需要在浏览器里面输人域名,然后就能访问到网站内容。这个过程是需要浏览器和远程服务器通信的,网站内容就是从服务器上读取到的。而这个服务器是由你访问的域名来决定在哪里的,而域名之所以能决定服务器在哪里,就是因为这个域名做了解析指向。域名解析服务器IP地址,这个行为是由DNS服务器来完成的

假如你访问的域名指向了你的服务器,而你又在这台服务器上做了配置标记了这个域名(接下来会讲解如何标记),这样这个域名就能被正常访问。但如果没有在服务器上给这个域名做标记,会发生什么呢?按理说,没有做标记的域名是不合法的,是不能正常返回结果的。

上面讲了那么多关于域名的东西,的目的就是让你更容易理解“默认虚拟主机"的概念。httpd 有一个特点,它首先是支持多个虚拟主机的,也就是说可以在一个服务器上运行多个站点,标记多个域名。但如果没有标记的域名也指向了这台服务器,那总得有一个处理这个域名的虚拟主机吧。而这个虚拟主机就叫作“默认虚拟主机"。通俗点讲,你的服务器上有很多域名,很多站点,很多虚拟主机,这些域名都是在httpd的配置文件中做过标记的,都是“名花有主"的,都是一一对应的,每个域名都能对应着自己的虚拟主机。但是,有一个特殊的域名也指向了服务器,却没有跟它对应的虚拟主机。这时候,httpd就会把这个域名直接丢给一个特殊的虚拟主机来处理那这个特殊的虚拟主机就是 “默认虚拟主机"

最后总结成一句话,任何一个域名指向这台服务器,只要是没有对应的虚拟主机,就会由这个默认虚拟主机来处理。

  • 一台服务器可以访问多个网站,每个网站都是一个虚拟主机

  • 概念:域名(主机名)、DNS、解析域名、hosts

  • 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机

  • 编辑配置文件httpd-conf(这个是httpd服务的主配置文件):vim /usr/local/apache2.4/conf/httpd.conf    //搜索httpd-vhost,去掉这行行首的#

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

 <VirtualHost *:80>

   ServerAdmin webmaster@dummy-host.example.com   // ServerAdmin指定管理员邮箱,这个没有什么实质作用

   DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com"   // DocumentRoot为该虚拟主机站点的根目录,网站的程序就放在这个目录下面

   ServerName dummy-host.example.com        // ServerName为网站的域名

   ServerAlias www.dummy-host.example.com   // ServerAlias为网站的别名,后面的域名可以写多个,用空格分隔 ,但serverName后面的域名不支持写多个

   ErrorLog "logs/dummy-host.example.com-error_log"   // ErrorLog为站点的错误日志

   CustomLog "logs/dummy-host.example.com-access_log" common  // CustomLog为站点的访问日志

</VirtualHost>

创建相关的目录和文件:mkdir -p /data/wwwroot/abc.com  /data/wwwroot/111.com

测试虚拟主机:

可以编辑hosts文件:vi /etc/hosts

也可以用curl –x命令

默认虚拟主机:虚拟主机配置文件里的第一个虚拟主机

  • 在httpd.conf主配置文件里使虚拟主机配置文件httpd-vhost.conf生效,那定义的ServerName、DocumentRoot都会失效