微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

nginx – 将请求转发给另一个代理

所以,我有一个第三方代理(可能在squid下),它只接受来自我的一个IP的连接,但我需要能够从各种IP访问它.

所以我试图把一个Nginx转发给这个代理的请求.我知道Nginx可以像这样转发请求:

location / {
    proxy_pass http://$http_host$uri$is_args$args;
}

如果我需要Nginx将请求直接转发到目标站点,这将有效,但我需要它首先将它传递给代理X.我试过这个:

upstream myproxy {
   server X.X.X.X:8080;
}

location / {
   proxy_pass http://myproxy$uri$is_args$args; // also tried: http://myproxy$http_host$uri$is_args$args
}

但我得到“(104)连接重置由同行”.我猜是因为Nginx代理如下:

GET /index.html HTTP/1.1
Host: www.targetdomain.com.br

但我需要它代理这样:

GET http://www.targetdomain.com.br/index.html HTTP/1.1

解决方法:

我发现这有效:

http {
  # resolver 8.8.8.8; # Needed if you use a hostname for the proxy
  server_name ~(?<subdomain>.+)\.domain\.com$;

  server {
    listen 80;

    location / {
      proxy_redirect off;
      proxy_set_header Host $subdomain;
      proxy_set_header X-Forwarded-Host $http_host;
      proxy_pass "http://X.X.X.X:8080$request_uri";
    }
  }
}

如果X.X.X.X是主机名而不是IP,则需要使用解析程序.

检查https://github.com/kawanet/nginx-forward-proxy/blob/master/etc/nginx.conf获取更多技巧.

编辑:还检查nginx server_name wildcard or catch-allhttp://nginx.org/en/docs/http/ngx_http_core_module.html#var_server_name

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐