我在服务器上正确运行了单页应用程序,为不同网址的页面提供服务:
但是当我尝试访问意味着返回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包含。我还试图强制每个位置块的响应类型(参见上面的代码段)。
答案 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;
# ...
}