如何在Laravel Tenancy中实现无需hosts文件的动态子域名访问?
解决Laravel多租户动态子域名访问问题(Docker+Nginx环境)
1. 配置域名解析(分环境处理)
- 公网生产环境:购买域名后,添加
*.yourdomain.com格式的A记录,指向服务器公网IP。所有子域名会自动解析到你的服务器。 - 本地开发环境:无需修改hosts的话,用本地DNS工具
dnsmasq:- 安装后添加配置
address=/.yourlocal.test/127.0.0.1,让所有*.yourlocal.test子域名指向本地。 - 把系统DNS设置为
127.0.0.1,确保优先使用dnsmasq解析。
- 安装后添加配置
2. 调整Nginx容器配置
修改Nginx配置文件,让它监听所有子域名请求并转发到Laravel容器:
server { listen 80; server_name *.yourdomain.com; # 本地环境替换为*.yourlocal.test root /var/www/html/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass laravel-app:9000; # 替换为你的Laravel容器名称/IP fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
- 确保Nginx容器的80端口映射到宿主机80端口,公网环境还要开放防火墙的80/443端口。
- 重启Nginx容器生效:
docker-compose restart nginx
3. 验证Laravel Tenancy配置
确认config/tenancy.php中的域名配置正确:
'domains' => [ 'default' => [ 'domain' => env('APP_DOMAIN', 'yourdomain.com'), 'prefix' => '', 'suffix' => '', ], ],
将.env中的APP_DOMAIN设置为主域名(如yourdomain.com或yourlocal.test)。
4. 测试动态子域名
创建租户及对应子域名后,直接在浏览器访问tenant1.yourdomain.com(本地用tenant1.yourlocal.test),即可正常加载页面,无需修改hosts文件。
内容的提问来源于stack exchange,提问作者Ruslan B
相关产品推荐
相关产品推荐

