2016-10-24 2 views
-1

나는 라스베리 파이로 만든 웹캠에서 작업하고 있습니다. 이들 구성 요소가 포트에서비스가 시작될 준비가되지 않은 경우 Nginx는 502를 반환합니다.

  • Node.js를 3000
  • 는 FFmpeg/FFserver 포트를 8090
  • Nginx의 포트를 통해 이러한 서비스를 함께 프록시 앞에 80/443 (HTTP/HTTPS)

문제점은 Nginx가 시작될 때 FFserver가 포트 8090에서 완전히 준비되지 않은 경우 스트림이 실행 중이더라도 stream.mjpeg에 대해 502를 계속 리턴한다는 것입니다. Nginx가 호스트가 존재하지 않는다고 판단한 후 다시 시도하지 않는 것입니다. Nginx 설정을 다시 시작하거나 다시로드하면 다시 작동하기 시작합니다.

왜 이런 일이 발생합니까? 누락 된 재시도 조건이 있습니까?

server { 
    listen 80; 
    rewrite^https://$host$request_uri? permanent; 
} 

server { 
    listen 443 ssl; 

    ssl_certificate /etc/nginx/ssl/nginx.crt; 
    ssl_certificate_key /etc/nginx/ssl/nginx.key; 

    location/{ 
    proxy_pass http://localhost:3000; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_next_upstream error timeout http_502; 

    # Basic auth 
    auth_basic "Restricted"; 
    auth_basic_user_file /etc/nginx/htpasswd; 
    } 

    location /stream.mjpeg { 
    proxy_pass http://localhost:8090/stream.mjpeg; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_next_upstream error timeout http_502; 

    # Basic auth 
    auth_basic "Restricted"; 
    auth_basic_user_file /etc/nginx/htpasswd; 
    } 
} 
+0

실제로 8090에서 제공되는 응용 프로그램이있는 경우 그러지 않아야합니다. 응용 프로그램이 실행되고 있음을 확인 했습니까? 방화벽 문제는 어떻습니까? 8090을 듣는 것이 있습니까? (예 :'netstat -atun | grep 8090'은 약간의 표시를 줄 수 있습니다). 부가 메모 :'/ stream.mjpeg'를'proxy_pass'에 붙일 필요는 없습니다. 그것이 그 위치 블록에 떨어 졌기 때문에 NGINX는 당신을 위해 이것을합니다. –

+0

해당 포트로 직접 이동하여 서비스가 실행 중인지 확인할 수 있습니다. 서로 다른 포트에 있기 때문에 별도의 위치 여야합니다. 나는 그것을 해결했다고 생각하지만, 아래 나의 대답을 참조하십시오. – jocull

답변

1

/var/log/nginx/error.log에 Nginx에 로그를 검토 한 후 내가 요청이는 IPv4를 IPv6의 루프백 주소로 이동되지 않은 것을 볼 수 있습니다 : 여기

는 Nginx에 대한 설정입니다. localhost127.0.0.1으로 변경했으며 문제가 해결되었습니다. Nginx를 재시동 한 후에도 이것이 작동하는 이유는 아직까지 미스터리입니다.

location/{ 
    proxy_pass http://127.0.0.1:3000; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_next_upstream error timeout http_502; 

    # Basic auth 
    auth_basic "Restricted"; 
    auth_basic_user_file /etc/nginx/htpasswd; 
    } 
+0

멋지게 해결되었습니다. 전에는 그 문제를 보지 못했습니다, 감사합니다! –

관련 문제