nginx - comment inverser tout le proxy, y compris les répertoires et les actifs

0

Nous voulons dupliquer notre site Web (oui, nous sommes conscients du contenu dupliqué). domain-a.comdoit être disponible aussi comme domain-b.com.

Ma configuration ressemble à ceci:

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;

  }
}

Cela fonctionne pour www.domain-b.com/. Cependant, www.domain-b.com/info/aboutretourne 503. Idem pour/test.jpg

Comment pouvons-nous exactement par procuration littéralement tout?

fils huan
la source
Pourquoi ne pas simplement définir un supplémentaire server_nameou le laisser utiliser le même répertoire racine? Si vous obtenez un 503, avez-vous vérifié vos journaux pour voir ce qui se passe réellement?
Seth
ce n'est pas une option. doit être "reflété" et ensuite aussi remplacé un peu de contenu. serverlog est en fait vide /access.log et /errors.log
huan son
Si vous ne voyez pas l’erreur 500 dans l’un des journaux, il est fort probable que vous recherchiez les mauvais journaux nginx ou les mauvais journaux en même temps. Votre moteur PHP ou tout autre élément moteur du site d'origine peut générer 500 éléments. Vous devez également consulter ces journaux. Si vous devez remplacer le contenu, comment voulez-vous qu'il fonctionne avec un proxy inverse?
Seth
Eh bien, je l’ai fait moi-même maintenant avec Sinatra (Ruby). prenez simplement la chaîne de requête entrante, transmettez-la à l'autre serveur, remplacez du contenu dans le corps et renvoyez ce corps. jeu facile. mod_substitute ferait la même chose au niveau du proxy , mais depuis que je suis un programmeur et non admin je tiens à mon app
fils Huan
1
Vous attendez-vous à ce que cette solution soit maintenable? Je suggérerais quand même un fork ou la configuration d'options de configuration appropriées et l'exécution d'une version indépendante. Ce serait beaucoup plus clair, mais c'est votre application. Vous pouvez essayer d’écrire une réponse en fonction de ce que vous avez fait et de l’accepter.
Seth

Réponses:

1

La solution aurait été:

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

ou juste

server_name *;

plus cela

proxy_set_header        Host $host;

ce qui le laisse dynamique.

503 Bad gatewayfait généralement référence à un serveur upsteam non accessible. Pas nécessairement quelque chose qui ne va pas avec la config. Cela aurait également pu être le mauvais en- X-Forwarded-Hosttête de proxy_set_headerqui était statique et cloudflare a refusé de le servir.

anonyme
la source
0

ma réponse est une solution un peu différente.

nous avons fini par créer notre propre "proxy" basé sur ruby ​​/ sinatra, y compris la gestion des cookies.

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
fils huan
la source