只是想知道是否有人可以提供一些指导。我正在尝试使用 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 应用程序中,检查登录控制器,你可以在登录方法的开头添加 dd() 吗? 或者您可以检查中间件或代码是否导致重定向,因为此问题似乎可能是在您的 Laravel 应用程序中重定向请求。
您发布的 nginx 配置部分是正确的并且应该可以正常工作, 但你的问题缺少你如何指向 laravel 公共文件夹。 确认 root 指令指向正确的文件夹,并且 nginx 用户对 public 文件夹和 laravel 文件夹也具有正确的权限。
server {
root /path/to/laravel/public;
确保不存在具有重写/重定向规则的 .htaccess
您可以检查日志以查看是否有任何关于重定向原因的指针(应该有可能提供线索的条目)
如果这些都不起作用,您可以尝试清除缓存
php artisan config:clear
php artisan route:clear
php artisan cache:clear
基于提供的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;
}
}