Geoserver должен быть доступен в интернет
-
- Активный участник
- Сообщения: 127
- Зарегистрирован: 04 май 2012, 21:23
- Репутация: 12
- Откуда: Пенза
Geoserver должен быть доступен в интернет
Установлена связка Geoserver-PostgeSQL-XAMPP.
Установлены библиотеки OpenLayers и GeoExt.
Из XAMPP установлены Apache HTTP Web Server, PHPMYADMIN.
Создана html-страница, карта отображается нормально. В библиотеке tree-legend.js прописан мой ip-адрес со ссылкой на wms геосервера.
Настроил Apache, чтобы он смотрел наружу (ну я так думаю) - listen 0.0.0.0, закинул туда страницу с картой и библиотеками.
Всё стартует и отображается на компе нормально! НО!
Перехожу при просмотре на другом компьютере, пользовательские слои не отображаются. такое ощущение, что нужно, чтобы ещё и Geoserver смотрел наружу.
Подскажите, как решить этот вопрос?
Установлены библиотеки 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
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Geoserver должен быть доступен в интернет
GeoServer разворачивали каким образом? Настройте web сервер на котором опубликован GeoServer.
Spatial is now, more than ever, just another column- The Geometry Column.
- jerry-maori
- Гуру
- Сообщения: 585
- Зарегистрирован: 22 авг 2012, 17:02
- Репутация: 143
- Откуда: Нижний Новгород
Re: Geoserver должен быть доступен в интернет
Стоп. А Tomcat из состава XAMPP куда смотрит?
-
- Активный участник
- Сообщения: 127
- Зарегистрирован: 04 май 2012, 21:23
- Репутация: 12
- Откуда: Пенза
Re: Geoserver должен быть доступен в интернет
Geoserver устанавливал с помощью установщика Windows. Не совсем понятно, как настроить web-сервер на котором стоит geoserver? Где это прописывается?
Tomcat не стоит вообще. Подозреваю, что в нём то и дело.
Tomcat не стоит вообще. Подозреваю, что в нём то и дело.
- jerry-maori
- Гуру
- Сообщения: 585
- Зарегистрирован: 22 авг 2012, 17:02
- Репутация: 143
- Откуда: Нижний Новгород
Re: Geoserver должен быть доступен в интернет
А критично именно под Windows всё разворачивать?
Я бы всё таки взял 14.04, поставил LAMP (ну с заменой на Postgre), поставил Tomcat, из war поставил Geoserver
Когда возился с разворачиванием, то была тоже проблема с выпуском наружу (ну там tomcat сидит на 8080, а хочется на 80 и т.д., а между серваком и внещним миров ещё TMG, которая на 8080 неврно реагируетс...).
Сохранился кусок шпаргалки (но не помню, к чему именно)
Я бы всё таки взял 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
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Geoserver должен быть доступен в интернет
Значит у вас Jetty, встроенный в виндовый установщик, его настройки находятся в файле jetty.xml, по умолчанию он слушает только localhost. Ещё настройки могут задаваться в строке запуска сервиса.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Активный участник
- Сообщения: 127
- Зарегистрирован: 04 май 2012, 21:23
- Репутация: 12
- Откуда: Пенза
Re: Geoserver должен быть доступен в интернет
Всем большое спасибо! Буду разбираться!
-
- Активный участник
- Сообщения: 127
- Зарегистрирован: 04 май 2012, 21:23
- Репутация: 12
- Откуда: Пенза
Re: Geoserver должен быть доступен в интернет
Добавил строчку в Jetty.xml
<Set name="Host"><SystemProperty name="jetty.host" default="0.0.0.0"/></Set>
Вроде бы как geosrver должен слушать все внешние запросы.
В меню "статус geoserver" перезагрузил конфигурацию. Перезагрузил Apache.
Тем не менее, пользовательский слой не отображается. Прогресс заключается в том, что начала отображаться подложка OSM. Вчера не было и этого.
Может быть нужно, чтобы Jetty слушал порт 80 как у Apache, а не 8080 как у Geoserver?
Попробовал, но не получилось.
Помогите советом.
<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
- Репутация: 143
- Откуда: Нижний Новгород
Re: Geoserver должен быть доступен в интернет
1. Давайте код html (js), который лежит на Apache и по идее вызывает geoserver
2. NMAPом посмотрите, какие вообще порты торчат наружу у вашего геокадавра
3. То, что jetty (теоретически) принимает запросы извне, ещё не означает, что он сразу слушает все 65к портов...
2. NMAPом посмотрите, какие вообще порты торчат наружу у вашего геокадавра
3. То, что jetty (теоретически) принимает запросы извне, ещё не означает, что он сразу слушает все 65к портов...
-
- Активный участник
- Сообщения: 127
- Зарегистрирован: 04 май 2012, 21:23
- Репутация: 12
- Откуда: Пенза
Re: Geoserver должен быть доступен в интернет
Вот этот код!
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: '© terrestris GmbH & Co. KG <br>' +
'Data © 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"}
}
]
}
});
}
});
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: '© terrestris GmbH & Co. KG <br>' +
'Data © 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
- Репутация: 143
- Откуда: Нижний Новгород
Re: Geoserver должен быть доступен в интернет
1. На машине, где хостится ваш геокадавр, ничто не блочит доступ? windows firewall, KES, иное...
Адрес http://192.168.12.1:8080/geoserver/landscapes/wms доступен со всех компов? Его никто не блочит?
Адрес http://192.168.12.1:8080/geoserver/landscapes/wms доступен со всех компов? Его никто не блочит?
-
- Активный участник
- Сообщения: 127
- Зарегистрирован: 04 май 2012, 21:23
- Репутация: 12
- Откуда: Пенза
Re: Geoserver должен быть доступен в интернет
У нас своя подсеть. С других компов geoserver доступен, проверяли. NMAP показал, что на 80 порту висит Apache, а на 8080 - http proxy. Дома динамический ip. Ещё попробую проверить порты. Попробуем!
- jerry-maori
- Гуру
- Сообщения: 585
- Зарегистрирован: 22 авг 2012, 17:02
- Репутация: 143
- Откуда: Нижний Новгород
Re: Geoserver должен быть доступен в интернет
из дома 99% не заработает.
Если вы говорите, что с других машин виден не только порт 8080, но и сервисы 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
Если вы говорите, что с других машин виден не только порт 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
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Geoserver должен быть доступен в интернет
Судя по URLам клиент получает ответ не от Apache, а от Jetty, а так как используются частные IP-адреса вида 192.168.0.0, то, естественно, через Интернет ничего работать не будет.jerry-maori писал(а):Он его выполняет. Получает результат. И полученное вы получаете в виде ответа Apache
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 977
- Зарегистрирован: 27 янв 2009, 22:57
- Репутация: 258
Re: Geoserver должен быть доступен в интернет
Коллеги, а на роутере/файрволе разве не надо делать проброс порта 8080 ?
A 192.168.*.* заменить на localhost или статический IP?
A 192.168.*.* заменить на localhost или статический IP?
Кто сейчас на конференции
Сейчас этот форум просматривают: Semrush [Bot] и 8 гостей