如何配置Nginx反向代理,让DigitalOcean服务器上的Laravel与React应用生产运行
解决步骤
一、替代php artisan serve部署Laravel生产环境
php artisan serve是开发专用的内置服务器,生产环境不能依赖它,推荐两种稳定方案:
方案1:PHP-FPM + Nginx(标准生产配置)
这是Laravel生产部署的常规方式,无需额外启动开发服务:
- 确认服务器已安装对应版本的PHP-FPM(比如Ubuntu下的
php8.2-fpm,根据你的PHP版本调整) - 创建Laravel的Nginx配置文件
/etc/nginx/sites-available/api.conf:
server { listen 8000; server_name localhost; root /var/www/api/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 路径需匹配你的PHP-FPM版本 } location ~ /\.ht { deny all; } }
方案2:Laravel Octane(常驻进程监听8000端口)
如果需要Laravel直接监听8000端口,用Octane实现高性能常驻服务:
- 安装Octane依赖:
cd /var/www/api && composer require laravel/octane
- 选择Swoole作为服务器并初始化:
php artisan octane:install --server=swoole
- 创建systemd服务实现开机自启,新建
/etc/systemd/system/laravel-octane.service:
[Unit] Description=Laravel Octane Service After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/var/www/api ExecStart=/usr/bin/php artisan octane:start --port=8000 --server=swoole Restart=always [Install] WantedBy=multi-user.target
- 启动并启用服务:
sudo systemctl daemon-reload sudo systemctl start laravel-octane sudo systemctl enable laravel-octane
二、替代npm start部署React生产环境
npm start是开发服务器,生产环境需先构建静态文件,再用Nginx托管:
- 进入React项目目录构建生产包:
cd /var/www/spa npm run build
- 创建React的Nginx配置文件
/etc/nginx/sites-available/spa.conf:
server { listen 3000; server_name localhost; root /var/www/spa/build; index index.html; location / { try_files $uri $uri/ /index.html; # 解决React路由刷新404问题 } }
三、启用Nginx配置并验证
- 将配置文件软链接到启用目录:
sudo ln -s /etc/nginx/sites-available/api.conf /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/spa.conf /etc/nginx/sites-enabled/
- 检查Nginx配置合法性:
sudo nginx -t
- 重启Nginx生效:
sudo systemctl restart nginx
四、验证服务与端口
- 检查端口监听状态:
sudo ss -tulpn | grep -E '8000|3000'
- PHP-FPM方案:8000端口由Nginx监听;
- Octane方案:8000端口由PHP进程监听;
- React应用:3000端口由Nginx监听。
- 本地测试访问:
curl http://localhost:8000 # 测试Laravel API curl http://localhost:3000 # 测试React应用
五、防火墙开放端口(可选)
如果服务器启用了ufw防火墙,开放对应端口:
sudo ufw allow 8000/tcp sudo ufw allow 3000/tcp sudo ufw reload
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

