Nginx不会为json回复提供服务

时间:2018-05-31 13:09:59

标签: nginx

我在服务器上正确运行了单页应用程序,为不同网址的页面提供服务:

  • example.com
  • example.com/jsonendpoint

但是当我尝试访问意味着返回JSON的端点时,我得到了一个HTML响应。 nginx配置看起来像:

server {
    root /home/myapplication/server/public;

  location / {
    proxy_pass http://myapplication/;
    proxy_redirect off;
    try_files $uri $uri/ /index.html;
  }

  location /jsonendpoint {
    proxy_pass http://myapplication/;
    default_type application/json;
    proxy_redirect off;
  }
}

如果我注释掉try_files行,则JSON响应正常,我仍然可以访问example.com处的根URL,但是当我尝试访问example.com/jsonendpoint时,nginx会返回404。

如何修复配置以使两件事都能正常工作?

修改

当我在VPS中卷曲服务器时,它主持在:

curl -i -H "Accept: application/json" http://localhost:3000/jsonendpoint

我收到了JSON回复:

Content-Type: application/json; charset=utf-8

当我从本地机器发出相同的curl请求时(这意味着通过nginx然后响应类型错误:

Content-Type: text/html; charset=UTF-8

这排除了问题在于后端服务器的可能性。

mime.types文件确实添加了json mime类型,并且它被nginx包含。我还试图强制每个位置块的响应类型(参见上面的代码段)。

1 个答案:

答案 0 :(得分:1)

检查您的mime types中是否有类似的内容:

application/json      json;

然后尝试使用以下内容查询您的网站:

curl -i -H "Accept: application/json" http://your-site

如果您的应用程序返回json,则检查标头content-type,它应该是:

content-type: application/json

如果您得到类似的内容:

content-type: text/html; charset=utf-8

检查后端以添加正确的内容类型。

如果您想强制使用该类型,请尝试以下操作:

location / {
    default_type application/json;
    # ...
}