Назад | Перейти на главную страницу

dynmap через mod_proxy на внешнем веб-сервере

Моя установка состоит из двух серверов, один для хостинга веб-сайтов, а другой для выполнения тяжелой работы (например, Minecraft). Я использую Spigot для поддержки некоторых плагинов, и один из плагинов - это dynmap (интерактивная карта для отображения мира и игроков в сети). Более подробная информация о динамической карте находится здесь: https://github.com/webbukkit/dynmap

В любом случае, я хочу использовать ReverseProxy на моем веб-сервере и прокси для содержимого динамической карты, чтобы я мог закрыть некоторые порты на маршрутизаторе. В настоящее время я только что сделал переадресацию порта на порт 8123 на мой сервер Minecraft.

На веб-сервере я сейчас использую Apache 2.4, и я установил mod_proxy и mod_proxy_html. Я также определил это в файле vhost как для HTTP, так и для HTTPS:

ProxyRequests off
ProxyPass "/map" "http://192.168.2.31:8123/"
ProxyPassReverse "/map" "http://192.168.2.31:8123/"

Это должно быть самоочевидным. Но когда я открываю страницу [ВЕБ-САЙТ] / карта, меня встречает белая пустая страница. Хотя я получаю это:

<!DOCTYPE html>
<html lang="en">
<head>

    <title>Minecraft Dynamic Map</title>

    <meta charset="utf-8" />
    <meta name="keywords" content="minecraft, map, dynamic" />
    <meta name="description" content="Minecraft Dynamic Map" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
    <!-- These 2 lines make us fullscreen on apple mobile products - remove if you don't like that -->
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />   

    <link rel="icon" href="images/dynmap.ico" type="image/ico" />

    <script type="text/javascript" src="js/jquery-1.11.0.js?_=2.3-2074"></script>
    <link rel="stylesheet" type="text/css" href="css/leaflet.css?_=2.3-2074" />
    <script type="text/javascript" src="js/leaflet.js?_=2.3-2074"></script>

    <script type="text/javascript" src="js/custommarker.js?_=2.3-2074"></script>

    <script type="text/javascript" src="js/dynmaputils.js?_=2.3-2074"></script>

    <!--<link rel="stylesheet" type="text/css" href="css/embedded.css" media="screen" />-->
    <link rel="stylesheet" type="text/css" href="css/standalone.css?_=2.3-2074" media="screen" />
    <link rel="stylesheet" type="text/css" href="css/dynmap_style.css?_=2.3-2074" media="screen" />
    <!-- <link rel="stylesheet" type="text/css" href="css/override.css" media="screen" /> -->

    <script type="text/javascript" src="version.js?_=2.3-2074"></script>
    <script type="text/javascript" src="js/jquery.json.js?_=2.3-2074"></script>
    <script type="text/javascript" src="js/jquery.mousewheel.js?_=2.3-2074"></script>
    <script type="text/javascript" src="js/minecraft.js?_=2.3-2074"></script>
    <script type="text/javascript" src="js/map.js?_=2.3-2074"></script>
    <script type="text/javascript" src="js/hdmap.js?_=2.3-2074"></script>
    <script type="text/javascript" src="standalone/config.js?_=2.3-2074"></script>

    <script type="text/javascript">
            $(document).ready(function() {
                window.dynmap = new DynMap($.extend({
                    container: $('#mcmap')
                }, config));
            });
    </script>

</head>
<body>
<noscript>
 For full functionality of this site it is necessary to enable JavaScript.
 Here are the <a href="http://www.enable-javascript.com/" target="_blank">
 instructions how to enable JavaScript in your web browser</a>.
</noscript>

    <div id="mcmap"></div>
</body>
</html>

Я также определил веб-сервер как «доверенный прокси» в конфигурации dynmap. Итак, я предполагаю, что JavaScript или изображения каким-то образом заблокированы? mod_security не устанавливается.

РЕДАКТИРОВАТЬ

Ссылки отображаются как 404, я, вероятно, должен добавить подссылки в прокси

РЕДАКТИРОВАТЬ 2

Хорошо, поэтому я добавил эти строки в конфигурацию vhost, и теперь я получаю гораздо меньше ошибок, это что-то.

        ProxyRequests off
    ProxyPass "/map"                "http://192.168.2.31:8123/"
    ProxyPass "/js"                 "http://192.168.2.31:8123/js/"
    ProxyPass "/js/minecraft"       "http://192.168.2.31:8123/js/minecraft/"
    ProxyPass "/js/map"             "http://192.168.2.31:8123/js/map/"
    ProxyPass "/css"                "http://192.168.2.31:8123/css/"
    ProxyPass "/standalone"         "http://192.168.2.31:8123/standalone/"

    ProxyPassReverse "/map"         "http://192.168.2.31:8123/"
    ProxyPassReverse "/js"          "http://192.168.2.31:8123/js/"
    ProxyPassReverse "/js/minecraft""http://192.168.2.31:8123/js/minecraft/"
    ProxyPassReverse "/js/map"      "http://192.168.2.31:8123/js/map/"
    ProxyPassReverse "/css"         "http://192.168.2.31:8123/css/"
    ProxyPassReverse "/standalone"  "http://192.168.2.31:8123/standalone/"

Я все еще пытаюсь понять, почему серверы не отправляют мне файлы .js, расположенные в / (см. Рисунок)

РЕДАКТИРОВАТЬ 3

Хорошо, это довольно странно. Но если я удалю последнюю обратную косую черту таким образом, я не получу 404 для файла -js в каталоге / standalone.

 ProxyPass "/standalone"  "http://192.168.2.31:8123/standalone"
 ProxyPassReverse "/standalone"  "http://192.168.2.31:8123/standalone"

РЕДАКТИРОВАТЬ 4

Хорошо, хоть какой-то прогресс. Редактирование этих строк, как я делал в предыдущем редактировании, дало мне намного больше 404, но на этот раз это было из плиток и изображений. Так что это хорошо.

 ProxyPass "/up/configuration"   "http://192.168.2.31:8123/up/configuration"
 ProxyPassReverse "/up/configuration"   "http://192.168.2.31:8123/up/configuration"

Вам действительно следует проверить правила сопоставления URI для запросов прокси. И в целом предпочитаю <Location> для обработки прокси-контента. Также обратите внимание на директиву ProxyPassReverse в Apache, а также на конфигурацию динамической карты для местоположений его веб-ресурсов. По умолчанию он использует относительные пути, поэтому все, что вам нужно сделать, это

<Location "/map/"> ProxyPass http://192.168.2.31:8123/ </Location> Просто обратите внимание, что в такой конфигурации ваша карта будет зависеть от того, что сервер находится в сети.

Хорошо, после нескольких часов проб и ошибок. И много разных глаз, которые смотрели, я наконец придумал конфигурацию, которая выглядела так:

    ProxyRequests off
    ProxyPass "/map"                "http://192.168.2.31:8123/"
    ProxyPass "/js"                 "http://192.168.2.31:8123/js/"
    ProxyPass "/js/minecraft"       "http://192.168.2.31:8123/js/minecraft/"
    ProxyPass "/js/map"             "http://192.168.2.31:8123/js/map/"
    ProxyPass "/css"                "http://192.168.2.31:8123/css/"
    ProxyPass "/standalone"         "http://192.168.2.31:8123/standalone"
    ProxyPass "/up/configuration"   "http://192.168.2.31:8123/up/configuration"
    ProxyPass "/version.js"         "http://192.168.2.31:8123/version.js"
    ProxyPass "/images"             "http://192.168.2.31:8123/images/"
    ProxyPass "/tiles/world/t"      "http://192.168.2.31:8123/tiles/world/t"
    ProxyPass "/tiles/world/t_day"  "http://192.168.2.31:8123/tiles/world/t_day"
    ProxyPass "/tiles/world_nether/nt"      "http://192.168.2.31:8123/tiles/world_nether/nt"
    ProxyPass "/tiles/world_nether/flat"      "http://192.168.2.31:8123/tiles/world_nether/flat"
    ProxyPass "/tiles/world_the_end/st"      "http://192.168.2.31:8123/tiles/world_the_end/st"
    ProxyPass "/up/world/world"     "http://192.168.2.31:8123/up/world/world"
    ProxyPass "/up/world/world_nether"     "http://192.168.2.31:8123/up/world/world_nether"
    ProxyPass "/up/world/world_the_end"     "http://192.168.2.31:8123/up/world/world_the_end"
    ProxyPass "/mapimages"          "http://192.168.2.31:8123/mapimages/"
    ProxyPass "/tiles/_markers_"    "http://192.168.2.31:8123/tiles/_markers_"
    ProxyPass "/tiles/faces/16x16"  "http://192.168.2.31:8123/tiles/faces/16x16"
    ProxyPass "/tiles/faces/32x32"  "http://192.168.2.31:8123/tiles/faces/32x32"

    ProxyPassReverse "/map"         "http://192.168.2.31:8123/"
    ProxyPassReverse "/js"          "http://192.168.2.31:8123/js/"
    ProxyPassReverse "/js/minecraft""http://192.168.2.31:8123/js/minecraft/"
    ProxyPassReverse "/js/map"      "http://192.168.2.31:8123/js/map/"
    ProxyPassReverse "/css"         "http://192.168.2.31:8123/css/"
    ProxyPassReverse "/standalone"  "http://192.168.2.31:8123/standalone"
    ProxyPassReverse "/up/configuration"            "http://192.168.2.31:8123/up/configuration"
    ProxyPassReverse "/version.js"  "http://192.168.2.31:8123/version.js"
    ProxyPassReverse "/images"             "http://192.168.2.31:8123/images/"
    ProxyPassReverse "/tiles/world/t"             "http://192.168.2.31:8123/tiles/world/t"
    ProxyPassReverse "/tiles/world/t_day"             "http://192.168.2.31:8123/tiles/world/t_day"
    ProxyPassReverse "/tiles/world_nether/nt"      "http://192.168.2.31:8123/tiles/world_nether/nt"
    ProxyPassReverse "/tiles/world_the_end/st"      "http://192.168.2.31:8123/tiles/world_the_end/st"
    ProxyPassReverse "/up/world/world"   "http://192.168.2.31:8123/up/world/world"
    ProxyPassReverse "/up/world/world_nether"     "http://192.168.2.31:8123/up/world/world_nether"
    ProxyPassReverse "/up/world/world_the_end"     "http://192.168.2.31:8123/up/world/world_the_end"
    ProxyPassReverse "/mapimages"          "http://192.168.2.31:8123/mapimages/"
    ProxyPassReverse "/tiles/_markers_"    "http://192.168.2.31:8123/tiles/_markers_"
    ProxyPassReverse "/tiles/faces/16x16"  "http://192.168.2.31:8123/tiles/faces/16x16"
    ProxyPassReverse "/tiles/faces/32x32"  "http://192.168.2.31:8123/tiles/faces/32x32"

Это работает (в моем случае), но я знаю, что мне нужно переопределить все правила, если есть изменение в структуре каталога. С этим конфигом все работает как надо.

Просто измените мировые имена, если у вас другое.

Я также рекомендую любому читателю попробовать предложение "AnrDaemons".