可能不少童鞋都遇到类似的问题,基于研究技术的目的,七赞云(7zan.com)站长尝试了不少方案测试,WORDPRESS总是或这或那出现了异常,让我们来重新梳理一下这个过程做为记录:

首先我们确定的第一步,就是域名先解析到未备案服务器,这点必须确认正确。并在此配置(以nginx环境为例):

server {
    listen 80;
    server_name 要使用的域名;
    return 301 https://$host$request_uri;  # 强制HTTP到HTTPS的重定向
}

server {
    listen 443 ssl;
    server_name 要使用的域名;
    fastcgi_param  HTTPS on;

    ssl_certificate    /你的服务器证书路径/fullchain.pem;
    ssl_certificate_key    /你的服务器证书路径/privkey.pem;

    location / {
        proxy_pass http://转向服务器IP:端口号;  # 反向代理到后端服务器
        # proxy_set_header Host host;  # 使用原始Host头
        proxy_set_header X-Real-IP $remote_addr;  # 客户端真实 IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 代理链中的 IP
        proxy_set_header X-Forwarded-Proto $scheme;  # 原始请求协议
        proxy_set_header X-Forwarded-Host $host;  # 传递原始Host信息
        
        # 可选:设置代理超时
        proxy_read_timeout 90;
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
    }
        access_log off;

    error_page 497  https://$host$request_uri;
    
#ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
}

这个上面的环境是带有SSL,全程加密通讯,末端服务器也要布署,

然后就是备案服务器那边,这是在是末端服务器的配置:

server
{
    listen 端口号;
    server_name www.7zan.com;
    index index.php index.html index.htm;
    root /www/wwwroot/www.7zan.com;
    #CERT-APPLY-CHECK--START

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    ssl_certificate    /你的服务器证书路径/fullchain.pem;
    ssl_certificate_key    /你的服务器证书路径/privkey.pem;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    add_header Alt-Svc 'quic=":443"; h3=":443"; h3-29=":443"; h3-27=":443";h3-25=":443"; h3-T050=":443"; h3-Q050=":443";h3-Q049=":443";h3-Q048=":443"; h3-Q046=":443"; h3-Q043=":443"';
    error_page 497  https://$host$request_uri;


    #SSL-END
}

这个时候我们已经实现基于HTTPS的反向代理,如果原环境有301、302重定向规则,请一并建立。

下面来解释一下# proxy_set_header Host host; # 使用原始Host头,这个配置导致的问题:

换写法也是那样,因为未备案域名过不了这个请求,

这句配置本身并不会有问题,但问题就是部分检测机制会屏蔽此请求,导致页面空白,测试的阿里服务器就是这样的,

所以吸能注释掉。

但注释掉就会带来其它问题,这就是今天的重点,我们就拿WORDPRESS为例,因为WP的动态机制原因:

故障现像:部分页面访问,会从域名变成IP,而无法访问,尤其是进入后台时直接无法显示,更不能登录。

这个时候我们要对wordpress的下的WP-CONFIG.PHP文件加入以下几句:

define('WP_HOME', 'https://你的域名');
define('WP_SITEURL', 'https://你的域名');

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

if (!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) {
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}

加到开头,对站内强制域名连接,这样清除缓存以后,如果本机调试可能还能删除COOKIE就正常了,跑了CDN的话,还有清除CDN。

以上就是这次折腾的经历,希望给大家带来帮助参考。

 

 

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。