127.0.0.1 上的反向代理在本地有效,但不能通过网络运行

127.0.0.1 上的反向代理在本地有效,但不能通过网络运行

两个 Web 服务器,绑定到 127.0.0.1:8080 和 127.0.0.1:8081。Curl 验证它们是否按预期工作。

Apache 具有以下主机:

Host 192.168.1.1:80

<VirtualHost 192.168.1.1:80>
  ServerAdmin [email protected]
  ProxyPass             /       http://127.0.0.1:8080/
  ProxyPassReverse      /       http://127.0.0.1:8080/
  ServerName 192.168.1.1
  ServerAlias http://192.168.1.1
</VirtualHost>

Host 192.168.1.2:80

<VirtualHost 192.168.1.2:80>
  ServerAdmin [email protected]
  ProxyPass             /       http://127.0.0.1:8081/
  ProxyPassReverse      /       http://127.0.0.1:8081/
  ServerName 192.168.1.2
  ServerAlias http://192.168.1.2
</VirtualHost>

在服务器上,我可以 curl 到主机并收到适当的响应。(curl 192.168.1.1 给我来自 localhost:8080 的 Web 服务器响应)

远程主机根本无法连接到 192.168.1.1 或 .2。我遗漏了什么?

回复:评论

是的,默认目录指令仍然存在。

# Deny access to root file system
<Directory />
        Options None
        AllowOverride None
        Order Deny,Allow
        deny from all
</Directory>

尝试远程访问 192.168.1.1 时不会生成任何 apache 日志。它们是从本地 curl 时生成的。

如果我将 Web 服务器绑定到 *:8080 和 *:8081 而不是绑定到本地主机,那么我可以通过 192.168.1.1 和 192.168.1.2 从远程主机访问它们。

编辑2:

curl 详细输出:(类似于第二个 Web 服务器和 127.0.0.1:portnum)

[user@host mingle_12_2_1]$ curl -v 192.168.1.1
* About to connect() to 192.168.1.1 port 80
*   Trying 192.168.1.1... connected
* Connected to 192.168.1.1 (192.168.1.1) port 80
> GET / HTTP/1.1
> User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: 192.168.1.1
> Accept: */*
>
< HTTP/1.1 302 Found
< Date: Tue, 16 Oct 2012 16:22:08 GMT
< Server: Jetty(6.1.19)
< Cache-Control: no-cache
< Location: http://192.168.1.1/install
< X-Runtime: 130
< Content-Type: text/html; charset=utf-8
< Content-Length: 94
< Connection: close
Closing connection #0
<html><body>You are being <a href="http://192.168.1.1/install">redirected</a>.</body></html>

从请求本地登录

192.168.1.1 - - [16/Oct/2012:12:22:08 -0400] "GET / HTTP/1.1" 302 94

当远程客户端发出请求时,没有生成 apache 访问日志或错误日志。

编辑3

除了使用的 IP 地址外,curl 和日志到两个主机都是相同的。与安全管理员合作以获取锁定规则以获取更多信息。

答案1

由于 proxypass 设置完全在(虚拟)URL 空间中运行,因此您需要通过 Location 指令授予对每个 vhost 的访问权限:

<VirtualHost 192.168.1.1:80>
  ServerAdmin [email protected]
  ProxyPass / http://127.0.0.1:8080/
  ProxyPassReverse / http://127.0.0.1:8080/
  ServerName 192.168.1.1
  <Location />
    Order allow,deny
    Allow from All
  </Location>
</VirtualHost>

另外,如果您不使用 NameVirtualHosts,请将其删除,并且 ServerName 必须是主机名,没有方案或端口或其他任何东西。只是一个主机名。

答案2

您能否提供:

  • curl 语法/输出(使用详细)
  • 来自 apache 的日志
  • ifconfig 输出
  • 猫/等/主机
  • 防火墙规则集
  • SELinux 启用/禁用?

* 更新 *

您还ServerAlias应该删除http://不需要的部分,更不用说由于您的ServerName与相同ServerAliasServerAlias所以不需要。

相关内容