Dominio proxy de Nginx a otro dominio sin cambio de URL

18

Mi pregunta está en el subj. Tengo un dominio, esa es la configuración de nginx:

server {
listen 80;
server_name connect3.domain.ru www.connect3.domain.ru;

access_log /var/log/nginx/connect3.domain.ru.access.log;
error_log /var/log/nginx/connect3.domain.ru.error.log;

root /home/httpd/vhosts/html;
index index.html index.htm index.php;

location ~* \.(avi|bin|bmp|css|dmg|doc|docx|dpkg|exe|flv|gif|htm|html|ico|ics|img|jpeg|jpg|js|m2a|m2v|mov|mp3|mp4|mpeg|mpg|msi|pdf|pkg|png|pps|ppt|pptx|ps|rar|rss|rtf|swf|tif|tiff|txt|wmv|xhtml|xls|xml|zip)$ {
    root /home/httpd/vhosts/html;
    access_log off;
    expires 1d;
}

location ~ /\.(git|ht|svn) {
    deny all;
}

location / {
    #rewrite ^ http://connect2.domain.ru/;
    proxy_pass http://127.0.0.1:8080/;
    proxy_redirect off;
    proxy_hide_header "Cache-Control";
    add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
    proxy_hide_header "Pragma";
    add_header Pragma "no-cache";
    expires -1;
    add_header Last-Modified $sent_http_Expires;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Necesito proxy host connect3.domain.ru para conectar2.domain.ru, pero sin URL cambiado en las barras de direcciones del navegador. Mi línea de reescritura comentada podría resolver este problema, pero es solo una reescritura, por lo que no puedo quedarme con la misma URL.

Sé que esta pregunta es fácil, pero por favor ayuda. Gracias.

Evgenii Iablokov
fuente

Respuestas:

26

Configura:

proxy_set_header Host $host;

Usted quiere:

proxy_set_header Host connect2.domain.ru;
VBart
fuente
¿Y eso es todo? ¿Necesito cambiar proxy_pass 127.0.0.1:8080 ; a proxy_pass connect2.domain.ru:8080 ; ? ¿O simplemente comentar reescribir como está y cambiar proxy_set_header?
Evgenii Iablokov
Intenté esto. No, la URL cambia.
Evgenii Iablokov
1
¿O simplemente comentar reescribir como está y cambiar proxy_set_header? Yeap
VBart
7

Entonces, creo que aquí está la solución si entendí el problema correctamente:

 # backend.wants.this.server.com
 # browser.shows.this.server.com

server {
  listen 80;
  server_name browser.shows.this.server.com;

  location / {
     proxy_set_header Host backend.wants.this.server.com;
     proxy_redirect http://backend.wants.this.server.com/ http://browser.shows.this.server.com/; 
  }
}
Antiarchitect
fuente
¿Esto funciona? ¿O también necesita la directiva proxy_pass incluso si realiza un proxy_redirect?
Vincent De Smet
6

La telepatía sobre el puerto 8080 se ha desactivado porque no nos muestra la configuración completa.

server {
    listen 80;
    server_name connect3.domain.ru www.connect3.domain.ru;

    location / {
        proxy_pass http://connect2.domain.ru;
        proxy_set_header Host connect2.domain.ru;
    }
}
cadmi
fuente