nginx 反向代理隐藏登录查询,包括 301 重定向或完全合格的 URL

nginx 反向代理隐藏登录查询,包括 301 重定向或完全合格的 URL

我已经花了两天多的时间在这个问题上,尝试了几个服务器(apache,现在是 nginx),搜索了整个网络,但到目前为止还没有运气。

首先:抱歉,我发布的网址使用的是 http-s 而不是 https - 这是因为我不允许在这里发布超过两个链接 :(

  1. 购买登录帐户后,网站会提供杂志档案的访问权限。现在我们整个研究所只有一个帐户。但我们不想在这里的所有人之间共享登录凭据,所以我们认为可以设置一个代理,让其“在后台进行登录”之类的。

  2. 登录凭据可以通过 http GET(URL 中的查询参数)提交,例如

    http-s://www.magaine.org/science/issueSelect?user=institute&pass=secret

  3. 一切都投降 ssl 加密。

  4. 设置:

    要求:
    [用户] --> http-s://proxyserver.org/science/issueSelect --> [代理] --> http-s://www.magazine.org/science/issueSelect?user=institute&pass=secret [杂志服务器]
    回复:
    [杂志服务器] --> http-s://www.magazine.org/science/issueSelect?ser=institute&pass=secret --> [代理] --> http-s://www.proxyserver.org/science/issueSelect --> [用户]

通常,使用 nginx、apache 等进行配置应该没有问题。但我遇到的问题是,有时登录凭据会出现在用户浏览器的 URL 栏中。什么时候会发生这种情况?当杂志服务器提供“特殊”超链接(可能也会重定向到其他地方)时。这些超链接似乎不是相对的,而是绝对的。尽管如此,反向代理似乎正确地将它们转换回来,因为这些链接也将我的 proxyhost.org 作为 fqdn。

一些导航链接 --> 按照应有的方式运行
a href="/nature/...">自然
a href="/science/...">科学
a href="/it/...">IT

一些文章概述链接 --> 点击后会在 URL 栏中显示登录凭据
a href="http-s://proxyserver.org/science/2015/1>2015 年第 1 期
a href="http-s://proxyserver.org/science/2015/2>2015 年第 2 期

我也感觉到这些问题链接背后也有一些重定向。

这是我的配置:

服务器 {
    听443 ssl;
    服务器名称proxyserver.org;

    ssl_证书/etc/nginx/ssl/proxyserver.certificate;
    ssl_certificate_key /etc/nginx/ssl/proxyserver.key;

    ssl 开启;
    ssl_session_cache 内置:1000 共享:SSL:10m;
    ssl_协议 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers开启;

    访问日志/var/log/nginx/access.log;


    地点 /
    {
      proxy_set_header 主机 $host;
      proxy_set_header X-真实IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      设置$args $args&user=institute&pass=secret;
# 也有效
# 重写 ^(.*)$ $1?user=institute&pass=secret? break;
      proxy_pass https://www.magazine.org;
# 无法正常工作:404
#proxy_redirect https://www.magazine.org/ https://proxyserver.org/;
    }
  }

有什么办法可以解决这个问题吗?或者我需要一个更复杂的方法,比如在我的代理上安装一个小客户端,它还可以保存会话 cookie 等?谢谢!

答案1

好的,是 location 标头被修改了,导致 URL 查询参数显示在 URL 栏中。我可以通过 nginx 引擎动态修改它来摆脱这种现象:

proxy_redirect "~^(.*)\?.*$" "$1";

我不知道 proxy_redirect 具有正则表达式功能,应该阅读更详细的手册。现在我已获得预期的功能。

相关内容