客户端被服务器配置 Appache 反向代理拒绝

客户端被服务器配置 Appache 反向代理拒绝

这让我抓狂不已,我在网上搜索过各种答案,但都没有用。

我在 Windows 上使用 Apache 2.2.9,我的 httpd.conf 如下:

  NameVirtualHost *:80
  <VirtualHost *:80>
       ServerName MyLocalMachine.MyDomain.com
       DocumentRoot "C:/MyFolder/"

      <Directory "C:/MyFolder/SubDirectoryOne/SubDirectoryTwo">
         Options -Indexes FollowSymLinks
         AllowOverride All
         Order allow,deny
      </Directory>

     ProxyPass /MyFolder/SubDirectoryOne/ http://ServerOne.MyDomain.com/MyFolder/SubDirectoryOne/
     ProxyPassReverse /MyFolder/SubDirectoryOne/ http://ServerOne.MyDomain.com/MyFolder/SubDirectoryOne/
    </VirtualHost>

答案1

您仅授予对子目录的访问权限,而 documentroot 没有权限。

也不要将“绝对”选项“FollowSymlinks”与相对选项(-Indexes)混合,您可以在所有选项中使用 +/- 或根本不使用,但不要混合。

该目录的正确配置是:

 <Directory "C:/MyFolder/">
   Options FollowSymlinks  # Or Options -Indexes +FollowSymlinks
   Allow from all
   Order deny,allow
</Directory>

尝试一下这个,因为这“必须”允许访问 documentroot 和所有目录,但是如果您不指定 documentroot 而只指定子目录,那么您将无法访问 documentroot 下树中的其余目录。

边注:

另外,需要注意的是,ProxyPass 指令没有指定完整路径,而是相对于 DocumentRoot,所以您的 ProxyPass 应该是:

ProxyPass /SubdirectoryOne/ ...

一旦看到它有效,您就可以根据需要添加 AllowOverride all。尽管如果您有权访问主配置,您也根本不应该使用 .htaccess 文件,因为它仅适用于在某些目录中具有有限权限的用户,而不是管理员。它还会增加服务器的开销并使配置 apache 变得复杂。

答案2

不幸的是,您的配置确实没有什么意义。

当您使用 ProxyPass 将请求发送到另一个“后端”服务时,<Directory> 控制虚拟主机将请求映射到文件系统时 Apache 执行的操作。单个虚拟主机无法对同一请求执行两项操作。

我会首先向您拥有的每个虚拟主机(如果您有多个虚拟主机)添加单独的访问/错误日志,以验证请求是否到达您认为的位置。运行“httpd -S”以查看您定义了多少个虚拟主机。

“服务器配置拒绝客户端”的最常见原因详述如下:http://wiki.apache.org/httpd/ClientDeniedByServerConfiguration

相关内容