我有一个配置,我使用两个服务器,一个作为代理,一个包含所有业务逻辑,数据库等。
在代理服务器上,我使用nginx建立与外界的SSL连接,因此业务逻辑仅在Intranet中可用。
使用代理我想限制对业务逻辑的某些部分的访问。我只想提供对GeoServer的API的访问,而不是对管理界面的访问。因此,我限制访问/geoserver/abc_def/wfs
之类的位置。我使用以下代理配置:
location ~ "^/geoserver/(?<building>[a-zA-Z0-9_-]+)/wfs(?<req>.*)" {
proxy_pass http://x.y.z.a/geoserver/$building/wfs$req;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
除查询字符串外,这个工作原理。有效请求为/geoserver/abc_def/wfs?version=2.0.0&service=wfs&request=GetCapabilities
,但代理不会传递以?
开头的查询字符串。
这对我来说似乎有点不对劲。 实际上我只想限制位置/geoserver/*/wfs
才能被代理。
答案 0 :(得分:0)
查询args没有在location指令中捕获,它们可以通过$ args变量
访问$ is_args变量还包含问号,如果$ args不为空
所以看起来你需要这样的东西
location ~ ^/geoserver/([a-zA-Z0-9_-]+)/wfs$ {
proxy_pass http://x.y.z.a/geoserver/$1/wfs$is_args$args
...