多个 Laravel 项目的 Nginx 统一配置
业务场景
abc.com 下有多个项目,都使用 Laravel 来开发,而且将来还会有更多的项目增加进来,如下表所示:
项目域名 | 部署路径 | 用途 |
---|---|---|
/wwwroot/exp.abc.com | 快递API服务 | |
/wwwroot/ip.abc.com | IP地址查询API服务 | |
/wwwroot/poi.abc.com | POI查询API服务 | |
… 将来增加的其他项目 |
需求
每个项目的 Nginx 配置,除了域名和项目路径,其他都是一致的。 如果每增加一个项目都要增加 Nginx 配置,配置文件的数量是巨大的,后期将难以维护。 是否有一劳永逸的办法?
解决方案
只要一个Nginx配置文件即可,将来增加的其他项目也能正常运行,无需改动。 Nginx 配置的核心代码如下:
http {
# 关键配置
map $host $dir {
~^(.*)$ /Home/user/laravel/$1/public;
}
server {
listen 80;
server_name _;
root $dir;
location / {
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
include fastcgi_params;
}
location = /debug {
default_type text/plain;
return 200 $dir;
}
}
}