302错误(临时重定向)在Nginx中通常是由配置问题引起的。以下是排查和解决Nginx 302错误的步骤:
# 检查是否有明确的return 302或rewrite规则
server {
...
# 查找类似这样的配置
return 302 http://example.com/new-url;
# 或
rewrite ^/old-url$ /new-url redirect;
...
}
# 常见的HTTPS强制重定向配置
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; # 确保这是301而不是302
}
# 代理配置可能导致302循环
location / {
proxy_pass http://backend;
# 确保添加以下头部处理
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
某些后端应用(如WordPress)可能会发送302重定向:
- 检查应用配置
- 确保$_SERVER['HTTPS']
正确设置
- 检查数据库中的站点URL设置
curl -v http://yourdomain.com
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
server {
listen 443 ssl;
server_name example.com;
# 添加这个条件判断
if ($http_x_forwarded_proto != "https") {
return 301 https://$host$request_uri;
}
...
}
在wp-config.php中添加:
define('FORCE_SSL_ADMIN', true);
// 在有些情况下需要添加
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
$_SERVER['HTTPS'] = 'on';
}
如果问题仍然存在,请提供更多具体信息,如Nginx配置片段和实际观察到的重定向行为,我可以给出更针对性的建议。