通过 nginx 代理任意域名+路径

通过 nginx 代理任意域名+路径

我有一个 nginx 配置,允许我通过它代理任意 URL。例如:

https://proxy.example.com/?address=http://anywhere.net/path/to/file

此配置有效(除了重定向不维护代理的 URL):

server {
  server_name proxy.example.com;
  listen 80;

  resolver 1.1.1.1;

  location / {
    proxy_intercept_errors on;
    error_page 301 302 307 = @handle_redirects;

    if ($arg_address != "") {
      proxy_pass $arg_address;
    }
  }

  location @handle_redirects {
    set $orig_loc $upstream_http_location;
    proxy_pass $orig_loc;
  }  
}

不幸的是,我真正需要的是一种指定目标域 + 路径的方法在请求路径中, 像这样:

https://proxy.example.com/anywhere.net/path/to/file

这基本上会提供来自http://anywhere.net/path/to/file(目标始终是 HTTP)的内容。

我的印象是 nginx 可能无法做到这一点,因为我尝试了许多不同的配置都没有成功(不值得发布,因为实际上都没有起作用)。

我的用例是一款通过 HTTPS 运行的应用,但必须显示有时只能通过 HTTP 访问的用户网站。这是一个代理,可在严格控制的环境中防止混合内容被阻止。

关于如何通过请求路径代理任意域 + 路径的任何指针?(在不更改 URL 的情况下遵循重定向是一种奖励。)

答案1

也许你想检查一下配置这里。这似乎可以实现您的要求:

location ~* ^/proxy/(?<pschema>https?)/(?<phost>[\w.]+)(?<puri>/.*) {
    ....

相关内容