Domaine proxy Nginx vers un autre domaine sans changement d'URL

18

Ma question est dans le subj. J'ai un seul domaine, c'est la configuration 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;
}
}

Je dois proxy proxy connect3.domain.ru hôte à connect2.domain.ru, mais sans URL modifiée dans les barres d'adresse du navigateur. Ma ligne de réécriture commentée pourrait résoudre ce problème, mais ce n'est qu'une réécriture, donc je ne peux pas rester avec la même URL.

Je sais que cette question est facile, mais aidez-moi. Je vous remercie.

Evgenii Iablokov
la source

Réponses:

26

Vous définissez:

proxy_set_header Host $host;

Tu veux:

proxy_set_header Host connect2.domain.ru;
VBart
la source
Et c'est tout? Dois-je changer proxy_pass 127.0.0.1:8080 ; à proxy_pass connect2.domain.ru:8080 ; ? Ou commentez simplement la réécriture telle quelle et changez proxy_set_header?
Evgenii Iablokov
J'ai essayé ça. Non, l'URL change.
Evgenii Iablokov
1
Ou commentez simplement la réécriture telle quelle et changez proxy_set_header? Ouais.
VBart
7

Je pense donc - voici la solution si j'ai bien compris le problème:

 # 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/; 
  }
}
Antiarchitecte
la source
Est-ce que ça marche? Ou avez-vous également besoin de la directive proxy_pass même si vous faites un proxy_redirect?
Vincent De Smet
6

La télépathie sur le port 8080 a été désactivée, car vous ne nous montrez pas la configuration complète.

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