0

(我从 serverfault 发布这个,因为我没有得到任何回复,而且我们这里有很多 apache 专业人士)

我正在使用我的 apache 作为反向代理来处理对在内部端口上运行的网络服务器的一些请求,以允许通过我的常规虚拟主机进行访问。这是在 vagrant 中运行 apache 2.4 的 ubuntu 15 上。

这是我的虚拟主机配置:

<VirtualHost *:80>
  DocumentRoot /vagrant/htdocs
  ServerName test.vm

  # proxy pass mailcatcher to internal webserver
  <Location /mailcatcher>
    ProxyPass http://localhost:1080
    ProxyPassReverse http://localhost:1080
  </Location>
  <Location /assets>
    ProxyPass http://localhost:1080/assets
  </Location>
  <Location /messages>
    ProxyPass ws://localhost:1080/messages
    ProxyPassReverse http://localhost:1080
  </Location> 

  <Directory />
    Require all granted
  </Directory>

  <Directory /vagrant/htdocs>
    AllowOverride all
  </Directory>
</VirtualHost>

有一段时间,这工作正常。然而,过了一段时间,突然间所有对这个虚拟主机的请求都被代理到了内部网络服务器。因此,如果我一开始打电话http://test.vm/cron/mails.php,它将mails.php按预期运行。然而,在随机的时间或事件之后,突然上述 URL 将开始提供来自Mailcatcher的响应。

您要查找的消息不存在,或没有此类型的内容

这是您在请求不再存在的消息时收到的 Mailcatcher 错误。

该服务 Mailcatcher 由我的虚拟机启动并一直运行。奇怪的是,当我在 VM 上做其他事情时(上面运行了一个 Web 应用程序),我没有遇到这个问题。只有当我积极调试邮件并使用 Mailcatcher gui 时,我才会突然遇到这种情况。

等待一段时间或重新启动 apache“解决”了这个问题,直到它下次弹出。谁能帮我解决这个问题?我的代理设置错了吗?

谢谢。

4

1 回答 1

0

你可以试试这些:

<VirtualHost *:80>
        ServerName mailcatcher.domain.tld

        ServerAdmin webmaster@domain.tld

        <Location />
                ProxyPass           http://localhost:1080/
                ProxyPassReverse    http://localhost:1080/
        </Location>
        <Location /messages>
                ProxyPass           ws://localhost:1080/messages
                ProxyPassReverse    ws://localhost:1080/messages

        </Location>


        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

备注:

  • 当然 localhost 是在您的 /etc/hosts 中设置的,或者应该更改为您的 mailcatcher 服务器。
  • 最好将主机名专用于 mailcatcher 服务。使用 mod_proxy 并不容易正确管理子目录路径。
于 2016-09-28T10:00:01.820 回答