Laravel、Nginx で複数のドキュメントルート設定を行ってみた

スポンサーリンク
スポンサーリンク

今回、Laravel、Vue.js を使用してサービスを量産するようなパッケージを構築することになり、サービス共通の処理を記述するベース側ディレクトリとサービス独自の処理を記述するパッケージディレクトリに分けた構成で構築してみました。
詳細は後ほど書いていきますが、その際に、ベース側となる Laravel 本体のディレクトリの public と、サービス独自処理となるパッケージディレクトリ内の public をそれぞれドキュメントルートにする必要がありましたので、その時に行った設定方法となります。

前提

以下のようなディレクトリ構成にし、package ディレクトリは、laravel 側のディレクトリと同じようなフォルダ構成にしております。
その際、css、js、画像関係がサイト独自処理側(package)の public に存在する場合には、そちらを利用し、存在しない場合にはサービス共通側(laravel)の public に存在するファイルを利用するという流れの対応を行っていきます。


 service1
   package(サービス独自の処理を記述)
    src
    public
   laravel(サービス共通の処理を記述)
   public
 service2
   package
    src
    public
   laravel
   public

php で対応するかどうか悩みましたが、今回は、Nginx の設定ファイルで対応を入れていきたいと思います。

Nginx の設定ファイル編集

package ディレクトリの public 配下に該当のファイルが存在する場合には、そちらを利用し、存在しない場合には、laravel ディレクトリの public 配下へという設定を入れていきたいと思います。


$ sudo vi /etc/nginx/conf.d/vhost.conf

# laravel用に設定して以下をコメントアウト
#    location / {
#        try_files $uri $uri/ /index.php?$query_string;
#    }

# 以下を追加します。
    location / {
        root /service1/package/src/public;
        try_files $uri @base;
    }

    location @base {
        root /service1/laravel/public;
        try_files $uri $uri/ /index.php?$query_string;
    }

Nginx を再起動

設定を反映させるために、Nginx を再起動します。


$ sudo systemctl restart nginx.service

動作確認

以下のように css ディレクトリに同名ファイルを設置すると package 側のファイルが優先して使用され、削除するとると laravel 側のファイルを使用されることが確認できましたので完了です。


package(サービス独自の処理を記述)
 src
  public
   css
    admin.css ←作成
laravel(サービス共通の処理を記述)
 public
  css
   admin.css ←作成

どのように実現するか悩みましたが、Nginx での対応を行ったら、シンプルですっきりした感じでした!!

コメント

タイトルとURLをコピーしました