Wordpress on Azure Linux App Service over https



我在Azure Linux App Service上托管WordPress时遇到了问题。 WordPress没有意识到我们是通过https。 我所有的样式表都是通过http加载的,即使该网站是通过https请求的。

我找到了这个页面:https://codex.wordpress.org/Function_Reference/is_ssl 和这个代码片段:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';

我还在 github 上遇到了这段代码,它基本上做同样的事情:

https://gist.github.com/buchizo/1b619c5461295822f0c45e666ba716bf

if ( array_key_exists( "HTTP_X_FORWARDED_SERVER", $_SERVER ) ) {
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
$_SERVER['HTTPS']='on';
}
define( "WP_SITEURL", "http://" . $_SERVER["HTTP_X_FORWARDED_SERVER"] );
define( "WP_HOME", "http://" . $_SERVER["HTTP_X_FORWARDED_SERVER"] );
$_SERVER['HTTP_HOST'] =  $_SERVER["HTTP_X_FORWARDED_SERVER"];
$_SERVER['SERVER_NAME'] =  $_SERVER["HTTP_X_FORWARDED_SERVER"];
} else {
define( "WP_SITEURL", "http://yoursite.azurewebsites.net" );
define( "WP_HOME", "http://yoursite.azurewebsites.net" );
}

在我的 wp-config.php 文件中插入此代码后,一切开始工作。

我的问题是,为什么需要这样做? Azure 有什么特别之处需要它? GitHub 链接引用了 nginx。 据我了解,这是一个负载均衡器,但我尚未在 Azure 上配置负载均衡器。 我希望有人在这里解释网络拓扑。

我遇到了同样的问题,但不是在 Azure 上,而是在我的组织网络内运行的虚拟服务器上。通常有一个负载均衡器用于来自互联网的外部流量。可能存在尚未配置但由 Azure 控制的负载均衡器。原因是在这种情况下,$_SERVER 数组将 IP 地址或服务器(运行 WordPress 的位置(的 URL 作为HTTP_HOSTNAME。WordPress将其读取为主要网站URL,并将您重定向到它,或基于它加载样式表(因此没有https(。

第二个代码块尝试检测HTTP_X_FORWARDED_SERVER密钥是否存在,并将其用作请求可能已由负载均衡器或代理服务器转发的指示器。因此,它将该值与 $_SERVER 上的HTTP_HOST键的值交换。

以下是wp-login的一个实例.php关于WordPress如何计算基本URL的实例:

if ( force_ssl_admin() && ! is_ssl() ) {
if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'http' ) ) {
wp_safe_redirect( set_url_scheme( $_SERVER['REQUEST_URI'], 'https' ) );
exit;
} else {
wp_safe_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
exit;
}

}

最新更新