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

Ubuntu服务器单域名多Laravel应用子目录部署Nginx配置问题

问题根源

你的Nginx配置存在三个核心问题,直接导致脚本路径匹配错误:

  1. PHP请求的location规则匹配不到实际URL:你配置的location ~ ^/app_1\.php$只能匹配/app_1.php,但实际请求的是/apps/app_1/index.php,完全不匹配,导致FastCGI找不到脚本。
  2. Alias模式下的脚本路径拼接错误:使用alias时,$document_root$fastcgi_script_name会结合server根目录和请求URI生成错误路径,而非alias指向的public目录。
  3. Try_files的 fallback路径错误:直接写/index.php会去server根目录寻找,而非当前应用的public目录下的index.php。
修正后的Nginx配置

针对每个Laravel应用,使用如下配置格式(以app_1为例):

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  my-domain.com;

    root   /srv/users/usr1/apps/myapps/apps;

    # 处理app_1的子路径访问
    location ^~ /apps/app_1 {
        # 指向Laravel应用的public目录
        alias /srv/users/usr1/apps/myapps/apps/app_1/public;

        # 优先匹配静态文件,找不到则重写至index.php
        try_files $uri $uri/ @laravel_app_1;

        # 处理PHP请求
        location ~ \.php$ {
            include fastcgi_params;
            # 使用$request_filename自动结合alias路径和请求URI,生成正确的脚本路径
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_param PATH_INFO $fastcgi_path_info;
        }
    }

    # Laravel路由重写规则
    location @laravel_app_1 {
        rewrite ^/apps/app_1/(.*)$ /apps/app_1/index.php?$1 last;
    }

    # 同理复制上述配置,修改路径即可处理app_2、api_1等其他应用
    # location ^~ /apps/app_2 {
    #     alias /srv/users/usr1/apps/myapps/apps/app_2/public;
    #     try_files $uri $uri/ @laravel_app_2;
    #     ...
    # }
    # location @laravel_app_2 {
    #     rewrite ^/apps/app_2/(.*)$ /apps/app_2/index.php?$1 last;
    # }

    # 注:server块中的proxy_set_header是用于反向代理的,当前用FastCGI处理PHP,这些配置可以删除
}
额外注意事项
  • 确保Nginx运行用户(通常是www-data)对每个Laravel应用的storage、bootstrap/cache目录有读写权限,可执行命令:
    chown -R www-data:www-data /srv/users/usr1/apps/myapps/apps/app_1/{storage,bootstrap/cache}
    chmod -R 775 /srv/users/usr1/apps/myapps/apps/app_1/{storage,bootstrap/cache}
    
  • 修改配置后,重启Nginx生效:sudo systemctl restart nginx

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:22:43