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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

配置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
AI 代码解读

端口打开后,可以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)
AI 代码解读

apache已经加载了php5模块

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

[root@localhost ~]# ls /usr/local/apache2.4/modules/libphp5.so
/usr/local/apache2.4/modules/libphp5.so
AI 代码解读

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

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

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

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>
AI 代码解读

此时即定义了一个网站,定义网站的核心参数即为: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.
AI 代码解读

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 
AI 代码解读

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

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

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



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

http://blog.51cto.com/754599082/2052276
目录
打赏
0
0
0
0
344
分享
相关文章
解决Ubuntu下Apache不解析PHP问题
解决Ubuntu下Apache不解析PHP问题
123 5
PHP在Apache中如何运行?
PHP在Apache中如何运行?
138 5
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
这篇文章介绍了如何在Windows 7系统上搭建PHP、MySQL和Apache环境,并部署ECShop项目,包括安装配置步骤、解决常见问题以及使用XAMPP集成环境的替代方案。
92 1
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
"Linux系统实战:从零开始部署Apache+PHP Web项目,轻松搭建您的在线应用"
【8月更文挑战第9天】Linux作为服务器操作系统,凭借其稳定性和安全性成为部署Web项目的优选平台。本文以Apache Web服务器和PHP项目为例,介绍部署流程。首先,通过包管理器安装Apache与PHP;接着创建项目目录,并上传项目文件至该目录;根据需要配置Apache虚拟主机;最后重启Apache服务并测试项目。确保防火墙允许HTTP流量,正确配置数据库连接,并定期更新系统以维持安全。随着项目复杂度提升,进一步学习高级配置将变得必要。
513 0
The Past, Present and Future of Apache Flink
本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024 上海站主论坛开场的分享,今年正值 Flink 开源项目诞生的第 10 周年,借此时机,王峰回顾了 Flink 在过去 10 年的发展历程以及 Flink社区当前最新的技术成果,最后展望下一个十年 Flink 路向何方。
448 33
The Past, Present and Future of Apache Flink
|
5月前
|
Apache Flink 2.0-preview released
Apache Flink 社区正积极筹备 Flink 2.0 的发布,这是自 Flink 1.0 发布以来的首个重大更新。Flink 2.0 将引入多项激动人心的功能和改进,包括存算分离状态管理、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈,但不建议在生产环境中使用。
1120 13
Apache Flink 2.0-preview released
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
198 3
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。

推荐镜像

更多