WordPress 重定向问题

今天在云上部署WordPress时遇到的一个大坑。

本来云服务器上有一个正在运行的docker里的nginx服务,与是将其用来给WordPress套一个https。使用

https://github.com/docker/awesome-compose/blob/master/wordpress-mysql/compose.yaml

提供的脚本一通操作,然后悲剧了。

WordPress地址

WordPress地址配置见上图,管理页面可以正常访问,管理页面https://labmem.space/wp-admin可以正常访问,但是主页会重定向到https://172.17.0.1/导致无法访问,172.17.0.1是宿主机用于跟docker容器桥接的本地地址。

经研究将nginx配置调整如下就可以了。

server {
  listen              443 ssl;
  ssl_certificate     /etc/letsencrypt/live/labmem.space/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/labmem.space/privkey.pem;
  ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers         HIGH:!aNULL:!MD5;

  server_name labmem.space;
  index  index.php index.html index.htm;

  proxy_redirect off;
  port_in_redirect off;

  location ^~  / {
    proxy_pass  http://172.17.0.1:8001;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-Port 443;
    proxy_redirect              off;
    proxy_buffering             off;
    proxy_read_timeout          1m;
    proxy_connect_timeout       1m;
    proxy_set_header Proxy "";
    proxy_set_header Accept-Encoding "";
  }
}

其实就添加了一条配置proxy_set_header Host $host。这一行的作用是把原http请求的Header中的Host字段也放到转发的请求里。
如果不加这一行的话,nginx转发的请求header里就不会有Host字段,而服务器是靠这个Host值来区分你请求的是哪个域名的资源的。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注