使用php artisan启动部分Laravel应用时出现404错误及端口异常问题
问题诊断与修复方案
核心现象
- 本地Ubuntu 22.04环境,API A用
php artisan serve --port=5000能正常访问Laravel欢迎页;API B启动后报404,Postman登录请求挂起(预期是500错误),生产环境完全正常 - 已通过Laravel Valet+Nginx把两个应用的PHP版本统一设为8.1,防火墙已关闭
- 启动A后再启动B(5001端口),B直接挂起;停B后重启提示端口占用;换端口还是404,连默认欢迎页都出不来
分步解决
1. 彻底清理残留进程
停止B后提示端口占用,说明进程没杀干净:
# 查端口对应的进程ID sudo lsof -i :5001 # 强制杀掉进程(把PID换成查到的数字) sudo kill -9 PID
嫌麻烦直接杀所有php artisan serve进程:
sudo pkill -f "php artisan serve"
2. 断开Valet与内置服务器的冲突
你同时用了Valet(Nginx代理)和Laravel内置服务器,大概率是路由解析冲突:
# 先停掉Valet所有服务 valet stop # 清缓存 valet clear-cache # 换个新端口启动API B,比如5002 cd /你的API B路径 && php artisan serve --port=5002
如果这时候能看到欢迎页,就是Valet的Nginx配置搞的鬼,后续可以单独给API B配置Valet站点,不要混用内置服务器。
3. 检查API B的Laravel基础配置
404说明连默认路由都没匹配到,先查基础:
- 打开
routes/web.php,确认有没有默认路由:Route::get('/', function () { return view('welcome'); }); - 清Laravel缓存:
php artisan route:clear php artisan config:clear - 检查
.env里的APP_URL,要和访问地址一致:APP_URL=http://127.0.0.1:5002
4. 验证PHP环境与依赖
虽然设了8.1,但得确保依赖和扩展都齐:
- 重装API B的依赖:
cd /你的API B路径 && composer install --no-dev - 查PHP扩展,Laravel必须的扩展不能少:
缺的话用apt装,比如:php -msudo apt install php8.1-bcmath php8.1-mbstring php8.1-pdo php8.1-xml
5. 排查数据库连接导致的挂起
请求挂起大概率是数据库连不上卡死了:
- 检查API B的
.env数据库配置,要和API A的一致,账号密码权限没问题:DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=你的库名 DB_USERNAME=你的用户名 DB_PASSWORD=你的密码 - 测试数据库连通性:
连不上就查MySQL状态:php artisan db:connectsudo systemctl status mysql
总结
先搞定进程残留和Valet冲突,这俩是本地环境最容易踩的坑;再查Laravel基础配置;最后看数据库连接是不是堵了请求。
内容的提问来源于stack exchange,提问作者black leeder
相关产品推荐
相关产品推荐

