Laravel Ajax请求本地正常但NGINX服务器无法运行
我来帮你梳理下可能的原因,一个个排查应该能解决问题:
NGINX的URL重写规则缺失
Laravel的路由依赖URL重写来把所有请求导向public/index.php,XAMPP里的Apache会自动识别.htaccess里的规则,但NGINX得手动配置。你得检查下你的NGINX站点配置文件,确保有这段关键的重写规则:location / { try_files $uri $uri/ /index.php?$query_string; }要是没这个规则,NGINX会直接去找
/readHSauswahl这个物理文件,根本不会交给Laravel路由处理,肯定会报错。请求URL的路径错误
你Ajax里用{!!URL::to('/readHSauswahl')!!}生成绝对路径,但如果部署的时候你的站点不是根域名(比如放在http://yourdomain.com/laravel-app这样的子目录里),生成的URL就会不对。你可以打开浏览器控制台,看看实际发送的请求URL是不是返回了404。如果是子目录部署,除了调整NGINX的根目录配置,还要在Laravel的.env文件里设置APP_URL=http://yourdomain.com/laravel-app。PHP-FPM配置异常
NGINX是通过PHP-FPM来处理PHP请求的,要是PHP-FPM没正常运行,或者NGINX里的PHP配置不对,Laravel的控制器就没法执行。检查下NGINX配置里的PHP处理部分,确保类似这样的配置是正确的(注意PHP版本要和你的服务器匹配):location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }同时也可以重启下PHP-FPM服务,比如
sudo systemctl restart php7.4-fpm。路由缓存或浏览器缓存问题
部署到服务器后,你可能没清除Laravel的路由缓存,导致新路由没被加载。登录服务器运行php artisan route:clear清除缓存试试。另外,浏览器缓存也可能存了旧的请求地址,按Ctrl+F5强制刷新浏览器再测试。文件权限不足
NGINX运行的用户(一般是www-data)得有Laravel项目目录的读写权限,尤其是storage和bootstrap/cache这两个目录,不然Laravel没法正常处理请求,可能返回500错误。可以用这几条命令调整权限:sudo chown -R www-data:www-data /path/to/your/laravel-project sudo chmod -R 755 /path/to/your/laravel-project/storage sudo chmod -R 755 /path/to/your/laravel-project/bootstrap/cacheCSRF令牌(可能性较低)
你用的是GET请求,Laravel默认不对GET请求校验CSRF令牌,但如果你的AjaxController被额外的中间件包裹,或者NGINX对请求头做了奇怪的处理,也可能有影响。不过这个概率比较低,可以先排查前面的点,要是都没问题再检查这个。
内容的提问来源于stack exchange,提问作者JohannesDey

