PHP API - Nginx 给了我无效的数据类型标头

Posted

技术标签:

【中文标题】PHP API - Nginx 给了我无效的数据类型标头【英文标题】:PHP API - Nginx giving me invalid data type header 【发布时间】:2021-12-19 00:29:20 【问题描述】:

我有一些使用 Apache 的经验,但现在我切换到 nginx 来学习一些新东西。最后让它使用基本的 php,让我们在我的域上加密。 (是的,我很乐意尝试新事物)

我想要一些由 Nginx 提供的带有 React 的静态文件(我听说这是 Nginx 擅长的东西),以及在/API/RESOURCE/ACTION|ID URI 下使用 PHP 的 REST API。

现在,我有目录 /API/ 并配置(使用一些谷歌搜索)将 domain.tld/(api|API)/ 下的所有内容传递给 /API/index.php(我使用的是 Nette FW)。 index.php 在 PHP-FPM 和显示中按预期工作,但是当使用带有 RESOURCE 的端点时,即使我从 PHP 发送 contentType,它也会给我一些带有标题 Content-Type: application/octet-stream 的哈希字符串(或随机字符串) 这是我的 2 个域“虚拟主机”配置(HTTPS 重定向除外,效果很好);

server 
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name domain.tld *.domain.tld username.tld *.username.cz;
    # redirect other domains to main
    if ($host != 'domain.tld') 
        return 301 https://domain.tld$request_uri;
    
    
    root /home/username/www/domain.tld/www;
    index index.php index.html index.htm;
 
    location / 
            try_files $uri $uri/ /index.php =404;
        

    location /API 
        try_files $uri $uri/ /index.php =404;
    

    location ~ \.php$ 
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
    


    ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem; # managed by Certbot


任何想法有什么问题吗?谢谢

【问题讨论】:

如果您将try_files $uri $uri/ /index.php =404; 更改为try_files $uri $uri/ /index.php; 会发生什么? 【参考方案1】:

感谢 Ivan Shatsky 的评论发现了真正的问题 - 它重定向到 404 而不是 index.php

所以现在try_files in

location /API 
    try_files $uri $uri/ /index.php =404;

变成try_files $uri $uri/ /API/index.php;

(是的,我想它需要整个路径)

非常感谢。我的学校项目现在可以工作了:)

【讨论】:

以上是关于PHP API - Nginx 给了我无效的数据类型标头的主要内容,如果未能解决你的问题,请参考以下文章

尽管在设置中指定了日期格式,但 Django 在运行测试时给了我一个“无效的日期格式”错误

Flutter:我正在使用 post api 将文件上传到数据库。但它给了我一个错误

Paypal API (NVP) TransactionSearch 给出错误 10004 - 开始日期无效

Elevation API 给了我不合逻辑的结果

SQL在php中给了我一个结果[关闭]

App Engine 标准:超时给了我 500 错误