Страница 1 из 2

Geoserver должен быть доступен в интернет

Добавлено: 03 мар 2016, 11:03
aspirant-1
Установлена связка Geoserver-PostgeSQL-XAMPP.

Установлены библиотеки OpenLayers и GeoExt.

Из XAMPP установлены Apache HTTP Web Server, PHPMYADMIN.

Создана html-страница, карта отображается нормально. В библиотеке tree-legend.js прописан мой ip-адрес со ссылкой на wms геосервера.

Настроил Apache, чтобы он смотрел наружу (ну я так думаю) - listen 0.0.0.0, закинул туда страницу с картой и библиотеками.

Всё стартует и отображается на компе нормально! НО!

Перехожу при просмотре на другом компьютере, пользовательские слои не отображаются. такое ощущение, что нужно, чтобы ещё и Geoserver смотрел наружу.

Подскажите, как решить этот вопрос?

Re: Geoserver должен быть доступен в интернет

Добавлено: 03 мар 2016, 11:20
Denis Rykov
GeoServer разворачивали каким образом? Настройте web сервер на котором опубликован GeoServer.

Re: Geoserver должен быть доступен в интернет

Добавлено: 03 мар 2016, 11:45
jerry-maori
Стоп. А Tomcat из состава XAMPP куда смотрит?

Re: Geoserver должен быть доступен в интернет

Добавлено: 03 мар 2016, 11:54
aspirant-1
Geoserver устанавливал с помощью установщика Windows. Не совсем понятно, как настроить web-сервер на котором стоит geoserver? Где это прописывается?

Tomcat не стоит вообще. Подозреваю, что в нём то и дело.

Re: Geoserver должен быть доступен в интернет

Добавлено: 03 мар 2016, 12:02
jerry-maori
А критично именно под Windows всё разворачивать?
Я бы всё таки взял 14.04, поставил LAMP (ну с заменой на Postgre), поставил Tomcat, из war поставил Geoserver
Когда возился с разворачиванием, то была тоже проблема с выпуском наружу (ну там tomcat сидит на 8080, а хочется на 80 и т.д., а между серваком и внещним миров ещё TMG, которая на 8080 неврно реагируетс...).
Сохранился кусок шпаргалки (но не помню, к чему именно)

Код: Выделить всё

Setting AUTHBIND=yes in /etc/default/tomcat7 should allow Tomcat to listen on port 80 and/or 443 (when configured to do so in /etc/tomcat7/server.xml). However, it does not work.

The problem is the file /etc/authbind/byuid/105, which is created by the tomcat7 post-install script (/var/lib/dpkg/info/tomcat7.postinst lines 57-68). The content is:
  0.0.0.0/0:1,1023

This only authorizes IPv4 addresses, but fails as Tomcat will typically bind to IPv4 and IPv6.

Authorizing the port range 1-1023 will not work for ports 512-1023 as the authbind man page says 512-1023 are more dangerous so require the file name to start with "!" (presumably byuid/!105).

A much better approach is to authorize Tomcat for only ports 80 (http) and 443 (https). I am sure that covers 99.999999% of use of ports <1024 so it is more secure not to authorize more.

The permissions on the file are wrong. The file only needs to be readable by root. It should not be writeable by tomcat7. That gives tomcat7 the ability to change the file to use any port <1024. The confusion is because files in /etc/authbind/byport/ (and byaddr/) do need to be owned by the relevant user because it is the existance (not content) of those files that convey authority.

SOLUTION
The file /etc/authbind/byuid/105 (where 105 is the UID for the tomcat7 user) should have the following permissions:

-rw------- 1 root root 44 Apr 11 12:30 /etc/authbind/byuid/105

It should have the following content (authorizing use or ports 80 and 443 for any IPv6 or IPv4 interface):

::/0,80
::/0,443
0.0.0.0/0,80
0.0.0.0/0,443

Re: Geoserver должен быть доступен в интернет

Добавлено: 03 мар 2016, 12:13
Denis Rykov
Значит у вас Jetty, встроенный в виндовый установщик, его настройки находятся в файле jetty.xml, по умолчанию он слушает только localhost. Ещё настройки могут задаваться в строке запуска сервиса.

Re: Geoserver должен быть доступен в интернет

Добавлено: 03 мар 2016, 12:49
aspirant-1
Всем большое спасибо! Буду разбираться!

Re: Geoserver должен быть доступен в интернет

Добавлено: 03 мар 2016, 22:28
aspirant-1
Добавил строчку в Jetty.xml

<Set name="Host"><SystemProperty name="jetty.host" default="0.0.0.0"/></Set>
Вроде бы как geosrver должен слушать все внешние запросы.

В меню "статус geoserver" перезагрузил конфигурацию. Перезагрузил Apache.
Тем не менее, пользовательский слой не отображается. Прогресс заключается в том, что начала отображаться подложка OSM. Вчера не было и этого.

Может быть нужно, чтобы Jetty слушал порт 80 как у Apache, а не 8080 как у Geoserver?

Попробовал, но не получилось.

Помогите советом.

Re: Geoserver должен быть доступен в интернет

Добавлено: 04 мар 2016, 08:31
jerry-maori
1. Давайте код html (js), который лежит на Apache и по идее вызывает geoserver
2. NMAPом посмотрите, какие вообще порты торчат наружу у вашего геокадавра
3. То, что jetty (теоретически) принимает запросы извне, ещё не означает, что он сразу слушает все 65к портов...

Re: Geoserver должен быть доступен в интернет

Добавлено: 04 мар 2016, 10:10
aspirant-1
Вот этот код!

Ext.require([
'Ext.container.Viewport',
'Ext.layout.container.Border',
'GeoExt.tree.Panel',
'Ext.tree.plugin.TreeViewDragDrop',
'GeoExt.panel.Map',
'GeoExt.tree.OverlayLayerContainer',
'GeoExt.tree.BaseLayerContainer',
'GeoExt.data.LayerTreeModel',
'GeoExt.tree.View',
'GeoExt.container.WmsLegend',
'GeoExt.tree.Column',
// We need to require this class, even though it is used by Ext.EventObjectImpl
// see: http://www.sencha.com/forum/showthread. ... ObjectImpl
'Ext.util.Point'
]);

Ext.application({
name: 'Tree Legend',
launch: function() {
var mapPanel = Ext.create('GeoExt.MapPanel', {
region: "center",
center: [45.000, 53.000],
zoom: 8,
layers: [
new OpenLayers.Layer.WMS("OpenStreetMap WMS",
"https://ows.terrestris.de/osm/service?",
{layers: 'OSM-WMS'},
{
attribution: '&copy; terrestris GmbH & Co. KG <br>' +
'Data &copy; OpenStreetMap ' +
'<a href="http://www.openstreetmap.org/copyright/en"' +
'target="_blank">contributors<a>',
buffer: 0,
// exclude this layer from layer container nodes
displayInLayerSwitcher: false
}
),
new OpenLayers.Layer.WMS("Landscapes",
"http://192.168.12.1:8080/geoserver/landscapes/wms",
{
layers: 'landscapeswgs',
format: 'image/png',
transparent: true
},
{
singleTile: true
}
)
]
});

var store = Ext.create('Ext.data.TreeStore', {
model: 'GeoExt.data.LayerTreeModel',
root: {
plugins: [{
ptype: "gx_layercontainer",
loader: {
createNode: function(attr) {
// add a WMS legend to each node created
attr.component = {
xtype: "gx_wmslegend",
layerRecord: mapPanel.layers.getByLayer(attr.layer),
showTitle: false,
// custom class for css positioning
// see tree-legend.html
cls: "legend"
};
return GeoExt.tree.LayerLoader.prototype.createNode.call(this, attr);
}
}
}]
}
});

var tree = Ext.create('GeoExt.tree.Panel', {
region: "east",
title: "Layers",
width: 250,
autoScroll: true,
viewConfig: {
plugins: [{
ptype: 'treeviewdragdrop',
appendOnly: false
}]
},
store: store,
rootVisible: false,
lines: false
});

Ext.create('Ext.Viewport', {
layout: "fit",
hideBorders: true,
items: {
layout: "border",
items: [
mapPanel, tree, {
contentEl: desc,
region: "west",
width: 250,
bodyStyle: {padding: "5px"}
}
]
}
});
}
});

Re: Geoserver должен быть доступен в интернет

Добавлено: 04 мар 2016, 11:08
jerry-maori
1. На машине, где хостится ваш геокадавр, ничто не блочит доступ? windows firewall, KES, иное...
Адрес http://192.168.12.1:8080/geoserver/landscapes/wms доступен со всех компов? Его никто не блочит?

Re: Geoserver должен быть доступен в интернет

Добавлено: 04 мар 2016, 11:12
aspirant-1
У нас своя подсеть. С других компов geoserver доступен, проверяли. NMAP показал, что на 80 порту висит Apache, а на 8080 - http proxy. Дома динамический ip. Ещё попробую проверить порты. Попробуем!

Re: Geoserver должен быть доступен в интернет

Добавлено: 04 мар 2016, 14:43
jerry-maori
из дома 99% не заработает.
Если вы говорите, что с других машин виден не только порт 8080, но и сервисы geoserver, тогда неясно как получается, что
Перехожу при просмотре на другом компьютере, пользовательские слои не отображаются. такое ощущение, что нужно, чтобы ещё и Geoserver смотрел наружу.
Там вообще схема такая:
Apache слушает порт 80 и отвечает на него.
Geoserver (он так называется, а по сути это просто приложение на Java) запущен внутри Jetty (который по сути и есть истинный web-сервер). Jetty слушает порт 8080 и всё, что туда падает, он отправляет своему единственному апплету -- а именно GeoServer. Т.е. jetty- по сути обёртка над java приложением geoserver, которая позволяет через GET|POST ему кормить запросы и выдавать результат.
Вы делаете запрос на 80 порт. Там Apache и его страничка. На страничке запрос на 8080 порт, где сидит Jetty, которые передаёт запрос своему апплету GeoServer.
Он его выполняет. Получает результат. И полученное вы получаете в виде ответа Apache.

Я бы на вашем месте делал так:

ДЛЯ ПРОВЕРКИ ВООБЩЕ ФУНКЦИОНИРОВАНИЯ (В ПРЕДЕЛАХ ПОДСЕТИ)

0. Удостовериться, что с localhost (машина, где развёрнут весь зоопарк) вы можете с любой машины получить доступ к wms сервису. Делать ето с помошью QGIS, ARcGIS, XXXGIS, тупо через браузер - на ваш выбор

1. Удостовериться, что в пределах сети 192.168.12.x вы можете с любой машины получить доступ к wms сервису. Делать ето с помошью QGIS, ARcGIS, XXXGIS, тупо через браузер - на ваш выбор

ДЛЯ ПРОВЕРКИ ФУНКЦИОНИРОВАНИЯ (ИЗ ЛЮБОЙ ТОЧКИ ВСЕЛЕННОЙ)

2. Организовать трансляцию запросов "из вне". Т.е., чтобы ваш сервис WMS был виден, допустим по адресу XXX.XXX.XXX.XXX:31337 (где XXX.XXX.XXX.XXX - ваш внешний IP, 31337 - порт, который на маршрутизаторе пробрасывается на 192.168.12.10:8080)


Тут правда могут начаться проблемы с CORS.

http://enable-cors.org/server_apache.html
http://enable-cors.org/server_tomcat.html
Может быть нужно, чтобы Jetty слушал порт 80 как у Apache, а не 8080 как у Geoserver?
Нет. Если два приложения будут слушать один порт, они поругаются

Re: Geoserver должен быть доступен в интернет

Добавлено: 04 мар 2016, 17:18
Denis Rykov
jerry-maori писал(а):Он его выполняет. Получает результат. И полученное вы получаете в виде ответа Apache
Судя по URLам клиент получает ответ не от Apache, а от Jetty, а так как используются частные IP-адреса вида 192.168.0.0, то, естественно, через Интернет ничего работать не будет.

Re: Geoserver должен быть доступен в интернет

Добавлено: 04 мар 2016, 17:34
bim2010
Коллеги, а на роутере/файрволе разве не надо делать проброс порта 8080 ?
A 192.168.*.* заменить на localhost или статический IP?