โดเมนพร็อกซี Nginx ไปยังโดเมนอื่นที่ไม่มี URL การเปลี่ยนแปลง


18

คำถามของฉันอยู่ใน subj ฉันมีหนึ่งโดเมนนั่นคือการกำหนดค่าของ 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;
}
}

ฉันต้องใช้ proxy connect3.domain.ru host กับ connect2.domain.ru แต่ไม่มีการเปลี่ยนแปลง URL ในแถบที่อยู่ของเบราว์เซอร์ บรรทัดที่เขียนใหม่ของคอมเม้นต์ของฉันสามารถแก้ไขปัญหานี้ได้ แต่เป็นเพียงการเขียนซ้ำดังนั้นฉันจึงไม่สามารถอยู่กับ URL เดิมได้

ฉันรู้ว่าคำถามนี้ง่าย แต่โปรดช่วยด้วย ขอขอบคุณ.

คำตอบ:


26

คุณตั้งค่า:

proxy_set_header Host $host;

คุณต้องการ:

proxy_set_header Host connect2.domain.ru;

และนั่นคือทั้งหมดหรือไม่ ฉันต้องการเปลี่ยน proxy_pass 127.0.0.1:8080 ; เพื่อ proxy_pass connect2.domain.ru:8080 ; ? หรือเพียงแค่แสดงความคิดเห็นเขียนใหม่ตามที่เป็นอยู่และเปลี่ยน proxy_set_header?
Evgenii Iablokov

พยายามนี้ ไม่การเปลี่ยนแปลง URL
Evgenii Iablokov

1
หรือเพียงแค่แสดงความคิดเห็นเขียนใหม่ตามที่เป็นอยู่และเปลี่ยน proxy_set_header? Yeap
VBart

7

ดังนั้นฉันคิดว่า - นี่เป็นวิธีแก้ปัญหาถ้าฉันเข้าใจปัญหาอย่างถูกต้อง:

 # 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/; 
  }
}

มันใช้ได้ไหม? หรือคุณต้องการคำสั่ง proxy_pass แม้ว่าคุณจะทำ proxy_redirect?
Vincent De Smet

6

กระแสจิตเกี่ยวกับพอร์ต 8080 ถูกปิดใช้งานเนื่องจากคุณไม่แสดงการกำหนดค่าแบบเต็ม

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;
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.