현재 멀티 도메인 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;
}
}
정말 확실하지 :