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

Не знаете, где задать вопрос? Задавайте здесь.
aspirant-1
Активный участник
Сообщения: 127
Зарегистрирован: 04 май 2012, 21:23
Репутация: 12
Откуда: Пенза

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

Сообщение aspirant-1 » 03 мар 2016, 11:03

Установлена связка Geoserver-PostgeSQL-XAMPP.

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

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

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

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

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

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

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

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 526
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 03 мар 2016, 11:20

GeoServer разворачивали каким образом? Настройте web сервер на котором опубликован GeoServer.
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 142
Откуда: Нижний Новгород

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

Сообщение jerry-maori » 03 мар 2016, 11:45

Стоп. А Tomcat из состава XAMPP куда смотрит?

aspirant-1
Активный участник
Сообщения: 127
Зарегистрирован: 04 май 2012, 21:23
Репутация: 12
Откуда: Пенза

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

Сообщение aspirant-1 » 03 мар 2016, 11:54

Geoserver устанавливал с помощью установщика Windows. Не совсем понятно, как настроить web-сервер на котором стоит geoserver? Где это прописывается?

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

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 142
Откуда: Нижний Новгород

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

Сообщение jerry-maori » 03 мар 2016, 12:02

А критично именно под 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

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 526
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 03 мар 2016, 12:13

Значит у вас Jetty, встроенный в виндовый установщик, его настройки находятся в файле jetty.xml, по умолчанию он слушает только localhost. Ещё настройки могут задаваться в строке запуска сервиса.
Spatial is now, more than ever, just another column- The Geometry Column.

aspirant-1
Активный участник
Сообщения: 127
Зарегистрирован: 04 май 2012, 21:23
Репутация: 12
Откуда: Пенза

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

Сообщение aspirant-1 » 03 мар 2016, 12:49

Всем большое спасибо! Буду разбираться!

aspirant-1
Активный участник
Сообщения: 127
Зарегистрирован: 04 май 2012, 21:23
Репутация: 12
Откуда: Пенза

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

Сообщение aspirant-1 » 03 мар 2016, 22:28

Добавил строчку в Jetty.xml

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

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

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

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

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

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 142
Откуда: Нижний Новгород

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

Сообщение jerry-maori » 04 мар 2016, 08:31

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

aspirant-1
Активный участник
Сообщения: 127
Зарегистрирован: 04 май 2012, 21:23
Репутация: 12
Откуда: Пенза

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

Сообщение aspirant-1 » 04 мар 2016, 10:10

Вот этот код!

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"}
}
]
}
});
}
});

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 142
Откуда: Нижний Новгород

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

Сообщение jerry-maori » 04 мар 2016, 11:08

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

aspirant-1
Активный участник
Сообщения: 127
Зарегистрирован: 04 май 2012, 21:23
Репутация: 12
Откуда: Пенза

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

Сообщение aspirant-1 » 04 мар 2016, 11:12

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

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 142
Откуда: Нижний Новгород

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

Сообщение jerry-maori » 04 мар 2016, 14:43

из дома 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?
Нет. Если два приложения будут слушать один порт, они поругаются
Последний раз редактировалось jerry-maori 04 мар 2016, 17:51, всего редактировалось 3 раза.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 526
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 04 мар 2016, 17:18

jerry-maori писал(а):Он его выполняет. Получает результат. И полученное вы получаете в виде ответа Apache
Судя по URLам клиент получает ответ не от Apache, а от Jetty, а так как используются частные IP-адреса вида 192.168.0.0, то, естественно, через Интернет ничего работать не будет.
Spatial is now, more than ever, just another column- The Geometry Column.

bim2010
Гуру
Сообщения: 974
Зарегистрирован: 27 янв 2009, 22:57
Статьи: 1
Проекты: 2
Репутация: 256

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

Сообщение bim2010 » 04 мар 2016, 17:34

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

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 13 гостей