Nginx przekierowuje na port 8080 podczas uzyskiwania dostępu do adresu URL bez ukośnika [zamknięte]

19

podczas uzyskiwania dostępu: http://example.com/somefolder -> http://example.com:8080/somefolder

Próbowałem tego:

 http {
    port_in_redirect off;

Jakieś pomysły?

Chris Muench
źródło
Czy możesz podać swoją konfigurację? Czy korzystasz z usługi innej niż nginx?
Shane Madden
Wierzę, że jesteśmy blisko apache. Jakie pliki konfiguracyjne chcesz?
Chris Muench,
3
Plik konfiguracyjny nginx, który definiuje serverblok zawierający proxy_passdyrektywę. To, czego prawdopodobnie będziesz potrzebować, to proxy_redirectdyrektywa - sprawdzenie konfiguracji powinno potwierdzić.
Shane Madden
Pamiętaj, że niektóre przeglądarki przekierowują pamięć podręczną, więc przy zmianie port_in_redirectz onna offmoże być konieczne jej ponowne uruchomienie.
emersja
@emersion w port_in_redirectogóle nie działa
TomSawyer

Odpowiedzi:

21

Właśnie natknąłem się na ten sam problem i port_in_redirect off;faktycznie dla mnie pracował, po prostu upewnij się, że używasz go w server {}bloku.

server {
  listen 8080;
  server_name example.com;

  port_in_redirect off;
  autoindex on;

  location / {
    root /var/www/example.com;
    index index.html;
  }
}
neojp
źródło
Lub nawet użyj w port_in_redirectśrodku location.
wqw
działał idealnie dla hostingu nginx na 8080 za modułem równoważenia obciążenia. dziękuję
xxstevenxo
też dla mnie pracował, wielkie dzięki za pomoc
h3nr1ke
4

To powinno rozwiązać problem. Dodaj proxy_redirectdyrektywę zaraz po proxy_passdyrektywie

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

Hariadi
źródło
3

Jeśli ktoś nadal doświadcza tego problemu, mając apache za konfiguracją odwrotnego proxy nginx, możesz spróbować ff:

  Lokalizacja / {
    proxy_redirect wyłączone;
    proxy_set_header Host $ host: $ port_serwera; # <- ten rozwiązał mój
    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 ;
  }
  

Moja konfiguracja polega na tym, że pozwalam Apache'owi słuchać 127.0.0.1:8083 i zezwalam na żądania proxy nginx.

gone43v3r
źródło
2

Miałem ten sam problem z konfiguracją nginx + Apache. Wydaje się, że Apache przekierowuje na swój własny port (działający na 8080), podczas gdy nginx jest na porcie 80.

W mojej konfiguracji spowodowało to nieskończoną pętlę przekierowania dla normalnych adresów URL:

proxy_set_header Host $host:80; # Force port 80

Zamiast tego powiąż powracające dane do portu 80, tak jak to:

proxy_bind $host:80; # Bind to port 80

Oto mój blok serwera 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;
    }
}

Przy tej konfiguracji symboli wieloznacznych wszystkie żądania nginx nie mają bloku serwera, dla którego są przekazywane do Apache.

Ecker00
źródło
W ogóle nie działa
TomSawyer,
1

Na wypadek, gdyby ktoś miał ten problem - artykuł tutaj: http://www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-with-trailing-slash-930876/ rozwiązał problem dla mnie .

Musiałem dodać dodatkowy nagłówek w proxy.

Upewnij się, że zestaw do hosta $http_host, a także, że zostało ustawione X-Forwarded-Hostna $http_hosttakie jak poniżej:

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
źródło
To w ogóle nie działa
TomSawyer,
1

Myślę, że ten prosty przykład wystarczy:

location = /somefolder {
    return 302 http://$host:8080/somefolder;
}
Xiaomu Blue
źródło
0

Miałem podobny problem.

Może powinieneś użyć dyrektywy proxy_set_headerdo ustawienia hosta i lokalizacji nagłówków. W mojej konfiguracji dodałem proxy_set_header Location $host:80; i wszystkie żądania zwracają teraz port 80.

Sergii Kovtoniuk
źródło
Wierzę, że to przerwie przekierowania poza „/” - każde przekierowanie wskazywałoby na $ host: 80
perrierism
0

Ten problem jest spowodowany automatycznym tłumaczeniem ścieżki Nginx na ścieżkę bezwzględną, prawda?
Jest sposób, aby powiedzieć Nginxowi, że nie tłumaczy, dodajesz spację przed ukośnikiem: ngx.redirect(" /foo")

Szymon
źródło
Pamiętaj, że jest to pytanie sprzed 3 lat.
Deer Hunter,
-1

Polecam zamiast tego dodać to do twojego bloku serwera:

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

To było, kiedy przejdziesz do example.com/wp-admin, to przejdzie do example.com/wp-admin zamiast do example.com:8080/wp-admin/, a jeśli na przykład korzystasz z CloudFlare DNS strona nie działa.

Używam Ubuntu, Nginx i Varnish i działa to teraz doskonale, zamiast wyłączać port_in_redirect.

Aby dodać, zrestartuj nginx po:

sudo service nginx restart
Cchiera
źródło
-1

Dodanie absolute_redirect off; bloku lokalizacji działa dla mnie.

vijit sharma
źródło