【问题标题】:Curl having problem to retrieve data after Nginx restartCurl 在 Nginx 重启后检索数据时出现问题
【发布时间】:2019-11-15 10:51:32
【问题描述】:

在我重新启动服务器之前,我的服务器工作正常,现在我的带有 cURL API 的程序停止工作。排查了半天,终于知道是什么问题了。

当我使用这个命令时:

curl -i https://server.my-site.com/checkConnection

Nginx 返回错误:

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 04 Jul 2019 17:14:40 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
Location: /checkConnection/

但是如果我使用这个命令:

curl -i -L https://server.my-site.com/checkConnection

然后服务器返回:

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 04 Jul 2019 17:14:40 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
Location: /checkConnection/

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 04 Jul 2019 17:14:40 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 2
Connection: keep-alive
X-Frame-Options: SAMEORIGIN

ok

如果我使用浏览器,那么一切正常。我不知道错误来自什么。以及如何解决它。

感谢任何帮助!

【问题讨论】:

标签: nginx curl


【解决方案1】:

当路径映射到目录时会发生这种情况。理论上,像http://example.org/directory 这样的URL 可以映射到像/wherever/public_html/directory 这样的目录,并且作为一个目录,从那里显示index.html 或类似的文件;但是,当您参考同一目录中的图像等其他内容时,这会导致令人惊讶的问题。 <img src="picture.jpg"> 将加载 http://example.org/picture.jpg 而不是 http://example.org/directory/picture.jpg,因为它与浏览器实际查看的 URL 相关。因此,HTTP 服务器通常会发出重定向以在末尾添加一个斜杠,然后加载正确的页面和在相对路径符合人类期望的 URL。

将-L 添加到您的 curl 命令行会使其跟随重定向,就像浏览器一样,您会得到预期的结果。如果没有-L,curl 是一个更天真的 http 客户端,可以让你对信息做任何你想做的事情。

【讨论】:

  • 谢谢。但我们使用的是 django,每个 url 只指向一个 html 文件。
【解决方案2】:

也许你有一个 www.server.my-site.com 的规则,这就是为什么返回 301,因为它从 server.my-site.com 重定向到 www 站点也许你应该分享你的配置来检查它

【讨论】:

  • 这种情况经常发生,但在这种情况下并非如此:这里的Location: 标头给出的 URL 不在不同的主机名上,而是与该主机名相关。它的行为更符合为映射到目录的路径添加斜线。
【解决方案3】:

好的。我最终通过向 uwsgi 添加内部路由来修复它。现在一切正常。

【讨论】:

    猜你喜欢
    • 2019-12-17
    • 2011-03-12
    • 2023-04-09
    • 1970-01-01
    • 2017-07-24
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多