nginx WordPress在Azure Linux App Service上通过https

8iwquhpp  于 2023-08-03  发布在  Nginx
关注(0)|答案(1)|浏览(108)

我在Azure Linux应用服务上托管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上配置负载均衡器。我希望有人能解释一下这里的网络拓扑结构。

6ljaweal

6ljaweal1#

我遇到了同样的问题,但不是在Azure上,而是在我的组织网络内运行的虚拟服务器上。通常有一个负载平衡器用于来自Internet的外部流量。可能存在尚未配置但由Azure控制的负载平衡器。原因是在这种情况下,$_SERVER数组将您的服务器(WordPress正在运行的地方)的IP地址或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;
}

字符串
}

相关问题