我有一个 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>/.*) {
....