nginx - 如何反向代理所有内容,包括目录和资产

nginx - 如何反向代理所有内容,包括目录和资产

我们想要复制我们的网站(是的,我们知道重复的内容)。domain-a.com也需要可用domain-b.com

我的配置如下:

server {

  listen 80;
  server_name www.domain-b.com;

  location / {
    autoindex off;
    proxy_buffering   off;
    # rewrite  (.*) /$1 break;
    proxy_pass http://104.25.206.103;  # Cloudflare
    proxy_set_header Host www.domain-a.com;
    proxy_redirect    default;

  }
}

这对 有效www.domain-b.com/。但是www.domain-b.com/info/about返回 503。对 也一样/test.jpg

我们究竟怎样才能代理一切呢?

答案1

解决方案应该是:

server_name www.domain-a.com www.domain-b.org;

要不就

server_name *;

加上这个

proxy_set_header        Host $host;

这使得它充满活力。

503 Bad gateway通常是指无法访问上游服务器。不一定是配置出了问题。也可能是错误的X-Forwarded-Host标头,该标头proxy_set_header是静态的,Cloudflare 拒绝为其提供服务。

答案2

我的答案是一个稍微不同的解决方案。

我们最终基于 ruby​​/sinatra 创建了自己的“代理”,包括 cookie 处理。

get /(.*)/ do
  if (asset? || download?) && !exception?
    return redirect to(target_url), 301
  end

  begin
    agent = Mechanize.new
    cookies.each.map{ |k,v| agent.cookie_jar << Mechanize::Cookie.new(name: k, value: v, domain: ".we.us", path: "/") }

    response = agent.get(target_url)

    cookies.clear
    agent.cookies.map{ |cookie| cookies[cookie.name] = cookie.value }

    content_type(response.response['content-type'])
    send("modify_#{target}", response.body)

  rescue Mechanize::ResponseCodeError
    p "throw a 404!"
    status 404
  end
end

def asset?
  # binding.pry
  extensions = %W(.jpg .png .gif .jpeg .ico .woff .ttf .gif .woff2 .cur)
  url = target_url
  url = url.split("?").first
  url.downcase.end_with?(*extensions)
end



def target_url
  target_host + query_string
end

def query_string
  # binding.pry
  #params['captures'].first
  if env["PATH_INFO"] == "/"
    "/"
  else
    env["REQUEST_URI"].scan(Regexp.new("#{env["PATH_INFO"]}.*")).first 
  end
end

相关内容