슬래시없이 URL에 액세스하면 Nginx가 포트 8080으로 리디렉션 됨


19

액세스 할 때 : http://example.com/somefolder- > http://example.com:8080/somefolder

나는 이것을 시도했다 :

 http {
    port_in_redirect off;

어떤 아이디어?


구성을 제공 할 수 있습니까? nginx 뒤의 다른 서비스를 프록시하고 있습니까?
Shane Madden

나는 우리가 아파치를 위임하고 있다고 믿는다. 어떤 구성 파일을 원하십니까?
Chris Muench

3
지시문 server이 포함 된 블록 을 정의하는 nginx 구성 파일 proxy_pass. 아마도 필요한 것은 proxy_redirect지시어 가 될 것입니다 -구성을 확인해야합니다.
Shane Madden

참고 일부 브라우저 변경할 때 있도록 리디렉션을 캐시 것을 port_in_redirect에서 onoff다시 시작해야 할 수 있습니다.
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

로드 밸런서 뒤에 8080에서 nginx를 호스팅하기 위해 완벽하게 작동했습니다. 감사합니다
xxstevenxo

도와 주셔서 감사합니다
h3nr1ke

4

문제를 해결해야한다. proxy_redirect지시문 바로 뒤에 proxy_pass지시문 추가

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


3

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-For $ proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8083 ;
  }
  

내 설정은 Apache가 127.0.0.1:8083을 듣고 nginx 프록시 요청을 받도록하는 것입니다.


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가 상대 경로를 절대 경로로 자동 변환하기 때문에 발생합니다.
Nginx가 번역하지 말라고하는 방법이 있습니다. 슬래시 앞에 공백을 추가하십시오. ngx.redirect(" /foo")


이것은 3 년 전의 질문입니다.
Deer Hunter

-1

대신 서버 블록에 추가하는 것이 좋습니다.

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

example.com/wp-admin으로 이동하면 example.com:8080/wp-admin/으로 이동하지 않고 example.com/wp-admin으로 이동하며 CloudFlare DNS를 사용하는 경우 다음과 같이 표시됩니다. 사이트가 다운되었습니다.

Ubuntu, Nginx 및 Varnish를 사용하고 있으며 port_in_redirect를 비활성화하지 않고 이제 완벽하게 작동합니다.

추가하려면 다음 후에 nginx를 다시 시작하십시오.

sudo service nginx restart

-1

absolute_redirect off; 위치 블록에 추가하면 효과가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.