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

Nginx子目录部署Lumen路由返回404问题求助

解决Lumen在Nginx下路由返回404的问题

我仔细看了你的Nginx配置,发现几个关键问题导致Lumen的路由(比如/sms-api/login)返回404,下面是具体的修正方案和原因:


问题1:Rewrite规则与Alias路径不匹配

你的@sms-api rewrite规则没有正确对应到alias指向的public目录。当使用alias时,Nginx会替换请求路径的前缀,所以rewrite的时候需要调整捕获的路径,让请求正确转发到public/index.php。

问题2:FastCGI参数硬编码且路径不一致

你把SCRIPT_FILENAME硬编码为固定路径,这在alias场景下不够灵活,而且当请求包含path info时,无法正确传递给Lumen。另外配置里出现了两个不同的PHP-FPM sock路径(/var/run/php-fpm/php-fpm.sock和/var/run/php5-fpm.sock),这会导致部分PHP请求无法正常转发。

问题3:嵌套的PHP Location规则不严谨

嵌套的location ~* \.php没有正确处理alias下的PHP文件路径,需要结合$request_filename确保脚本路径正确。


修正后的完整Server配置

server {
    listen 80;
    server_name IP_ADDRESS;
    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    # sms-api 修正后的配置
    location ^~ /sms-api {
        alias /usr/share/nginx/html/sms-api/public;
        try_files $uri $uri/ @sms-api;

        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; # 统一sock路径,根据实际情况调整
            fastcgi_index index.php;
            # 使用$request_filename确保alias下的脚本路径正确
            fastcgi_param SCRIPT_FILENAME $request_filename;
            # 必须传递PATH_INFO给Lumen处理路由
            fastcgi_param PATH_INFO $fastcgi_path_info;
            include fastcgi_params;
        }
    }

    location @sms-api {
        # 修正rewrite规则:捕获/sms-api/后的部分,转发到public/index.php
        rewrite ^/sms-api/(.*)$ /sms-api/index.php/$1 last;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; # 统一sock路径
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

关键改动说明

  • 统一PHP-FPM sock路径:确保所有PHP请求都使用同一个正确的sock文件,你可以通过find /var/run -name "php*-fpm.sock"命令确认服务器上的实际路径。
  • 修正Rewrite规则:在@sms-api的rewrite中添加了开头的/,确保路径匹配正确,同时让Lumen能捕获到完整的路由参数。
  • 动态设置SCRIPT_FILENAME:使用$request_filename替代硬编码路径,适配alias的路径替换逻辑。
  • 传递PATH_INFO参数:显式设置PATH_INFO,让Lumen能够正确解析URL中的路由部分。

修改完成后,记得重启Nginx和PHP-FPM服务:

sudo systemctl restart nginx
sudo systemctl restart php-fpm # 或者php5-fpm,根据你的PHP版本调整

现在访问http://IP_ADDRESS/sms-api/login应该就能正常进入对应的Lumen路由了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:08:04