11.14/11.15 Apache和PHP结合
11.16/11.17 Apache默认虚拟主机
11.14/11.15 Apache和PHP结合:
~~ONE
配置httpd支持php,步骤如下:
(我们虽然知道Apache调用了php作为他的模块,但我们还没做实验,还不知道他能不能解析php。所以我们要编辑http的配置文件)
httpd主配置文件/usr/local/apache2.4/conf/httpd.conf
vim /usr/local/apache2.4/conf/httpd.conf //修改以下4个地方
实例1. ServerName 开启Apache不显示提示
实例2. Require all denied 防止403
实例3. AddType application/x-httpd-php .php 解析PHP。要增加这一行
实例4. DirectoryIndex index.html index.php 增加索引页。后面要加index.php
/usr/local/apache2.4/bin/apachectl -t 测试,修改过配置文件完语法是否对
/usr/local/apache2.4/bin/apachectl graceful 重新加载配置文件,不会重启服务
/usr/local/apache2.4/bin/apachectl start 启动服务
netstat -lntp (这两个阿铭没说怎么用)
curl localhost
~~TWO
验证apache支持不支持解析php,步骤如下:
实例5.
vim /usr/local/apache2.4/htodcs/1.php 增加如下内容
我们在访问的时候是访问的这个目录下的文件 /htodcs
<?php
phpinfo();
?>
~~THREE
如果遇到php不能解析的情况,要检查Apache的配置文件:
1. /usr/local/apache2.4/bin/apachectl -M 查看有没有加载php模块。
2. ls /usr/local/apache2.4/modules/libphp5.so 如果没有加载我们要看一看这个模块,有没有这个文件
3. vim /usr/local/apache2.4/conf/httpd.conf 如果有.so这个文件,就看一下配置文件。有没有加载或被注释php模块
LoadModule php5_module modules/libphp5.so
#LoadModule php7_module modules/libphp7.so
4. vim /usr/local/apache2.4/conf/httpd.conf 还要检查配置文件,有没有加载AddType
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php 我们自己配置进去的这个(注意.php前面要加空格,根据前两行写)
5. vim /usr/local/apache2.4/conf/httpd.conf 还要检查有没有加载index.php (索引页)
<IfModule dir_module>
DirectoryIndex index.html index.php 我们在后面加进去的
curl localhost/test.php (这个阿铭没说上面用)
实例:
1.
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl start
开启Apache的时候会有提示
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
[root@localhost ~]# vi /usr/local/apache2.4/conf/httpd.conf viApache的配置文件。
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName www.example.com:80 搜索 ServerName,并把前面的注释去掉。再启动Apache就不会有提示了
[root@localhost ~]# vi /usr/local/apache2/conf/httpd.conf viApache配置文件。
LoadModule php5_module modules/libphp5.so
#LoadModule php7_module modules/libphp7.so 把php7注释地掉,我们用php5。不然会有冲突
2.
我们先用浏览器访问以下我们的IP,其实并不通
网页访问不了。
这种情况下,我们用cmd ping一下IP,是通的
ping 192.168.30.133 是通的。
然后,在telnet80端口。需要打开telnet
步骤为,打开控制面案>程序>程序和功能>打开或关闭Windows功能>
找到 Telnet客户端,前面打上勾,点确定
以上,Windows打开Telnet完成
我们再回到cmd上,telent80端口,结果是不通。是因为在我们linux上并没有打开80端口
[root@localhost ~]# iptables -nvL 看一下 iptables规则。也并没有发现80端口
我们先临时给他加上80端口
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT -j 为来源客户端全部打开,也可以-s指定来源客户
此时,我们在浏览器上IP就通了
It works!
此时,我们再回到cmd上。再次ping 80端口。显示以下画面,为通
telenet 192.168.30.133 80 通了
为防止浏览器出现403或测试为403,我们要在配置文件里,配置一下 Require all denied
[root@localhost ~]# vi /usr/local/apache2.4/conf/httpd.conf
<Directory />
AllowOverride none
Require all denied 把这一行,denied改为granted
并检查下面Require all granted是不是也是为 granted
#
# Controls who can get stuff from this server.
#
Require all granted
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t 配置完配置文件要-t检查一下
Syntax OK
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful 在graceful重新加载
3.
[root@localhost ~]# vim /usr/local/apache2.4/conf/httpd.conf 修改配置文件
搜索 AddType
#
# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz 找到这两行,这有两个,一个.Z一个.tgz的。不要加错了
增加 AddType application/x-httpd-php .php
4.
[root@localhost ~]# vim /usr/local/apache2.4/conf/httpd.conf
搜索 Index
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t 修改完配置文件要 -t
Syntax OK
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful 修改完配置文件要 graceful
5.
[root@localhost ~]# vi /usr/local/apache2.4/htdocs/1.php
<?php
phpinfo(); 函数,可以把PHP的相关信息打印出来
?>
我们在浏览器上输入 192.168.30.133/1.php
这个界面出来,就代表php就支持解析
[root@localhost ~]# curl localhost/1.php
<?php
phpinfo();
?>
----------------------------------------------------------------------------------------------------------------------------------------------------
11.16/11.17 Apache默认虚拟主机
1. 可理解为,一台服务器可以访问多个网站,每个网站都是一个虚拟主机
概念:域名(主机名)、DNS、解析域名、hosts
2. 我们在linux上设置了hosts,可以让他访问到1.php,是因为在apa配置文件里DocumentRoot定义了网站的根目录在哪里
DocumentRoot "/usr/local/apache2.4/htdocs"
他的域名就是配置文件里上面定义的ServerName www.example.com:80,这个ServerName可有用任何域名去访问他。而这个就是Apache的默认主机,也就是说任何一个域名,只要是指定到这个IP,都会指向到这个站点,这个站点就是默认虚拟主机
3. 同样windows上也是可以的,他的位置在 C:\Windows\System 32\drivers\etc\hosts
在里面写上192.168.30.133 www.123.com
我们在访问www.123.com的时候就会访问到192.168.30.133
4. 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机。
如果我们对Apache的这个配置文件没有做任何的修改,仅仅只是使用的是httpd.cong,他实际上就是我们主配置文件里面定义的ServerName和DocumentRoot。如果我们觉得不好管理,不想让域名执行到这来,因为一个配置文件里面只能配置一个ServerName。我们要打开一个虚拟主机配置文件:
~4.1 vim /usr/local/apache2.4/conf/httpd.conf 搜索httpd-vhost,去掉#。代表以上的ServerName DocumentRoot就不能用啦。
~4.2 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 这个就是虚拟主机配置文件。改为如下
<VirtualHost *:80> 每一个VirtualHost都代表一个主机
ServerAdmin admin@aminglinux.com 这个是定义管理员的邮箱,要不要都行
DocumentRoot "/data/wwwroot/abc.com" 网站根目录。只能写一个
ServerName abc.com 访问他的域名是什么。可支持alias
ServerAlias www.abc.com www.123.com 可写多个别名。意思是abc.com能访问,这些别名也可以访问
ErrorLog "logs/abc.com-error_log" 错误日志
CustomLog "logs/abc.com-access_log" common 访问日志
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
~4.3 修改完要创建相应的目录
mkdir /data/wwwroot
mkdir /data/wwwroot/abc.com
mkdir /data/wwwroot/111.com
~4.3 在两个站点根目录下创建.php
vim /data/wwwroot/abc.com/index.php
vim /data/wwwroot/111.com/index.php
~4.4 修改服务是否正确以及重新加载
/usr/local/apache2.4/bin/apachectl –t
/usr/local/apache2.4/bin/apachectl graceful
~4.5 curl -x 测试
curl -x192.168.30.133:80 www.abc.com 测试我们配置的这个域名访问这个IP的结果,是不是我们之前设置的结果
总结:
1. 如果我们没有设置的域名段,访问过来,他就会走第一个我们设置的虚拟主机
2. 我们一旦打开了这个虚拟主机配置(也就是我们注释掉的httpd-vhost),我们之前配置的SurverName DocumentRoot都会失效
3. 每一个VirtualHost都代表一个站点,都是一个虚拟主机。在虚拟主机里有一个比较特殊的,就是默认虚拟主机。就是无论任何的域名解析到这个IP上,都会去访问这个默认虚拟主机
实例:
[root@localhost ~]# vim /usr/local/apache2/conf/httpd.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/abc.com"
ServerName abc.com
ServerAlias www.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"
ServerName 111.com
ServerAlias www.example.com
ErrorLog "111.com-error_log"
CustomLog "111.com-access_log" common
</VirtualHost>
[root@localhost ~]# mkdir /data/wwwroot
[root@localhost ~]# mkdir /data/wwwroot/abc.com
[root@localhost ~]# mkdir /data/wwwroot/111.com
[root@localhost ~]# vim /data/wwwroot/abc.com/index.php
[root@localhost ~]# vim /data/wwwroot/111.com/index.php
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@localhost ~]# curl -x192.168.30.133:80 www.abc.com
[root@localhost ~]# curl -x192.168.30.133:80 www.abc.cn
[root@localhost ~]# curl -x192.168.30.133:80 www.example.cn
[root@localhost ~]# curl -x192.168.30.133:80 www.example.com
[root@localhost ~]# curl -x192.168.30.133:80 111.com