我们有一个 Apache 服务器,它充当在不同端口上运行的应用程序的代理。例如:
domain.com/app1/service1 > localhost:101
domain.com/app1/service2 > localhost:102
domain.com/app2/service1 > localhost:201
确定应用程序端口的规则相当复杂,因此我使用脚本通过 mod_rewrite 来执行此操作:
RewriteEngine On
RewriteMap mapper prg:/foler/rewriteUrl.sh
RewriteRule ^(.*)$ ${mapper:%{REQUEST_URI}} [P]
我遇到的问题是,查看日志时,发现有很多机器人请求从其他网站获取内容。我测试了是否可以代理来自其他服务器的内容,结果是:
telnet domain.com 80
GET http://www.yahoo.com/ HTTP/1.1
Host: www.yahoo.com
在这里我从雅虎获取内容,这意味着任何人都可以连接到我的服务器并开始向其他服务器发出请求。
我看到 Apache 建议按照这里所述保护您的代理:
http://httpd.apache.org/docs/trunk/mod/mod_proxy.html#access
但问题是我不知道哪些 IP 会提前使用我的服务器,所以我的问题是如何解决这个问题,同时任何人都可以向我的应用程序发出请求?
一些附加信息:
- 我的所有应用程序都与 Apache 服务器位于同一台机器上
- 如果我需要将我的应用程序移动到不同的服务器,它们仍将保留在我的 Intrantet 上
- 我已启用 mod_proxy、mod_proxy_http 和 mod_rewrite
谢谢
答案1
如果我正确理解了你在做什么,你不需要正向代理,而需要网关,因为你代理的都是从 WAN 到内联网的请求,即反向代理,为什么不禁用ProxyRequest
?
ProxyRequest Off
ProxyRequests指令
这允许或阻止 Apache httpd 作为正向代理服务器运行。(将 ProxyRequests 设置为 Off 不会禁用 ProxyPass 指令的使用。)
在典型的反向代理或网关配置中,此选项应设置为关闭。