使用 nginx 上游的 Wordpress 常量重定向
Posted
技术标签:
【中文标题】使用 nginx 上游的 Wordpress 常量重定向【英文标题】:Wordpress constant redirect with nginx upstream 【发布时间】:2017-01-13 07:29:23 【问题描述】:出现了一种情况,运行 nginx 的 server1 会将所有“/”位置转发到 server2,同时将“/api”和其他一些位置保留在 server1 上。这也试图保持 SSL 正常工作。尝试将 WP 网址从 http://test.example.com 移动到 https://example.com 可以正确加载首页,但加载 wp-admin
会导致重定向过多。
Server1 Nginx:
上游 webapp_url 服务器IP:80; 服务器 听 443 ssl; server_name www.example.com example.com; access_log /var/log/nginx/example.log; ssl_certificate /etc/nginx/ssl/example.crt; ssl_certificate_key /etc/nginx/ssl/server.key; ssl_ciphers RC4:HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers 开启; 位置/文件/ 根/家; access_log 关闭; 最大过期; if ($request_filename !~* ^.*?\.(jpg)|(png)|(gif)|(pdf)) add_header 内容处置:“$request_filename”; 地点 / # proxy_pass http://site_url/; proxy_http_version 1.1; proxy_set_header 升级 $http_upgrade; proxy_set_header 连接“升级”; proxy_set_header 主机 $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_cache_bypass $http_upgrade; proxy_set_header X-示例“1”; proxy_pass http://webapp_url/;这可以很好地加载其他服务器,主页和链接都可以正常工作(尽管会出现混合内容警告,因为我无法在管理员中更改它)。 WP siteurl
和 home
都设置为新地址。
Server2 Nginx:
服务器 #听443 ssl; 听 80; server_name example.com test.example.com; client_max_body_size 30M; error_log /var/log/wordpress/error.log 信息; 地点 / 根 /home/wordpress; try_files $uri $uri/ /index.php?q=$request_uri; 索引 index.php index.html index.htm; #ssl_certificate /etc/nginx/ssl/example.crt; #ssl_certificate_key /etc/nginx/ssl/example.key; #ssl_ciphers RC4:HIGH:!aNULL:!MD5; #ssl_prefer_server_ciphers 开启; error_page 404 /404.html; 位置 = /404.html 根 /usr/share/nginx/html; error_page 500 502 503 504 /50x.html; 位置 = /50x.html 根 /usr/share/nginx/html; # 位置 ~ \.php$ 根 /home/wordpress; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 包括 fastcgi_params;加载 /wp-admin/
会启动无限重定向(到相同的 url)。我也在wp-config.php
中定义了它:
【问题讨论】:
【参考方案1】:wp-admin
检查连接是否安全,否则重定向到同一 URL 的 https
版本。在像您这样的情况下,这会导致重定向循环。
您需要告诉 WordPress 连接是安全的。
我注意到您在服务器 1 上设置了相应的标头:
proxy_set_header X-Forwarded-Proto $scheme;
(在您的情况下,$scheme
的值硬连线到 https
)。
但是,您还需要将其以HTTPS
参数的形式传递给WordPress,其值为on
。
这是通过map
指令(在服务器 2 上)实现的:
map $http_x_forwarded_proto $https_flag
default off;
https on;
server
...
(map
指令放置在 http
块内。您可以将它放在 server
块的上方,如上所示。有关详细信息,请参阅 this document)
另外,添加另一个fastcgi_param
以将HTTPS
参数传递给WordPress(在服务器2 上):
location ~ \.php$
...
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS $https_flag;
...
【讨论】:
【参考方案2】:第 1 步。
在您的服务器上启用并安装所需的 PHP 版本。第 2 步。
sudo yum install php-cli php-pdo php-fpm php-mysqlnd
第 3 步。
sudo systemctl start php-fpm
第 4 步。
sudo systemctl enable php-fpm
最后复制Nginx配置
server
root /path/to/your/wordpress;
index index.php index.html index.htm;
server_name site.com www.site.com;
add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
location ~ .php$
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; # path might differ from OS to OS
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
【讨论】:
以上是关于使用 nginx 上游的 Wordpress 常量重定向的主要内容,如果未能解决你的问题,请参考以下文章
Docker [emerg] 1#1:单独的撰写文件后在上游找不到主机