我已经在 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
我认为这里有两个问题:
您的 geoserver 软件的基本 URL 设置为
/geoserver/web
,这意味着它会生成以此开头的链接。您需要更改软件的配置才能更改基本 URL。您的 nginx 配置会在后端发出以
/geodata
go tohttp://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
目标。