2012-12-13 6 views
0

현재 멀티 도메인 CMS를 레일에 구축 중입니다. 이 내용은 다음 변경 전까지는 동일하므로 정적 파일을 통해 캐싱을하고 싶습니다.nginx - 리디렉션없이 조건부로 파일 제공

(두 경우 모두에서/그리고/asdf을) foo.com과 baz.com의 일부 캐시 된 페이지에 공개 디렉토리 :

리디렉션 :

public/ 
    assets/ 
     cms.css 
    sites/ 
     foo.com/ 
     assets/ 
      screen-some-hash.min.css 
     index.html 
     asdf/ 
      index.html 
     baz.com/ 
     assets/ 
      screen-some-hash.min.css 
     index.html 
     asdf/ 
      index.html 

내가 뭘 원하는 다음이다 www가 아닌 ​​www (작품)

요청에 하위 도메인 (cms, admin 등)이 포함 된 경우 경로에/assets이 있으면 public/assets에 파일을 제공하고 만료 설정을 30d 정도로 설정합니다. 여기서는 아무런 문제가 없습니다./assets = public/assets 및 public /은 승객 루트입니다. 그 밖의 모든 것 : 레일이나 특별한 캐싱이 필요하지 않습니다.

다른 모든 요청 (하위 도메인 없음) : 경로에/assets이 들어 있으면 public/sites/$ host $ request_uri에 파일을 제공하고 만료 설정을 30d 정도로 설정하십시오. 그 밖의 모든 것 : public/sites/$ host $ request_uri를 확인하거나 레일 응용 프로그램으로 넘어갑니다.

나는 www/non-www 리다이렉트 이외의 nginx 조건문으로 일한 적이 없으며 위에 언급 된 조건에 대해 내가 무엇을해야하는지 정말로 모른다. 가능하다면 캐싱 된 항목 (예 : /sites/foo.com/asdf로 리다이렉션)에 리디렉션을 사용하지 않고 대신 http://foo.com/asdf으로 갈 때이 파일을 직접 제공해야합니다.

추가 : 나는 알 수없는 양의 도메인을 처리하기 위해 호스트 이름을 하드 코딩하고 싶지 않습니다. 나는 또한 이것을 위해 하나의 레일 어플리케이션 이상을 사용하고 싶지 않다. 루비 내 경험은 내가이 방법을 실행하는거야 Gitlab이있다 애플 리케이션으로 proxy_pass 설정에 대한

server { 
    server_name ~^(?<subdomain>.+)\.example\.com$; 
    access_log /var/log/nginx/$subdomain/access.log; 
    location /assets { 
     expires max; 
    } 
    location/{ 
     proxy_pass http://your_rails_app; 
    } 
} 

정말 확실하지 :

답변

0

은 하위 도메인의 경우,이 트릭을 할해야합니다. 나는 이것이 적어도 조금 도움이되기를 바랍니다.

server { 
    server_name example.com; 

    location /assets { 
     root /public/sites/$hostname/$request_uri; 
     expires max; 
    } 
} 

실제로 테스트 할 기회가 없기 때문에 나만의 설정을 추가하고 재생해야합니다. 그러나 그것은 당신에게 길을 보여 주어야합니다.

1

100 %가 아니라 지금은 충분히 좋은 결과를 얻었습니다.

server { 
    listen 80; 
    server_name *IP*; 

    if ($host ~* www\.(.*)) { 
    set $host_without_www $1; 
    rewrite ^(.*)$ http://$host_without_www$1 permanent; 
    } 

    location ~ ^/(assets)/ { 
    try_files /sites/$host$uri $uri @passenger; 

    root /home/cms/app/current/public; 
    gzip_static on; 
    expires max; 
    add_header Cache-Control public; 
    } 

    location/{ 
    try_files /sites/$host$uri/index.html /sites/$host$uri $uri @passenger; 
    root /home/cms/app/current/public; 
    } 

    location @passenger { 
    access_log /home/cms/app/shared/log/access.log; 
    error_log /home/cms/app/shared/log/error.log; 
    root /home/cms/app/current/public; 
    passenger_enabled on; 
    } 
}