各位好,我今天想利用 nginx
達到同一個 domain 經由不同的子路徑連到不同的 Laravel 專案:
http://24.test/cms1
-> /var/www/cms1/public
http://24.test/cms2
-> /var/www/cms2/public
以下是我目前的配置:
server {
listen 80;
server_name 24.test;
root /var/www/cms1/public/;
index index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location /cms1 {
alias /var/www/cms1/public/;
index index.php;
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME /var/www/cms1/public$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
try_files $uri $uri/ /cms1/index.php?$query_string;
}
}
location ~ /\.ht {
deny all;
}
}
root 的配置我是用來測試 php-fpm
以及 Laravel
專案是否有正常執行,測試是正常的可以連到,測試 /cms1
時我會註解掉以防干擾,但目前這樣配置連到 cms1
會得到 File not found.,應該就是傳送到 php-fpm
的路徑有誤導致無法正確執行,想請教這塊怎麼配置才對,謝謝。
不要用路徑區分,很難處理。
我大多是用子域名來應用。反正也只是設定 host
以下是我的 nginx 設定
server {
listen 80;
listen [::]:80;
server_name test.com *.test.com;
set $root "/var/www";
if ($host ~ ^(\w+)\.test\.com$) {
set $root "/var/www/$1";
}
root $root;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
這樣不同子域名就會在各自的目錄區內。開發很方便。
開新專案,再去 host 加上就行。