Nginx, eğik çizgi olmadan URL'ye erişirken 8080 numaralı bağlantı noktasına yönlendiriyor [kapalı]


19

erişirken: http://example.com/somefolder -> http://example.com:8080/somefolder

Bunu denedim:

 http {
    port_in_redirect off;

Herhangi bir fikir?


Yapılandırmanızı sağlayabilir misiniz? Nginx'in arkasındaki başka bir hizmete proxy mi veriyorsunuz?
Shane Madden

Apache için vekalet ettiğimizi düşünüyorum. Hangi yapılandırma dosyalarını istiyorsunuz?
Chris Muench

3
Yönerge serveriçeren bloğu tanımlayan nginx yapılandırma dosyası proxy_pass. Muhtemelen ihtiyaç duyacağınız şey bir proxy_redirectdirektif olacaktır - yapılandırmanızın onaylanması gerekir.
Shane Madden

Not bazı tarayıcılar değiştirirken böylece yönlendirmelerini önbelleğe olduğu port_in_redirectgelen oniçin offonu yeniden başlatmanız gerekebilir size.
emersion

@emersion port_in_redirecthiç çalışmıyor
TomSawyer

Yanıtlar:


21

Sadece aynı problemle karşılaştım ve port_in_redirect off;aslında benim için çalıştım, sadece server {}bloğun içinde kullandığınızdan emin olun .

server {
  listen 8080;
  server_name example.com;

  port_in_redirect off;
  autoindex on;

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

Ya da port_in_redirectiçeride kullanın location.
wqw

8080'de bir yük dengeleyicinin arkasında nginx barındırmak için mükemmel çalıştı. thank you
xxstevenxo

Ayrıca benim için çalıştı, yardımlarınız için çok teşekkürler
h3nr1ke

4

Bu sorunu çözmelidir. proxy_redirectDirektifin hemen ardından proxy_passdirektif ekleyin

proxy_redirect http://example.com:8080/ http://example.com/;


3

Birisi nginx ters proxy kurulumunun arkasında apache yaparken hala bu sorunu yaşıyorsa, ff'yi deneyebilirsiniz:

  yer / {
    proxy_redirect kapalı;
    proxy_set_header Ana Bilgisayar $ ana bilgisayar: $ server_port; # <- bu benimkini çözdü
    proxy_set_header X-Yönlendirildi-Sunucu $ http_host;
    proxy_set_header X-Gerçek-IP $ remote_addr;
    proxy_set_header X-Forwarded-İçin $ proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8083 ;
  }
  

Benim kurulumum Apache'nin 127.0.0.1:8083'ü dinlemesine ve nginx proxy isteklerine izin vermesine izin vermem.


2

Aynı sorunu nginx + Apache kurulumumda da yaşadım. Apache kendi portuna yönlendiriyor gibi görünüyor (8080'de çalışıyor), nginx ise 80 portunda.

Benim kurulumumda, bu normal URL'ler için sonsuz yönlendirme döngüsü yaptı :

proxy_set_header Host $host:80; # Force port 80

Bunun yerine, geri dönen verileri aşağıdaki gibi 80 numaralı bağlantı noktasına bağlayın:

proxy_bind $host:80; # Bind to port 80

İşte benim nginx sunucu bloğu:

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

Bu joker karakter kurulumu ile nginx'in sunucu bloğu olmayan tüm istekleri Apache'ye aktarılır.


Hiç çalışmıyor
TomSawyer

1

Başka birinin bu sorunu yaşaması durumunda - buradaki makale: http://www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-without-trailing-slash-930876/ sorunu benim için çözdü .

Proxy'ye fazladan bir başlık eklemek zorunda kaldım.

Eğer Host kümesi olduğundan emin olun $http_hostve ayrıca ayarladığınız X-Forwarded-Hostiçin $http_hostaşağıdaki gibi:

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;

Hiç işe yaramıyor
TomSawyer

1

Bence bu basit örnek yeterli:

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


0

Benzer bir sorun yaşadım.

Belki proxy_set_headerde başlıkların ana bilgisayarını ve konumunu ayarlamak için direktif kullanmalısınız . Konfigürasyonuma ekledim proxy_set_header Location $host:80; ve tüm istekler 80 numaralı bağlantı noktasını döndürüyor.


Bunun "/" ötesinde yönlendirmeleri kıracağına inanıyorum - her yönlendirme $ host'a işaret eder: 80
perrierism

0

Bu sorun Nginx otomatik göreceli yolu mutlak yola çevirmek, değil mi?
Nginx'in çevrilmemesini söylemenin bir yolu var, eğik çizgiden önce bir boşluk ekliyorsunuz: ngx.redirect(" /foo")


Lütfen bunun 3 yıl önceki bir soru olduğunu unutmayın.
Deer Hunter

-1

Bunun yerine bunu sunucu bloğunuza eklemenizi tavsiye ederim:

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

Bu, example.com:8080/wp-admin/ adresine gitmek yerine example.com/wp-admin adresine gittiğinizde ve örneğin CloudFlare DNS'deyseniz, örneğin site kapalı.

Ubuntu, Nginx ve Varnish kullanıyorum ve port_in_redirect'i devre dışı bırakmak yerine şimdi mükemmel çalışıyor.

Eklemek için, aşağıdaki durumlarda nginx'i yeniden başlattığınızdan emin olun:

sudo service nginx restart

-1

absolute_redirect off; Konum bloğuna eklemek benim için işe yarıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.