最近,我研究了地图服务器,或者更准确地说,图块服务器。我根据这个初学者指南设置了自己的图块服务器实例(除了使用 tilestream 而不是 tilestache):http://www.axismaps.com/blog/2012/01/dont-panic-an-absolute-beginners-guide-to-building-a-map-server/
服务器正在运行可通过http://example.com:8888
本次练习的目的是拥有一个可用的地图服务器,不受任何使用限制(例如“每月 10,000 次地图浏览”),以提供可以通过“frontend-geo-javascript-api”轻松访问的地图,例如 leaflet 或 mapbox.js,并显示在博客文章或围绕此类地图构建的“独立”网页上。
虽然流量激增且服务器出现问题的可能性不大,但我仍然想确保只有我的网页(我运行使用 tilestream 服务器的示例的网页)才能访问 tilestream 服务器。
基本上,我想阻止公众访问我的 Tilestream 服务器,即只有在传输了有效密钥的情况下才允许访问(这似乎是 cloudmade 所做的)。或者也许可以选择检查请求来自的位置,并且只允许从特定位置进行访问。
TileStream 服务器和 Web 服务器(版本:Apache/2.2.22(Ubuntu))在同一台机器上运行。
我真的不知道该怎么做,因为我找不到任何关于此的文档。欢迎提出任何建议。
答案1
前言
如果您有一个前端网络地图应用程序,并希望它成为唯一允许访问切片服务器的“客户端”,那么可以通过带有order deny,allow
指令的 Apache2 .conf 文件来实现。
如果要授予对图块服务器/文件夹的访问权限,您可以使用这些指令来指定允许的连接应来自的 IP 地址或主机名。
如果可以,请避免使用 .htaccess 文件。只有当您无法访问根文件系统时才应考虑使用它们。在这种情况下,听起来您有权限,因此最好避免使用 .htaccess。托管服务通常就是这种情况,但您在 ubuntu 上托管自己的网络服务器,对吗?
.conf 文件存储在根文件系统中,Web 服务器用户(如wwwrun
)无法直接访问它们。
看起来你可以确保/var/www/tiles文件夹仅允许在 LAN 上访问。
入门:
好的....这就是你要做的!
该博客告诉您编辑服务器的主 httpd.conf 文件...
我不会,看看你是否可以将整个<directory>
部分剪切并粘贴到一个名为的新文件中/etc/apache2/conf.d/tiles.conf
启动 Web 服务器时,conf.d 文件夹中的所有 .conf 文件都会自动加载。您应该已经在服务器的默认 .conf 文件之一(httpd.conf、default-server.conf 或 apache2.conf)中看到一行内容,内容为Include /etc/apache2/conf.d/*.conf
。
tiles.conf 的最简单内容形式如下:
<Directory /var/www/tiles>
Order deny,allow
deny from all
allow from localhost
</Directory>
您可以用类似或(的localhost
IP 进行替换127.0.0.1
192.168.1.1
如果在 LAN 之外,请将此 IP 替换为您访问 Web 服务器的任何 IP)。
您还可以指定多个以空格分隔的主机名/IP(即allow from localhost 123.123.123 tiles.example.com
)。
如果需要,请替换文件夹的路径tiles
(保存 .mbtiles 的位置)。
完成所需的更改后,重新启动/重新加载 apache2。
故障排除:
查看对 tiles 文件夹的调用来自何处的一个好方法是检查/var/log/apache2/access_log
条目。如果您无法连接(拒绝访问),请查看被拒绝的 IP 是哪个error_log
=)
您可以使用 实时查看这些日志tail -f /var/log/apache2/access_log
。尝试从 tiles 文件夹中抓取图块时,IP 将会显示在那里。
看Apache 2.2 访问控制解释了上述方法。此方法用于限制对资源在网络服务器上。这与验证使用用户名/密码。
最后,与<Files> Directive
可以限制对特定文件而不是目录的访问。