QA@IT

Nginx+Unicron+Railsで、URLをサブディレクトリで分けてアクセスする際に、assetsにアクセスできない。

7575 PV

現在、Nginx+Unicron+Railsで開発をしているのですが、assetsにアクセスできなくてこまっています。

具体的に現在の状況を説明させていただきます。

複数のRailsアプリが動いている1つのサーバがあります。そしてこのサーバには1つのドメインが割り振られています。
しかしながら、色々な理由があってサブディレクトリでアクセスを振り分けなければいけない状況にあります。
サブディレクトリというのは、domainname.co.jp/application1domainname.co.jp/application2でいうところのapplication1application2の部分の事です。

これを分けるためにnginx.confを以下の様に指定しました。

        server {
                listen 80;
                server_name domainname.co.jp;
                more_clear_headers 'Server';

                location /application1 {
                        proxy_pass http://127.0.0.1:8079;
                }
                location /application1/assets/ {
                        root /home/lain003/application1/public;
                        add_header Last-Modified "";
                        add_header ETag "";
                        add_header Cache-Control public;
                }

                location /application2 {
                        proxy_pass http://127.0.0.1:8078;
                }
                location /application2/assets/ {
                        root /home/lain003/application2/public;
                        add_header Last-Modified "";
                        add_header ETag "";
                        add_header Cache-Control public;
                }
        }

そして、http://domainname.co.jp/application1というURLでRailsのサイトに接続したところ、html自体は返ってきたのですが、CSSが404で読み込まれていませんでした。
nginxのエラーログを見ると、以下の様なエラーが返ってきていました。

/home/lain003/application1/public/application1/assets/application-10000.css

このエラーはどういうことかというと、rootまでは正しく読み込めているのですが、アクセスしたURLにサブディレクトリが含まれているため、public/サブディレクトリ名/assets/ファイル名となっている様でした。

どうすればこの問題を解決できるでしょうか?ご回答いただけると幸いです。

回答

自己解決できました。

     server {
                listen 80;
                server_name domainname.co.jp;
                more_clear_headers 'Server';

                location /application1 {
                        proxy_pass http://127.0.0.1:8079;
                }
                location /application1/assets/ {
                        alias /home/lain003/application1/public/assets/$1;
                        add_header Last-Modified "";
                        add_header ETag "";
                        add_header Cache-Control public;
                }

                location /application2 {
                        proxy_pass http://127.0.0.1:8078;
                }
                location /application2/assets/ {
                        alias /home/lain003/application2/public/assets/$1;
                        add_header Last-Modified "";
                        add_header ETag "";
                        add_header Cache-Control public;
                }
        }

このようにaliasでパスを直接指定してやると、問題なく読み込み事が出来ました。

お騒がせいたしました。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。