可能不少童鞋都遇到类似的问题,基于研究技术的目的,七赞云(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。
以上就是这次折腾的经历,希望给大家带来帮助参考。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。