Nginx เปลี่ยนเส้นทางไปที่พอร์ต 8080 เมื่อเข้าถึง url โดยไม่มีเครื่องหมายทับ [ปิด]


19

เมื่อเข้าถึง: http://example.com/somefolder -> http://example.com:8080/somefolder

ฉันได้ลองสิ่งนี้แล้ว:

 http {
    port_in_redirect off;

ความคิดใด ๆ


คุณสามารถให้การกำหนดค่าของคุณ? คุณกำลังใช้บริการอื่นที่อยู่เบื้องหลัง nginx หรือไม่
Shane Madden

ฉันเชื่อว่าเรากำลังใกล้เคียงกับ apache ไฟล์การกำหนดค่าใดที่คุณต้องการ?
คริส Muench

3
ไฟล์กำหนดค่า nginx ที่กำหนดserverบล็อกซึ่งมีproxy_passคำสั่ง สิ่งที่คุณอาจต้องการคือproxy_redirectคำสั่ง - การเห็นการกำหนดค่าของคุณควรยืนยัน
Shane Madden

โปรดทราบว่าบางเบราว์เซอร์แคชเปลี่ยนเส้นทางดังนั้นเมื่อเปลี่ยนport_in_redirectจากonเป็นoffคุณอาจต้องรีสตาร์ท
emersion

@emersion port_in_redirectไม่ทำงานเลย
TomSawyer

คำตอบ:


21

ฉันพบปัญหาเดียวกันและport_in_redirect off;ใช้งานได้จริงสำหรับฉันเพียงตรวจสอบให้แน่ใจว่าคุณใช้ภายในserver {}บล็อก

server {
  listen 8080;
  server_name example.com;

  port_in_redirect off;
  autoindex on;

  location / {
    root /var/www/example.com;
    index index.html;
  }
}

หรือแม้กระทั่งการใช้ภายในport_in_redirect location
wqw

ทำงานได้อย่างสมบูรณ์แบบสำหรับการโฮสต์ nginx บน 8080 หลังโหลดบาลานซ์ ขอขอบคุณ
xxstevenxo

ขอบคุณสำหรับความช่วยเหลือของคุณด้วย
h3nr1ke


3

หากใครบางคนยังคงประสบปัญหานี้ในขณะที่มี apache อยู่หลังการตั้งค่าพร็อกซีย้อนกลับของ nginx คุณสามารถลอง ff:

  ตำแหน่ง / {
    ปิด proxy_redirect;
    proxy_set_header โฮสต์ $ host: $ server_port; # <- อันนี้แก้ไขของฉันแล้ว
    proxy_set_header X-Forwarded-Host $ http_host;
    proxy_set_header X-Real-IP $ remote_addr;
    proxy_set_header X-Forwarded- สำหรับ $ proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8083 ;
  }
  

การตั้งค่าของฉันคือฉันให้ Apache ฟัง 127.0.0.1:8083 และให้ nginx proxy ร้องขอ


2

ฉันมีปัญหาเดียวกันกับการติดตั้ง nginx + Apache Apache ดูเหมือนจะเปลี่ยนเส้นทางไปยังพอร์ตของตัวเอง (ทำงานบน 8080) ในขณะที่ nginx อยู่ที่พอร์ต 80

ในการตั้งค่าของฉันสิ่งนี้ทำให้วนรอบการเปลี่ยนเส้นทางไม่ จำกัดสำหรับURL ปกติ :

proxy_set_header Host $host:80; # Force port 80

ผูกข้อมูลที่ส่งคืนกลับไปที่พอร์ต 80 เช่นนี้แทน

proxy_bind $host:80; # Bind to port 80

นี่คือบล็อกเซิร์ฟเวอร์ nginx ของฉัน:

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    server_name _; # Wildcard server

    location / {
        proxy_bind $host:80; # Bind to port 80 << THIS IS THE MAGIC
        proxy_pass http://localhost:8080;
        proxy_set_header Host            $host; # Pass host header
        proxy_set_header X-Real-IP       $remote_addr; # Preserve client IP
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

ด้วยการตั้งค่าไวด์การ์ดนี้การร้องขอทั้งหมด nginx ไม่มีบล็อกเซิร์ฟเวอร์สำหรับจะถูกส่งไปยัง Apache


ใช้งานไม่ได้เลย
TomSawyer

1

ในกรณีที่คนอื่นมีปัญหานี้ - บทความที่นี่: http://www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-without-trailing-slash-930876/แก้ไขปัญหาให้ฉัน .

ฉันต้องเพิ่มส่วนหัวพิเศษในพร็อกซี

ให้แน่ใจว่าคุณมีชุดโฮสต์ไป$http_hostและยังให้คุณได้ตั้งค่าX-Forwarded-Hostที่จะ$http_hostเหมือนด้านล่าง:

proxy_redirect off;
proxy_set_header Host $http_host;             # <-- make sure this is $http_host
proxy_set_header X-Forwarded-Host $http_host; # <-- make sure you set this
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 8k;
proxy_busy_buffers_size 64k;

มันใช้งานไม่ได้เลย
TomSawyer

1

ฉันคิดว่าตัวอย่างง่ายๆนี้ก็เพียงพอแล้ว:

location = /somefolder {
    return 302 http://$host:8080/somefolder;
}


0

ฉันมีปัญหาที่คล้ายกัน

บางทีคุณควรใช้คำสั่งproxy_set_headerเพื่อตั้งค่าโฮสต์และตำแหน่งของส่วนหัว ในการกำหนดค่าของฉันฉันเพิ่มproxy_set_header Location $host:80; และคำขอทั้งหมดส่งคืนพอร์ต 80 ทันที


ฉันเชื่อว่าสิ่งนี้จะทำให้การเปลี่ยนเส้นทางเกินกว่า "/" - การเปลี่ยนเส้นทางทุกครั้งจะชี้ไปที่ $ host: 80
perrierism

0

ปัญหานี้เกิดจาก Nginx auto แปลเส้นทางสัมพัทธ์เป็นพา ธ สัมบูรณ์ใช่ไหม
มีวิธีที่จะบอก Nginx ไม่แปลคุณเพิ่มช่องว่างก่อนทับ: ngx.redirect(" /foo")


โปรดทราบว่านี่เป็นคำถามจาก 3 ปีที่ผ่านมา
Deer Hunter

-1

ฉันอยากจะแนะนำให้เพิ่มสิ่งนี้ในบล็อกเซิร์ฟเวอร์ของคุณ:

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

นี่คือเมื่อคุณไปที่ example.com/wp-admin มันจะไปที่ example.com/wp-admin แทนที่จะไปที่ example.com:8080/wp-admin/ และถ้าคุณอยู่บน CloudFlare DNS เช่นจะพูดว่า ไซต์ไม่ทำงาน

ฉันใช้ Ubuntu, Nginx และ Varnish และตอนนี้ใช้ได้อย่างสมบูรณ์แบบมากกว่าที่จะปิดการใช้งาน port_in_redirect

ในการเพิ่มให้แน่ใจว่าได้รีสตาร์ท nginx หลังจาก:

sudo service nginx restart

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