在 Ubuntu 上为 GeoServer 使用 nginx 代理

在 Ubuntu 上为 GeoServer 使用 nginx 代理

我已经在 Ubuntu 16.04 LTS 上成功安装了 GeoServer 2.11.1。使用 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

  • 或者当我进入时Demos -> WCS request builder出现错误:

/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"

答案1

一旦我们获得一些日志,诊断就会更容易,但首先,您可以尝试:

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://localhost:8080/geoserver(不是 geoserver/web) - 它还能工作吗?

答案2

我认为这里有两个问题:

  1. 您的 geoserver 软件的基本 URL 设置为/geoserver/web,这意味着它会生成以此开头的链接。您需要更改软件的配置才能更改基本 URL。

  2. 您的 nginx 配置会在后端发出以/geodatago to 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目标。

相关内容