Моя установка состоит из двух серверов, один для хостинга веб-сайтов, а другой для выполнения тяжелой работы (например, 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".