본문 바로가기
프로그래밍/Web

라라벨 서브 디렉토리에 설치하기 nginx, valet

by 사악신 2022. 11. 21.

부득이한 경우, 특정 디렉토리 아래 라라벨을 설치하고 서브 URI 를 통해 접속해야하는 일이 생길 수 있습니다. 이와 관련하여 nginx 설정 및 valet 설정을 다음과 같이 합니다.

 

  • nginx 설정
    • 도메인/v1 에 연결하고자 할 경우
    location /v1 {
        alias /home/어쩌구/html/v1/public;
        index index.php;
        try_files $uri $uri/ @laravel;
        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_param   SCRIPT_FILENAME $request_filename;
            fastcgi_pass    unix:/var/run/php-fpm/어쩌구.sock;
            include fastcgi_params;
        }
    }

    location @laravel {
        rewrite /v1/(.*)$ /v1/index.php?/$1 last;
    }
  • valet 설정
    • nginx -t 명령어를 실행한 후, 설정 파일이 위치한 곳을 확인합니다.
    • /opt/homebrew/etc/nginx/servers 디렉토리(nginx.conf 설정에서 해당 디렉토리 아래 파일들을 include 하도록 설정되어 있는 경우)를 생성하고, 아래와 같이 설정 파일을 생성합니다.
    root 루트디렉토리;


    location /v1 {
        alias 루트디렉토리/v1/public;
        index index.php;
        try_files $uri $uri/ @laravel;
        location ~\.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass "unix:/Users/어쩌구/.config/valet/valet.sock";
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param APP_ENV local;
        }
    }

    location @laravel {
        rewrite /v1/(.*)$ /v1/index.php?/$1 last;
    }

 

APP_ENV 를 local 로 지정하였으며, 아울러 .valet-env.php 파일을 루트디렉토리에 생성합니다. valet 으로 파킹한 주소가 myproj.test 라면 다음과 같습니다.

 

<?php

return [
    'myproj' => [
        'APP_ENV' => 'local'
    ]
];

 

그리고, 루트/v1 디렉토리 아래 .env.local 파일을 생성하여 개발 옵션을 적용합니다. 끝으로 valet 용 로컬 드라이버(LocalValetDriver.php)를 루트 디렉토리에 생성합니다.

 

<?php

class LocalValetDriver extends BasicValetDriver
{
    /**
     * /v1/ 으로 uri 가 시작하면 라라벨임
     *
     * @param $uri
     * @return bool
     */
    protected function checkLaravel($uri)
    {
        return strpos($uri, 'v1/') == 1;
    }

    /**
     * Determine if the driver serves the request.
     *
     * @param string $sitePath
     * @param string $siteName
     * @param string $uri
     * @return bool
     */
    public function serves($sitePath, $siteName, $uri)
    {
        return true;
    }

    /**
     * Get the fully resolved path to the application's front controller.
     *
     * @param string $sitePath
     * @param string $siteName
     * @param string $uri
     * @return string
     */
    public function frontControllerPath($sitePath, $siteName, $uri)
    {
        if ($this->checkLaravel($uri)) {
            return $sitePath.'/v1/public/index.php';
        } else {
            return parent::frontControllerPath($sitePath, $siteName, $uri);
        }
    }
}
반응형

'프로그래밍 > Web' 카테고리의 다른 글

Laravel Jetstream 시작하기  (0) 2023.12.27
라라벨 Fortify  (1) 2023.12.21
Blazor 서버 앱 Elastic BeansTalk 배포  (0) 2022.05.23
Mac OS 에서 mcrypt 설치하기  (0) 2021.02.12
Laravel 환경설정 - .env, nginx  (0) 2020.03.18

댓글