laravel 应用程序和 nginx fpm 的奇怪问题

问题描述 投票:0回答:1

只是想知道是否有人可以提供一些指导。我正在尝试使用 nginx 制作一个 Laravel 应用程序。我知道 fpm 可以工作,因为运行时我可以看到 phpinfp。当我尝试使用 laravel 应用程序的公共文件夹时,我得到了这个:

10.240.0.26 - - [09/Apr/2024:12:49:34 +0100] "GET /login?return_url=/login?return_url=/login?return_url=/login?return_url=/login?return_url=/login?return_url=/login?return_url=/login??return_url=/login?return_url=/login?return_url= HTTP/1.1" 302 5 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0"

它只是不断附加登录 URL。现在我不是应用程序的创建者,我只是想将它从 apache 移植到 nginx。

这是我在 ubuntu 22.04 上的默认开箱即用设置(到目前为止我仅进行了更改)

location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        # Allow headers
        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
        add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization' always;
    }

这是我完整的 NGINX 配置。自从我在尝试时提出问题以来,情况发生了一些变化。其他一切都是开箱即用的默认安装。

server {
    listen 80;
    server_name console.notlistingmyserver.com;
    root /data/www/consoleapp/console/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    try_files $uri $uri/ @rewrite;

    location @rewrite {
        rewrite ^/(.*)$ /index.php?_url=/$1;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        fastcgi_index /index.php;
        include fastcgi_params;


        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param REQUEST_URI $request_uri;

    }

 
}

有人见过这个吗?

laravel nginx
1个回答
0
投票

以下是我认为可能有帮助的一些建议。

  1. 在你的 Laravel 应用程序中,检查登录控制器,你可以在登录方法的开头添加 dd() 吗? 或者您可以检查中间件或代码是否导致重定向,因为此问题似乎可能是在您的 Laravel 应用程序中重定向请求。

  2. 您发布的 nginx 配置部分是正确的并且应该可以正常工作, 但你的问题缺少你如何指向 laravel 公共文件夹。 确认 root 指令指向正确的文件夹,并且 nginx 用户对 public 文件夹和 laravel 文件夹也具有正确的权限。

server {

    root /path/to/laravel/public;

  1. 确保不存在具有重写/重定向规则的 .htaccess

  2. 您可以检查日志以查看是否有任何关于重定向原因的指针(应该有可能提供线索的条目)

  3. 如果这些都不起作用,您可以尝试清除缓存

        php artisan config:clear
        php artisan route:clear
        php artisan cache:clear
    
    
  4. 基于提供的nginx服务器conf

@rewriterule
似乎是罪魁祸首,请使用简化的配置进行测试,如下所示。

    listen 80;
    server_name console.notlistingmyserver.com;
    root /data/www/consoleapp/console/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.php;
    charset utf-8;

    # Simplified try_files directive for Laravel
    try_files $uri $uri/ /index.php?$query_string;

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;

        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param REQUEST_URI $request_uri;
    }

  
}
© www.soinside.com 2019 - 2024. All rights reserved.