0

我现在一直在 nginx 上遇到一个奇怪的问题。我有两台 nginx 服务器,一台托管我想转发到另一台服务器的内容。进行转发的站点启用了以下配置:

server {
  listen 80;
  server_name pastdomain.com;
  return 301 https://domain.com$request_uri?from_past_domain=true;
}

server {
  listen 443;
  server_name pastdomain.com;
  return 301 https://domain.com$request_uri?from_past_domain=true;

 # bunch of ssl config here
}

基本上我想将所有流量发送到新服务器,在那里它可以用一个新的 get 变量 from_past_domain 来解释,我可以在新服务器上根据需要解释它。

IE。过去的域名.com/thing/thing1/1/

将转化为

domain.com/thing/thing1/1?from_past_domain=true

现在它似乎正在工作,除了我刚刚访问 pastdomain.com 的情况

我反而得到 domain.com//?from_past_domain=true

这是不正确的。此外,它没有正确添加新的 get 参数。

IE。如果我有 pastdomain.com?test=1&test2=2 它转发到 domain.com/?test=1&test2=2?from_past_domain=true

我怎样才能正确转发这个?

4

1 回答 1

0

rewrite如果要更改 URI,则应使用。在这种情况下,nginx 会处理正确的请求参数。

此外,您可以将一个服务器块用于 HTTP 和 HTTPS。

server {
  listen 80;
  listen 443 ssl;
  server_name pastdomain.com;

  rewrite ^(.*)$ https://domain.com$1?from_past_domain=true permanent;

  # bunch of ssl config here
  # DO NOT use `ssl on;`
}
于 2015-07-02T07:46:53.763 回答