我使用nginx作为mod_php的Apache前面的反向代理。 我的网站是在https上,它需要将variables$ _SERVER ['HTTPS']设置为'on'来正确组装一些链接。 我的网站是在Drupal上,所以当决定站点是否在https下运行时,不能修复代码并检查其他variables。
有没有办法解决这个问题,只需调整nginx或apacheconfiguration?
我发现其他人也提出了类似的问题,但是我没有find适合我的解决scheme,既没有明确说明我想要的是不可能的。
(例如: HTTPS服务器/ phpvariables不可用 , Nginx:在HTTP上剥离标题,在HTTPS上添加标题 )
您可以在Apache主configuration或.htaccess中使用指令SetEnv HTTPS "on"来无条件地设置所需的variables。
或者更好 – 只有当客户端地址等于Nginx前端的地址时才设置。 在这种情况下,如果客户端直接请求没有SSL的Apache,variables将不会被设置:
SetEnvIf Remote_Addr "NGINX_IP_ADDRESS" HTTPS=on
另外值得注意的是,没有什么能够阻止你(和securepages模块文档甚至build议在某些情况下)编辑你的settings.php来包含这样的块:
$headers = @apache_request_headers(); $real_client_ip = ($headers === NULL ? $_SERVER['HTTP_X-Forwarded-For'] : $headers["X-Forwarded-For"] ); if ( $real_client_ip == '1.2.3.4' ) { $_SERVER['HTTPS'] = 'on'; }
也就是说,更好的(通常更安全的)select是通过像传递的环境variables这样的带外方法来实现。