Nginx leitet auf Port 8080 um, wenn auf die URL ohne Schrägstrich zugegriffen wird [closed]

19

beim Zugriff auf: http://example.com/somefolder -> http://example.com:8080/somefolder

Ich habe das versucht:

 http {
    port_in_redirect off;

Irgendwelche Ideen?

Chris Muench
quelle
Können Sie Ihre Konfiguration bereitstellen? Wenden Sie sich an einen anderen Dienst hinter Nginx?
Shane Madden
Ich glaube, wir nähern uns Apache. Welche Konfigurationsdateien möchten Sie?
Chris Muench
3
Die Nginx-Konfigurationsdatei, die den serverBlock definiert, der die proxy_passDirektive enthält . Was Sie wahrscheinlich brauchen werden, wird eine proxy_redirectAnweisung sein - sehen Sie, dass Ihre Konfiguration bestätigen sollte.
Shane Madden
Beachten Sie, dass einige Browser Cache-Umleitungen verwenden. Wenn Sie also port_in_redirectvon onauf wechseln , müssen offSie sie möglicherweise neu starten.
Emersion
@ Emersion port_in_redirectfunktioniert überhaupt nicht
TomSawyer

Antworten:

21

Ich bin auf dasselbe Problem gestoßen und habe port_in_redirect off;tatsächlich für mich gearbeitet. Stelle nur sicher, dass du es im server {}Block verwendest.

server {
  listen 8080;
  server_name example.com;

  port_in_redirect off;
  autoindex on;

  location / {
    root /var/www/example.com;
    index index.html;
  }
}
neojp
quelle
Oder sogar port_in_redirectdrinnen verwenden location.
wqw
funktionierte perfekt für das Hosten von Nginx auf 8080 hinter einem Load Balancer. danke
xxstevenxo
auch für mich gearbeitet, vielen Dank für Ihre Hilfe
h3nr1ke
4

Dies sollte das Problem beheben. In proxy_redirectRichtlinie unmittelbar nach proxy_passRichtlinie

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

Hariadi
quelle
3

Wenn dieses Problem weiterhin auftritt, während Apache hinter dem Nginx-Reverse-Proxy-Setup installiert ist, können Sie Folgendes versuchen:

  Standort / {
    proxy_redirect off;
    proxy_set_header Host $ host: $ server_port; # <- das hat meins gelöst
    proxy_set_header X-Forwarded-Host $ http_host;
    proxy_set_header X-Real-IP $ remote_addr;
    proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8083 ;
  }
  

Mein Setup ist, dass ich Apache 127.0.0.1:8083 anhören und Nginx-Proxy-Anforderungen zulassen lasse.

gone43v3r
quelle
2

Ich hatte das gleiche Problem mit meinem Nginx + Apache-Setup. Apache scheint auf seinen eigenen Port umzuleiten (läuft auf 8080), während Nginx auf Port 80 ist.

In meinem Setup, machte diese unendliche Schleife Umleitung für normale URLs:

proxy_set_header Host $host:80; # Force port 80

Binden Sie stattdessen die zurückgegebenen Daten wie folgt an Port 80:

proxy_bind $host:80; # Bind to port 80

Hier ist mein Nginx-Serverblock:

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

Mit diesem Platzhalter-Setup wird allen Anfragen, für die nginx keinen Server-Block hat, an Apache weitergeleitet.

Ecker00
quelle
Funktioniert überhaupt nicht
TomSawyer
1

Falls jemand anderes dieses Problem hatte - der Artikel hier: http://www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-without-trailing-slash-930876/ hat das Problem für mich gelöst .

Ich musste dem Proxy einen zusätzlichen Header hinzufügen.

Stellen Sie sicher , dass Sie den Host - Satz müssen $http_hostund auch , dass Sie die eingestellte X-Forwarded-Hostzu $http_hostunten mögen:

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;
derekyau
quelle
Es funktioniert überhaupt nicht
TomSawyer
1

Ich denke, dieses einfache Beispiel ist genug:

location = /somefolder {
    return 302 http://$host:8080/somefolder;
}
Xiaomu Blue
quelle
0

Ich hatte ein ähnliches Problem.

Vielleicht sollten Sie die Direktive verwenden proxy_set_header, um den Host und den Speicherort der Header festzulegen. In meiner Konfiguration habe ich hinzugefügt proxy_set_header Location $host:80; und alle Anforderungen geben jetzt Port 80 zurück.

Sergii Kovtoniuk
quelle
Ich glaube, dies unterbricht Weiterleitungen jenseits von "/" - jede Weiterleitung würde auf $ host: 80 verweisen
Perrierismus
0

Dieses Problem wird durch die automatische Übersetzung des relativen Pfads in den absoluten Pfad durch Nginx verursacht.
Es gibt eine Möglichkeit, Nginx zu veranlassen, nicht zu übersetzen. Fügen Sie vor dem Schrägstrich ein Leerzeichen ein: ngx.redirect(" /foo")

Simon
quelle
Bitte beachten Sie, dass dies eine Frage von vor 3 Jahren ist.
Deer Hunter
-1

Ich würde stattdessen empfehlen, dies zu Ihrem Serverblock hinzuzufügen:

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

Dies war, als Sie zu example.com/wp-admin gingen, es wird zu example.com/wp-admin gehen, anstatt zu example.com:8080/wp-admin/ und wenn Sie zum Beispiel auf CloudFlare DNS sind, wird es sagen Die Seite ist ausgefallen.

Ich verwende Ubuntu, Nginx und Varnish und das funktioniert jetzt einwandfrei, anstatt port_in_redirect zu deaktivieren.

Zum Hinzufügen muss nginx nach dem folgenden Vorgang neu gestartet werden:

sudo service nginx restart
cchiera
quelle
-1

Das Hinzufügen absolute_redirect off; im Standortblock funktioniert für mich.

Vijit Sharma
quelle