使用 mod_tile 身份验证打开街道地图图块服务器

Open Street Map Tile Server using mod_tile authentication

我正在为客户端应用程序创建一个 tile 服务器集群,由于带宽成本,我们想向 apache 中的 mod_tiles 模块添加某种身份验证。我更喜欢使用 oauth 的应用程序令牌,但如果我必须使用基本身份验证或类似的东西,那就没问题了。

我有一个类似的问题,我用 apache 基本身份验证解决了它。

我所做的第一件事是禁用 mod_tile 不安全的连接。这是必要的,因为基本身份验证没有加密,并且通过不安全的连接询问用户的 login/password 通常不是一个好主意。

然后,我的虚拟主机文件(在我的例子中是 /etc/apache2/sites-available/000-default-le-ssl.conf)如下所示:

<IfModule mod_ssl.c>
<VirtualHost *:443>
        DocumentRoot /var/www/html
        ServerName example.com
        ServerAdmin admin@example.com

        # Standard dir connfiguration
        <Directory /var/www/html>
                Options +FollowSymLinks
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>

        # Set BasicAuth on location
        <Location />
                AuthType Basic
                AuthName "Authentication Required"
                AuthUserFile /usr/local/.tileauth
                Require valid-user
        </Location>

        # Enable tile server
        LoadTileConfigFile /usr/local/etc/renderd.conf
        ModTileRenderdSocketName /var/run/renderd/renderd.sock
        ModTileRequestTimeout 0
        ModTileMissingRequestTimeout 30

        # Specify certificate and key using letsencrypt
        SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

所以,设置基本身份验证的东西在 <Location> 块内。密码文件是这样生成的:

$ htpasswd -c /usr/local/.tileauth tile_server_user

除此之外,我还建议使用 fail2ban 来监控基本身份验证尝试,因为 apache 本身没有暴力攻击保护。希望这对您有所帮助!