nginx反向代理对请求URL的处理方式有所不同



我们正在使用nginx在AWS Presto群集前提供安全层。我们注册了nginx-presto-cluster.our-domain.com

的SSL证书

PRESTO的请求通过基本身份验证通过NGINX。PRESTO的SQL查询会导致服务器的多序列请求,以获取查询结果。

我们创建了一个看起来像这样的nginx.conf:

location / {
  auth_basic $auth;
  auth_basic_user_file /etc/nginx/.htpasswd;
  sub_filter_types *;
  sub_filter_once off;
  sub_filter 'http://localhost:8889/' 'https://presto.nginx-presto-cluster.our-domain.com/';
  proxy_pass http://localhost:8889/;
}

Presto的响应包含以获取结果的Nexturi。sub_filter将这些URI从Localhost:8889重写为我们的安全域,在那里它们再次通过Nginx。

问题:第一个响应的主体看起来完全可以,

{
  "id":"20171123_104423_00092_u7hmr"
  , ... 
  ,"nextUri":"https://presto.nginx-presto-cluster.our-domain.com/v1/statement/20171123_104423_00092_u7hmr/1"
  , ...
}

但是,第二个请求看起来像:

{
  "id":"20171123_105250_00097_u7hmr"
  , ...
  , "nextUri":"http://localhost:8889/v1/statement/20171123_105250_00097_u7hmr/2"
  , ...
}

我们希望重写始终以相同的方式工作。

您可以帮助我们吗?

我们通过添加

解决了问题
proxy_set_header Accept-Encoding "";

进入上面的配置摘要。

原因是,如果启用了该流量,则可能会在过程中压缩。然后,替换字符串对压缩内容不起作用。

通过不接受任何编码,我们可以防止这种压缩。

相关内容

  • 没有找到相关文章

最新更新