我有一台在机器上运行的厨师服务器(侦听端口 4000),我想通过 SSL 访问它。我已经设置了一个 Apache 反向代理来执行此操作(侦听端口 4001)。Apache 设置看起来像(我的机器名称替换为 www.example.com)
Listen 4001
<VirtualHost *:4001>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
ProxyRequests Off
ProxyPreserveHost On
<Proxy http://localhost:4000*>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:4000/
ProxyPassReverse / http://localhost:4000/
ProxyPassReverse / http://www.example.com:4000/
ProxyPassReverse / http://www.example.com:4001/
CustomLog ${APACHE_LOG_DIR}/chef.access.log common
ErrorLog ${APACHE_LOG_DIR}/chef.error.log
</VirtualHost>
问题是厨师 API 调用返回的 JSON 中的 URL 具有 http 而不是 https。例如,它们看起来像:
http://www.example.com:4001/sandboxes/a25fa2615d3d4dbd91e91a5e3a76c0ea
代替:
https://www.example.com:4001/sandboxes/a25fa2615d3d4dbd91e91a5e3a76c0ea
一个示例是在执行 POST 以/sandboxes
创建新沙箱时,该沙箱创建了上面的链接。这会破坏诸如尝试使用刀上传食谱之类的事情。
据我所知,POST 调用的厨师服务器创建方法调用Merb absolute_url辅助方法来生成 URL。/sandboxes
在这一点上,我很困惑如何解决这个问题。我是否需要以某种方式更改我的 Apache 反向代理配置?它是厨师服务器中的配置选项吗?或者是其他东西?