![nginx - 如何反向代理所有内容,包括目录和资产](https://linux22.com/image/1518296/nginx%20-%20%E5%A6%82%E4%BD%95%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E6%89%80%E6%9C%89%E5%86%85%E5%AE%B9%EF%BC%8C%E5%8C%85%E6%8B%AC%E7%9B%AE%E5%BD%95%E5%92%8C%E8%B5%84%E4%BA%A7.png)
我们想要复制我们的网站(是的,我们知道重复的内容)。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