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

本文涉及的产品
.cn 域名,1个 12个月
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:

配置httpd(apache)支持php

  • httpd(apace)的主配置文件/usr/local/apache2.4/conf/httpd.conf

  • 因为本机安装了两个版本的php,所以需要进行改配置,如果指状疣一个php服务则会默认调用存在的php服务。

    从apache主配置文件/usr/local/apache2.4/conf/httpd.conf将下面两行注释掉一行。
    [root@localhost php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf
    LoadModule php5_module modules/libphp5.so
    LoadModule php7_module modules/libphp7.so
    (150行/151行)
    不想用哪个就把哪个注释掉就行了。

修改httpd主配置文件/usr/local/apache2.4/conf/httpd.conf 中的一些配置

需要修改的地方:ServerName(192行取消注释)、Require all denied(将Require all denied改成Require all granted)、AddType application/x-httpd-php.php(增加到388行。)、Directorylndex.html index.php(修改250行成这样)

  • 修改ServerName,将192行取消注释

    在启动或重启apache的过程中可能会有下面这样的警告,可以在主配置文件中配置ServerName(192行取消注释)来取消这个警告。
    [root@localhost ~]# /usr/local/apache2.4/bin/apachectl start
    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
    取消下面这行的注释:
    ServerName www.example.com:80

打开本地主机cmd,看是否能访问服务器的80端口

如果不能使用telnet命令,则打开控制面板,选择程序,打开windows程序和功能,telnet客户端打钩。即可使用telnet命令。

如果不能访问80端口,则需要修改防火墙规则。使用以下命令临时打开防火墙80段开口:

[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

端口打开后,可以telnet到虚拟机80端口。本地主机用浏览器访问虚拟机ip,会有it works!字样。

  • 将Require all denied改成Require all granted

    [root@localhost ~]# vim /usr/local/apache2.4/conf/httpd.conf
    <Directory />
    AllowOverride none
    Require all granted
    </Directory>
    (201行)

    242行默认为Require all granted,如果为denied则不能通过浏览器访问虚拟机ip会提示forbidden 不允许访问。

  • 两个修改完配置文件的测试命令

    检测配置文件中的语法是否有错误
    [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
    Syntax OK

    如果有错会提示错误在哪行,如果没错会返回Syntax OK。

    重新加载配置文件
    [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful

    加载成功没有提示。

  • 增加AddType application/x-httpd-php.php 这行配置到388行。9支持php的配置)

    [root@localhost ~]# vim /usr/local/apache2.4/conf/httpd.conf
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType application/x-httpd-php. php
    (增加到388行。)

在此添加“AddType application/x-httpd-php .php”,意思是允许PHP服务解析该服务器。

  • 增加一个索引页。Directorylndex.html index.php 将250行修改。

    [root@localhost ~]# vim /usr/local/apache2.4/conf/httpd.conf
    <IfModule dir_module>
    DirectoryIndex index.htmli index.php
    </IfModule>

    加了index.php默认能够跳转到index索引页

以上操作做完后需要检测配置文件是否有错并重新加载配置文件。

  • 检测服务器是否支持php解析

    vim /usr/local/apache2.4/htdocs/1.php
    <?php
    phpinfo();
    ?>
    #该命令的含义是:在访问该地址时,直接打印PHP的相关信息
    说明:创建一个php文件,然后使用浏览器访问该文件(此时不需要重启服务器)。

    上面的文件编辑好后,保存并退出,不需要重新加载配置文件。访问虚拟机ip/1.php会出现一个php信息页面,说明php支持解析了。如果不支持解析,则页面会显示出源代码。

  • 遇到php不能解析的情况,需做以下检查

1.检查Apache是否已经加载PHP模块

[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -M
...
php5_module (shared)

apache已经加载了php5模块

2.如果apache没有加载PHP模块,则检查系统中有没有php模块

[root@localhost ~]# ls /usr/local/apache2.4/modules/libphp5.so
/usr/local/apache2.4/modules/libphp5.so

有文件则说明系统中有模块

3.如果有模块,没有加载,则检查配置文件有没有配置对。

[root@localhost ~]# vim /usr/local/apache2.4/conf/httpd.conf
LoadModule php5_module        modules/libphp5.so
# LoadModule php7_module        modules/libphp7.so150行)

php5模块和php7模块有一个就行了,注释掉其中一个

httpd的默认虚拟主机

一个服务下跑了多个网站或多个域名

Windows系统的hosts管理

Windows系统中hosts位置“C:\Windows\System32\drivers\etc\hosts”。

用记事本打开文件。在此处可以自定义匹配本地IP和域名,目的是添加临时访问地址(在DNS未生效时使用。)

  • 添加虚拟主机:

在hosts文件中添加"192.168.1.11 www.abc.com"即可将本地虚拟主机添加到Windows系统,访问该域名时会自动解析到本地虚拟主机“ServerName www.example.com:80”

linuxApache虚拟主机管理

在物理机访问的域名“www.adai.com”并未在虚拟机Apache配置文件中定义,虚拟机中只定义了“ServerName www.example.com:80”一个域名,该域名即为Apache的默认主机,此时通过任何一个绑定该虚拟机IP的域名进行访问都会跳转到该主机。

因为一台服务器可以跑多个域名,为了方便管理,需要对虚拟主机进行配置。

配置虚拟主机

  • 编辑Apache配置文件

    [root@localhost ~]# vim /usr/local/apache2.4/conf/httpd.conf
    ……

    Virtual hosts

    Include conf/extra/httpd-vhosts.conf
    ……

    编辑“Virtual hosts(虚拟主机)”的参数,去掉#,启用虚拟主机配置文件“httpd-vhosts.conf”。

  • 编辑虚拟主机配置文件

    [root@localhost ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

    该配置文件下每组“< VirtualHost *:80 >”代表一个主机(即:一个网站)

进行如下编辑:

<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-error_log" common
#日志文件
</VirtualHost>

<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>

此时即定义了一个网站,定义网站的核心参数即为:DocumentRoot(网站根目录)、ServerName(域名)。

注意: 虚拟主机生效后,原Apache配置文件中的默认主机(www.example.com ~ 192.168.8.131)就会失效(在此用www.example.com ~ 111.com进行验证)。

  • 添加虚拟主机相应目录

    [root@localhost ~]# mkdir /data/wwwroot/
    [root@ocalhost ~]# mkdir /data/wwwroot/abc.com
    [root@ocalhost ~]# mkdir /data/wwwroot/111.com

  • 在相应目录创建PHP文件

    [root@adailinux ~]# vim /data/wwwroot/abc.com/index.php
    <?php
    echo "welcome to abc.com";
    ?>

    [root@adailinux ~]# vim /data/wwwroot/111.com/index.php
    <?php
    echo "welcome to 111.com";
    ?>

  • 检测、重载Apache配置文件

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

  • 虚拟主机测试

在此使用浏览器和curl命令分别进行测试。
如果不在虚拟机中进行本地域名配置(hosts),在进行ping命令测试虚拟主机域名时会访问到外网。

[root@localhost ~]# ping www.abc.com
PING abc.com (199.181.132.250) 56(84) bytes of data.

ping abc.com 时访问到了外网。如果想在访问“abc.com”时指向到本地虚拟机IP,可以在/etc/hosts文件中指定域名,或者使用curl命令进行访问。

使用curl命令访问

1.curl -x 指定访问端口

[root@localhost ~]# curl -x192.168.8.131:80 abc.com
welcom to abc.com 

注意: 此时访问所有未定义的域名都会将访问地址指向到默认虚拟主机,因为已经自定义添加了虚拟主机,所以此时的默认虚拟主机为配置文件“httpd-vhosts.conf”中的第一个虚拟主机(在此为abc.com),效果如下:

[root@localhost ~]# curl -x192.168.8.131:80 www.abcde.com
welcom to abc.com

使用浏览器访问本地虚拟主机IP时会将IP指向到默认虚拟主机,即 abc.com。



本文转自 豆渣锅 51CTO博客,原文链接:

http://blog.51cto.com/754599082/2052276
相关文章
|
5月前
|
Ubuntu Apache PHP
解决Ubuntu下Apache不解析PHP问题
解决Ubuntu下Apache不解析PHP问题
|
2月前
|
关系型数据库 MySQL 应用服务中间件
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
这篇文章介绍了如何在Windows 7系统上搭建PHP、MySQL和Apache环境,并部署ECShop项目,包括安装配置步骤、解决常见问题以及使用XAMPP集成环境的替代方案。
42 1
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
|
2月前
|
网络协议 Apache
|
2月前
|
关系型数据库 Linux 网络安全
"Linux系统实战:从零开始部署Apache+PHP Web项目,轻松搭建您的在线应用"
【8月更文挑战第9天】Linux作为服务器操作系统,凭借其稳定性和安全性成为部署Web项目的优选平台。本文以Apache Web服务器和PHP项目为例,介绍部署流程。首先,通过包管理器安装Apache与PHP;接着创建项目目录,并上传项目文件至该目录;根据需要配置Apache虚拟主机;最后重启Apache服务并测试项目。确保防火墙允许HTTP流量,正确配置数据库连接,并定期更新系统以维持安全。随着项目复杂度提升,进一步学习高级配置将变得必要。
163 0
|
5月前
|
关系型数据库 MySQL PHP
unbuntu搭建LAMP(Apache2+PHP+MySQL+phpmyadmin)
unbuntu搭建LAMP(Apache2+PHP+MySQL+phpmyadmin)
|
5月前
|
运维 Linux Apache
LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化
LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化
275 2
|
2月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
40 1
|
29天前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。
|
2月前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
114 2
|
2月前
|
消息中间件 分布式计算 Hadoop
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
38 3

推荐镜像

更多