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

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

나는 이것을 시도했다 :

 http {
    port_in_redirect off;

어떤 아이디어?



답변

방금 같은 문제가 발생하여 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;
  }
}


답변

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

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


답변

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 프록시 요청을 받도록하는 것입니다.


답변

내 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로 전달됩니다.


답변

다른 사람 이이 문제를 겪고있는 경우-여기 기사 : 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;


답변

이 간단한 예제로 충분하다고 생각합니다.

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


답변

http://wiki.codemongers.com/NginxHttpCoreModule#port_in_redirect

syntax: port_in_redirect [ on|off ]
default: port_in_redirect on
context: http, server, location

이것이 당신이 찾고있는 것이기를 바랍니다.