nginx + Unicorn (Ubuntu 12.04)에서 Rails (v3.2.13, Ruby 2.0.0) 응용 프로그램을 실행하고 있습니다. 관리자 사용자가 CVS 파일을 통해 사용자 (수천)를 업로드하는 경우를 제외하면 모두 잘 작동합니다. 문제는 30 초로 제한 시간을 설정했기 때문에 가져 오기 프로세스에 더 많은 시간이 걸립니다. 그래서 30 초 후에 nginx 502 Bad Gateway 페이지가 나옵니다 (Unicorn 작업자는 사망).시간 초과 오류를 피하기 위해 nginx + Unicorn을 구성하는 방법은 무엇입니까?
명백한 해결책은 시간 초과를 늘리는 것이지만, 일반적인 문제는 아니기 때문에 다른 문제가 발생할 수 있으므로이 작업을 원하지 않습니다.
이런 종류의 문제를 처리 할 수있는 방법이 있습니까?
미리 감사드립니다.
추신 : 해결책은 코드를 수정하는 것일 수 있습니다. 그렇다면 사용자가 다른 요청을하지 못하도록하고 싶습니다.
몇 가지 아이디어 (가능하면 모르는) :
- 설정이 요청에 전념 한 노동자.
- 유니콘에게 "work in progress"신호를 보내어 사망을 피하십시오.
의 nginx-app.conf
upstream xxx {
server unix:/tmp/xxx.socket fail_timeout=0;
}
server {
listen 80;
...
location/{
proxy_pass http://xxx;
proxy_redirect off;
...
proxy_connect_timeout 360;
proxy_send_timeout 360;
proxy_read_timeout 360;
}
}
unicorn.rb
worker_processes 2
listen "/tmp/xxx.socket"
timeout 30
pid "/tmp/unicorn.xxx.pid"
PS가 너무 짧으므로 오래 사용하십시오. – juanpastas
고맙습니다 @juanpastas, 매우 도움이됩니다. – cortex
메모 만 남았습니다. 귀하의'proxy_connect_timeout','proxy_send_timeout','proxy_read_timeout' 값들은 매우 비정상입니다. 설명서를 읽으십시오. 아마도 그 의미를 이해하지 못할 것입니다. 그리고'fail_timeout = 0'은 절대 의미가 없습니다. – VBart