Kong 背后的 Drupal 8
Drupal 8 Behind Kong
我有一个 Drupal 8 网站。
我正在使用 Kong 作为它的反向代理,使我能够 运行 我的服务器上的其他东西。
我的站点配置为 https,但 Kong 将其转发到没有 https 的服务器。
大部分网站都可以正常工作,但任何需要按下按钮的地方都会出错。由于某种原因,浏览器被抛到非 ssl url.
我认为大多数 urls 必须是相对的,但必须有一些设置点,因为按钮提交将浏览器推送到非 ssl 端点。我已经检查过 settings.php 但找不到。
有人知道可能有用的设置吗?
更新 1
我查看了 chrome 日志并勾选了 'preserve log' 我发现我从服务器收到了 302:
请求URL:https://code.metcarob.com/user/logout
请求方式:GET
状态代码:302 找到
远程地址:78.31.105.225:443
推荐人政策:降级时无推荐人
我检查了我的 nginx 配置,我没有给出任何 302。 (出于其他原因,我确实给出了 301,但他们没有击中这里。)
为什么 Drupal 会向浏览器发出 302,当它发出时为什么不尊重 https?
更新 2
登录按钮使用方法 303。
请求URL:https://code.metcarob.com/user/login
请求方法:POST
状态码:303 见其他
远程地址:78.31.105.225:443
推荐人政策:降级时无推荐人
我不得不使用一个可怕的 hack 来解决这个问题。
在我的 Drupal 8 设置文件中,我必须添加:
$settings['reverse_proxy'] = TRUE;
$settings['reverse_proxy_addresses'] = array($_SERVER['REMOTE_ADDR']);
将 reverse_proxy_addresses 设置为 REMOTE_ADDR 允许欺骗,但因为我的 Kong 服务器和 Drupal 服务器都在同一个加密的 docker 群网络中,我认为这不是问题.
这让我遇到了一个遗留问题。 Kong 在端口 8443 上运行。无法更改它,但 docker 容器可以暴露端口 443。问题是这最终会发送值为 8443 的 X_FORWARDED_PORT header。每次 Drupal 中的表单提交时,浏览器都会定向到 8443。我发现我可以通过执行以下操作来覆盖它:
$settings['reverse_proxy_port_header'] = 'X_SOMERANDOMHEADERIDONTUSE';
这使得 drupal 忽略 header 和重定向工作。
我有一个 Drupal 8 网站。 我正在使用 Kong 作为它的反向代理,使我能够 运行 我的服务器上的其他东西。
我的站点配置为 https,但 Kong 将其转发到没有 https 的服务器。
大部分网站都可以正常工作,但任何需要按下按钮的地方都会出错。由于某种原因,浏览器被抛到非 ssl url.
我认为大多数 urls 必须是相对的,但必须有一些设置点,因为按钮提交将浏览器推送到非 ssl 端点。我已经检查过 settings.php 但找不到。
有人知道可能有用的设置吗?
更新 1
我查看了 chrome 日志并勾选了 'preserve log' 我发现我从服务器收到了 302:
请求URL:https://code.metcarob.com/user/logout 请求方式:GET 状态代码:302 找到 远程地址:78.31.105.225:443 推荐人政策:降级时无推荐人
我检查了我的 nginx 配置,我没有给出任何 302。 (出于其他原因,我确实给出了 301,但他们没有击中这里。) 为什么 Drupal 会向浏览器发出 302,当它发出时为什么不尊重 https?
更新 2
登录按钮使用方法 303。
请求URL:https://code.metcarob.com/user/login 请求方法:POST 状态码:303 见其他 远程地址:78.31.105.225:443 推荐人政策:降级时无推荐人
我不得不使用一个可怕的 hack 来解决这个问题。
在我的 Drupal 8 设置文件中,我必须添加:
$settings['reverse_proxy'] = TRUE; $settings['reverse_proxy_addresses'] = array($_SERVER['REMOTE_ADDR']);
将 reverse_proxy_addresses 设置为 REMOTE_ADDR 允许欺骗,但因为我的 Kong 服务器和 Drupal 服务器都在同一个加密的 docker 群网络中,我认为这不是问题.
这让我遇到了一个遗留问题。 Kong 在端口 8443 上运行。无法更改它,但 docker 容器可以暴露端口 443。问题是这最终会发送值为 8443 的 X_FORWARDED_PORT header。每次 Drupal 中的表单提交时,浏览器都会定向到 8443。我发现我可以通过执行以下操作来覆盖它:
$settings['reverse_proxy_port_header'] = 'X_SOMERANDOMHEADERIDONTUSE';
这使得 drupal 忽略 header 和重定向工作。