2009-07-24 4 views
3

레일즈 앱을 호스팅하기 위해 두 경우 모두 Passenger를 사용하여 Apache에서 nginx로 이전하려고합니다. 응용 프로그램은 이미지에 대한 요청을받습니다. 이미지가/system/logos/$ requestedimage에 있으면 제공되거나 필요한 경우 Rails 앱을 실행하여 요청을 생성 할 수 있어야합니다./system/logos에 캐시 됨).nginx 승객과 규칙을 다시 작성

RewriteCond %{DOCUMENT_ROOT}/system/logos/%{REQUEST_FILENAME} -f 
RewriteRule ^/(.*)$ http://assets.clg.eve-metrics.com/system/logos/$1 

이 잘 작동 :

아파치에서 나는 다음과 같은 사용. 자산. 하위 도메인은 다른 하위 도메인이지만 루트가 동일한 경우 승객이 사용 중지 된 경우에만 정적 파일 호스팅을 위해 설정됩니다 (만료일 기준).

server { 
    listen 80; 
    passenger_enabled on; 
    server_name clg.eve-metrics.com www.clg.eve-metrics.com; 
    root /opt/www/clg/current/public; 
    gzip    on; 
    gzip_min_length 1000; 
    gzip_proxied  expired no-cache no-store private auth; 
    gzip_types  text/plain application/xml text/css application/javascript; 
    gzip_disable  msie6; 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
    } 
    if (-f $document_root/system/logos$request_filename) { 
    rewrite ^/(.*)$ http://assets.clg.eve-metrics.com/system/logos/$1 break; 
    } 
} 

이 잘 작동하지 않습니다의 nginx에서

나는 다음과 같은 사용하고 있습니다. 사실, 사실. 캐시 된 경로로 리다이렉트되지 않으며 결코 Rails 앱에 닿지 않는다. 그것은 nginx가 고정 자산이라고 가정하고 승객에게 전달하지 않는 것과 같습니다. 이 동작을 중지하여 앱에 부딪 힐 수있는 방법이 있습니까?

답변

4

내 레일 어플리케이션이 nginx 및 passenger에서 실행 중입니다. 내 레일 캐시 디렉토리를 기본 /public에서 /public/system/cache/으로 옮겼습니다. 그것이 작동되도록하려면 내 가상 호스트 설정 파일에이 삽입했다 :

if (-f $document_root/system/cache/$uri/index.html) { 
    rewrite (.*) /system/cache/$1/index.html break; 
} 

if (-f $document_root/system/cache/$uri.html) { 
    rewrite (.*) /system/cache/$1.html break; 
} 

내가 너무 그것을 $request_filename와 함께 작동하도록 노력하지만 일을하지 않았다는 것을 기억한다. 대신 $uri으로 시도하고 :-)

+0

이 동일한 문제가 있었으며 Nginx를 처음 사용하여 완벽하게 작동했습니다. 감사. – jspooner

+0

nginx.conf의 어떤 지시어입니까? – Nick

0

제임스를 작동하는지,이 구성 파일 https://gist.github.com/711913 을 시도하고이 위치 설정에주의하십시오 :

location ~* \.(png|gif|jpg|jpeg|css|js|swf|ico)(\?[0-9]+)?$ { 
     access_log off; 
     expires max; 
     add_header Cache-Control public; 
    } 

는 승객이 레일에서 관리하지 것이다 자산 파일 (사용자가 nginx를 실행하면 파일에 직접 액세스 할 수있는 권한이 있어야 함)