Apache 虚拟主机和子域名

Apache 虚拟主机和子域名

我正在尝试为正在进行的项目创建一个子域名,projectx.cairocubicles.com,此 URL 指向的是托管服务器以外的另一台服务器www.cairocubicles.com。子域名指向的服务器已安装 apache,其虚拟主机如下:

    <VirtualHost *:80>
  # Admin email, Server Name (domain name) and any aliases
  ServerAdmin [email protected]
  ServerName  www.project1.cairocubicles.com


  # Index file and Document Root (where the public files are located)
  DirectoryIndex index.html index.php
  DocumentRoot /home/project1/web/public
    <Directory /home/project1/web/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        AcceptPathInfo On
        Order allow,deny
        Allow from all
    </Directory>


  # Custom log file locations
  LogLevel warn
  ErrorLog  /home/project1/web/log/error.log
  CustomLog /home/project1/web/log/access.log combined

</VirtualHost>

但是现在浏览 project1.cairocubicles.com 时,我得到的是另一个网站(虚拟主机列表中的另一个网站)。我也尝试过更改ServerName www.project1.cairocubicles.comServerName project1.cairocubicles.com,但随后出现了 403 Forbidden 错误。有什么线索吗?

谢谢。

答案1

这只是瞎猜,但这可能是 SELinux 的问题。当您访问已配置为 ServerName 的站点时,站点特定日志中是否显示任何内容?/var/log/http/error.log 中是否显示任何内容?

答案2

-确保在配置发生任何变化后重新启动或重新加载 apache2/httpd

-确保 /home/project1/web/public 存在并且权限为 664(使用 -R 递归执行此操作)

-确保文件的所有者和组是 apache2 / httpd(取决于发行版),一般为用户 ID 33

-确保 project1.cairocubicles.com 指向的 IP 地址正确

-我通常避免将 www. 子域名与现有子域名一起使用(不是因为技术原因,只是看起来很乱)

-为了测试,创建一个名为 phpinfo.php 的文件,并让它只包含以下内容

 <?php
     phpinfo();
 ?>

并只加载该内容(因此http://project1.cairocubicles.com/phpinfo.php

-您需要确保已修改文件夹的所有权和组信息。尝试以下命令(扩展上面的第 3 点):

sudo chown apache2 /home/project1/public -R 

sudo chgrp apache2 /home/project1/public -R 

如果命令提示用户 apache2 不存在,请将其替换为 httpd。如果 apache2 进程(以用户 apache2 启动)无法读取/执行文件,则可能会发生错误(即 403 禁止)。

另一种解决方法是将用户添加到 apache2 组。不过,正确设置起来稍微复杂一些

答案3

尝试:

服务器名称 project1.cairocubicles.com
服务器别名 www.project1.cariocubicles.com

确保运行 apache 的用户具有 /home/project1/web/public 目录的读取权限

答案4

所以当我给 /home/userx 中的主目录一个 o+x 权限时,它现在起作用了,这安全吗,为什么它需要每个人都有执行权限

我需要确保我已经修改了文件夹的所有权和组信息,使用以下命令:chown apache2 /home/project1/public -R 和 chgrp apache2 /home/project1/public -R 如果命令显示用户 apache2 不存在,请将其替换为 httpd。这就是它在主目录(由您的用户拥有)中不起作用而在 /var/www 目录(由 apache2 拥有)中不起作用的原因。我建议在 /var/www/ 中创建一个指向您的主目录的符号链接。这是标准做法。(让其他人更容易看到发生了什么)

相关内容