You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在VPS部署Laravel后端与Next.js前端:端口占用及路由配置求助

问题解决步骤

1. 解决Next.js端口占用问题

Error: listen EADDRINUSE: address already in use :::80是因为httpd已经占用80端口提供服务,不需要让Next.js直接监听80。保持Next.js在3000端口运行即可:

  • 启动Next.js用默认端口:npm run start(默认3000,若之前改了配置,确保next.config.js里没强制设置80)
  • 如需后台稳定运行Next.js,可安装pm2管理进程:
    npm install -g pm2
    pm2 start npm --name "next-app" -- start
    

2. 配置httpd虚拟主机实现路由规则

修改httpd虚拟主机配置文件(比如/etc/httpd/conf.d/example.com.conf),替换为以下内容,实现路径转发:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com

    # 转发 /admin 和 /api 到 Laravel
    Alias /admin /var/www/html/laravel-app/public
    Alias /api /var/www/html/laravel-app/public

    <Directory /var/www/html/laravel-app/public>
        AllowOverride All
        Require all granted
        RewriteEngine On

        # 处理 /admin 路径的路由重写
        RewriteBase /admin/
        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /admin/index.php [L]

        # 处理 /api 路径的路由重写
        RewriteBase /api/
        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /api/index.php [L]
    </Directory>

    # 转发 /products 到本地3000端口的Next.js服务
    ProxyPass /products http://localhost:3000/products
    ProxyPassReverse /products http://localhost:3000/products

    # 日志配置(可选)
    ErrorLog /var/log/httpd/example.com-error.log
    CustomLog /var/log/httpd/example.com-access.log combined
</VirtualHost>

配置说明:

  • Alias:将/admin、/api路径映射到Laravel的public目录(Laravel的入口文件位于此目录)
  • RewriteRule:确保Laravel的路由能正常解析,避免出现404错误
  • ProxyPass/ProxyPassReverse:将/products开头的请求反向代理到运行在3000端口的Next.js服务

3. 验证配置并重启服务

  • 检查httpd配置合法性:apachectl configtest(CentOS/RHEL)或apache2ctl configtest(Debian/Ubuntu)
  • 重启httpd服务:systemctl restart httpd
  • 验证Next.js服务:执行curl http://localhost:3000/products,确认能返回正常内容

额外注意事项

  • 确保httpd启用了必要模块:proxy、proxy_http、rewrite,未启用的话执行:
    # Debian/Ubuntu系统
    a2enmod proxy proxy_http rewrite
    # CentOS/RHEL系统
    ln -s /etc/httpd/conf.modules.d/00-proxy.conf /etc/httpd/conf.enabled/
    ln -s /etc/httpd/conf.modules.d/00-rewrite.conf /etc/httpd/conf.enabled/
    
  • 修正Laravel目录权限:确保httpd进程对Laravel目录有读写权限
    chown -R apache:apache /var/www/html/laravel-app
    chmod -R 755 /var/www/html/laravel-app/storage
    

内容的提问来源于stack exchange,提问作者high developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:43:18