我正在尝试将 Apache 设置为 Docker 应用程序的前端代理。我过去曾多次这样做过,但出于某种原因,我拥有的新 Ubuntu VPS 无法配合。我使用的是 Apache/2.4.18。
我正在使用这个虚拟主机:
<VirtualHost *:80>
ServerName blog.example.com
ProxyPass / http://127.0.0.1:8083/
ProxyPassReverse / http://127.0.0.1:8083/
</VirtualHost>
我已经启用了必要的模块:
a2enmod proxy
a2enmod proxy_html
a2enmod xml2enc
Apache 启动正常,但我在日志中收到此错误,另外浏览器中还出现标准 500 崩溃消息:
AH01144:没有对 URL / 有效的协议处理程序。如果您使用的是 mod_proxy 的 DSO 版本,请确保使用 LoadModule 将代理子模块包含在配置中。
网络上多次提到了这个问题,但建议基本上反映了错误消息的内容,即我需要确保代理模块已加载。我可以 100% 确认它们已加载 - 事实上,如果我LoadModule
在 vhost 配置中复制命令,Apache 将无法启动,因为模块已加载。
从这里看它们也同样装载了:
$ apachectl -M | grep proxy
proxy_module (shared)
proxy_html_module (shared)
我可以确认 Docker 应用程序正在提供 HTTP 响应(无论如何我认为它还没有到达那么远):
root@agnes:~# wget localhost:8083
--2018-04-02 19:04:46-- http://localhost:8083/
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:8083... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7 [text/html]
Saving to: ‘index.html’
index.html 100%[=========================================================================================================================================>] 7 --.-KB/s in 0s
2018-04-02 19:04:46 (1.20 MB/s) - ‘index.html’ saved [7/7]
root@agnes:~# cat index.html
Hello
我很困惑,不知道我可能还遇到了什么其他问题。进一步研究这个问题并不容易,因为搜索引擎结果被一个似乎不适用于我的情况的常见答案淹没了。
答案1
需要加载mod_proxy_http
才能代理http协议。