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

Использование прокси с nginx для GeoServer в Ubuntu

Я успешно установил GeoServer 2.11.1 на свой Ubuntu 16.04 LTS. с nginx. Я установил прокси с помощью nginx после этого руководствоИтак, теперь мой файл конфигурации для nginx выглядит так:

server {
        listen 80;
        root /usr/share/nginx/www;
        index index.html index.htm;
        proxy_redirect off;
        location /geodata {
                include proxy_params;
                proxy_pass http://localhost:8080/geoserver/web/;
        }
}

Когда я вхожу localhost/geodata/ Я захожу на главную страницу GeoServer. Все идет нормально.

Тем не мение,

http://localhost/j_spring_security_check: /j_spring_security_check not found

/geoserver/web/wicket/bookmarkable/org.geoserver.wcs.web.demo.WCSRequestBuilder;jsessionid=1i5x791bktwq9a2ug77vyax7n?4 not found

В последнем обратите внимание, как адрес geoserver, и не geodata. Это говорит мне, что каким-то образом proxy_pass не работает ни для чего, кроме главной страницы.

Это proxy_pass недостаточно для того, чтобы это работало?

РЕДАКТИРОВАТЬ Вот журнал одного успешного и одного неудачного события.

127.0.0.1 - - [21/Jun/2017:08:48:22 +0200] "GET /geodata/wicket/bookmarkable/org.geoserver.wcs.web.demo.WCSRequestBuilder;jsessionid=1i945lcowjlas113w2ru2mo5j HTTP/1.1" 302 0 "http://localhost/geodata/wicket/bookmarkable/org.geoserver.web.DemoPage;jsessionid=1i945lcowjlas113w2ru2mo5j" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0"

127.0.0.1 - - [21/Jun/2017:08:48:22 +0200] "GET /geoserver/web/wicket/bookmarkable/org.geoserver.wcs.web.demo.WCSRequestBuilder;jsessionid=1i945lcowjlas113w2ru2mo5j?3 HTTP/1.1" 404 152 "http://localhost/geodata/wicket/bookmarkable/org.geoserver.web.DemoPage;jsessionid=1i945lcowjlas113w2ru2mo5j" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0"

Когда мы получим несколько журналов, будет легче диагностировать, но для начала, не могли бы вы попробовать:

server {
    listen 80;

    root /path/to/geoserver/directory;

    index index.html index.htm;

    location ^~ /geoserver/web/ { 
        rewrite ^/geoserver/web(/.*)$ /geodata$1 permanent;
    }

    location ^~ /j_spring_security_check {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto http;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://localhost:8080/geoserver/;
    }

    location ^~ /geodata/ {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto http;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://localhost:8080/geoserver/web/;
    }


}

Если вы на сервере перейдете к http: // локальный: 8080 / геосервер (не геосервер / веб) - все равно работает?

Я думаю, здесь есть две проблемы:

  1. Базовый URL-адрес вашего программного обеспечения геосервера установлен на /geoserver/web, что означает, что он создает ссылки, начиная с этого. Вам необходимо изменить конфигурацию программного обеспечения, чтобы изменить базовый URL.

  2. Ваша конфигурация nginx выполняет каждый запрос, который начинается с /geodata перейти к http://localhost:8080/geoserver/web/ URL на бэкэнде. Следовательно, остальная часть URL-адреса теряется в процессе. Чтобы исправить это, вам нужно использовать следующую конфигурацию:

    server {
        listen 80;
        root /usr/share/nginx/www;
        index index.html index.htm;
        proxy_redirect off;
        location ~ ^/geodata(.*)$ {
            include proxy_params;
            proxy_pass http://localhost:8080/geoserver/web$1;
        }
    }
    

Здесь мы фиксируем часть, появляющуюся после /geodata в переменную, а затем добавьте содержимое переменной в proxy_pass место назначения.