부득이한 경우, 특정 디렉토리 아래 라라벨을 설치하고 서브 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 |
댓글