【问题标题】:HTTPS/PHP/NGINX: php://input data is NULL when HTTPS is enabledHTTPS/PHP/NGINX:启用 HTTPS 时 php://input 数据为 NULL
【发布时间】:2019-07-15 16:23:11
【问题描述】:

这与此question 有关。我发现当我在 YII 上检查我的 HTTPRequest 时,Yii::app()->request 使用 file_get_contents('php://input')$HTTP_RAW_POST_DATA 从前端获取请求。此机制在 SSL 被禁用时起作用,但在启用时,发布数据消失。我看到了类似的question,但没有具体的解决方案,尽管有一个答案不鼓励在强制 http 到 https 时使用 302 重定向。我需要在我的 api 服务器上使用这种机制来将 http 重定向到 https。如何在不丢失帖子数据的情况下允许将 http 重定向到 https?我的 nginx 配置在这个 link 上找到。

我希望这个问题能一劳永逸地解决,因为我已经花了一个多星期的时间来解决这个问题。

【问题讨论】:

  • 解决方案是不要将 HTTP 重定向到 HTTPS。如果您希望用户使用 HTTPS,为什么要将他们发送到 HTTP?
  • 您不能使用正文中的数据进行重定向。身体数据将丢失。通常在 web 应用程序上处理这个问题时,我们会使用 JavaScript 技巧来强制浏览器重新提交正文而不是发送重定向响应,但是由于这是一个 API,你不能这样做。解决方案是停止强制重定向API 路由并要求您的 API 使用者切换到 HTTPS,并接受那些不切换的将不受保护。

标签: php ssl nginx https


【解决方案1】:

如果你想将 http 重定向到 https,你必须更新你的 nginx 配置文件。

Nginx 应该监听 http:

    server {
            listen          80;
            server_name     api.test.com;
            return 301 https://api.test.com$request_uri;
    }

    server {
            listen          443 ssl http2;
            server_name     api.test.com;

            root /var/apps/myapp/current/workspace/api;
            ...

http2 是可选的

【讨论】:

    猜你喜欢
    • 2015-04-20
    • 1970-01-01
    • 2020-08-03
    • 2013-07-06
    • 2017-10-31
    • 2018-07-30
    • 2014-04-29
    • 2011-05-18
    • 1970-01-01
    相关资源
    最近更新 更多