Apache 为每个目录重定向到不同的端口

Apache 为每个目录重定向到不同的端口

我已将 Apache 虚拟主机配置为在端口 8000 上运行,并且在 Apache 前面的端口 80 上有 Varnish。问题是,如果我将其粘贴到浏览器中:

example.com/a_directory

我被重定向到 example.com:8000/a_directory

我收到无法连接的错误。在配置文件中我有以下内容:

<VirtualHost *:8000>
    ServerAdmin [email protected]

    DocumentRoot /var/www
    DirectoryIndex index.php index.html index.htm 

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory /var/www>
        AllowOverride All
    </Directory>

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

</VirtualHost>

答案1

这几乎肯定是由于自引用重定向造成的,例如当目录请求中缺少尾部斜杠时。在这种情况下,如果没有 ServerName 指令,Apache 将使用请求进入的端口 - 在您的情况下为 8000。在 Apache 2.x 中,ServerName 指令支持用于构建重定向的端口说明符。来自 Apache 文档:

ServerName 指令设置服务器用来标识自己的请求方案、主机名和端口。这在创建重定向 URL 时使用。

在您的 vhost 块中添加类似的内容(显然会更改为您的环境)ServerName www.foo.com:80,它应该告诉 Apache 使用上游代理端口而不是它正在监听的端口来构建这些重定向。

http://httpd.apache.org/docs/2.2/mod/core.html了解有关该指令的更多信息。

相关内容