同一服务器部署双Laravel站点:SSR端口冲突与域名跳转问题
问题原因与解决方法
一、SSR守护进程端口冲突
原因
Inertia 1.0的SSR服务默认使用固定端口(通常为13714),同一Droplet上的两个应用同时启动时,第二个进程会因端口被第一个进程占用而启动失败。
解决方法
- 为每个应用配置独立的SSR端口:
- 在每个Laravel项目根目录的
.env文件中添加自定义端口:- 站点1:
INERTIA_SSR_PORT=13714 - 站点2:
INERTIA_SSR_PORT=13715
- 站点1:
- 修改项目的SSR启动脚本(一般为
server/ssr.js),读取环境变量作为端口:const port = process.env.INERTIA_SSR_PORT || 13714; app.listen(port, () => { console.log(`Inertia SSR running on port ${port}`); }); - 在Laravel Forge的守护进程配置中,确保每个站点的启动命令指向对应项目目录,比如站点2的命令:
cd /home/forge/website2.com && php artisan inertia:start-ssr - 重启两个守护进程,可通过
lsof -i :13714和lsof -i :13715命令验证端口占用情况。
- 在每个Laravel项目根目录的
二、输入website2.com自动跳转至website1.com
原因
- 浏览器输入不带协议的域名时,默认会发起
http://website2.com请求,而Droplet的Nginx配置存在以下问题:- 第一个站点(website1.com)的HTTP(80端口)服务器块被设置为默认站点,当请求域名不匹配时,Nginx会用该配置处理,导致http://website2.com被跳转到website1.com的HTTPS地址。
- 未为website2.com配置独立的HTTP到HTTPS跳转规则。
解决方法
- 调整Nginx配置,为每个站点设置独立的HTTP跳转规则:
- 在Laravel Forge中分别打开两个站点的「Edit Nginx Configuration」页面。
- 为website2.com添加HTTP服务器块,处理跳转:
server { listen 80; listen [::]:80; server_name website2.com www.website2.com; return 301 https://$host$request_uri; } - 确保website1.com的HTTP服务器块仅匹配自身域名,去掉
default_server标识(如果存在)。 - 重载Nginx配置:
sudo nginx -s reload - 清除浏览器缓存或使用隐私模式测试,确认跳转正常。
内容的提问来源于stack exchange,提问作者shabxs
相关产品推荐
相关产品推荐

