如何在Nginx中替换HTTPS请求域名(login.windows.net转login.microsoftonline.com)
解决Nginx替换HTTPS请求域名的问题
问题根源
你的Nginx配置里的server块没有指定server_name login.windows.net;,当你请求https://login.windows.net/...时,Nginx不会将该请求分配到这个server块处理(默认default_server不匹配目标域名),导致你的rewrite和proxy规则完全未生效。
方案1:301/302重定向(客户端跳转)
这种方式会让客户端收到重定向响应,直接访问新域名,适合需要让用户看到地址变化的场景。
修改后的完整server配置:
server { listen 443 ssl http2; # 必须指定该域名,匹配请求的login.windows.net server_name login.windows.net; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; access_log /var/log/nginx/reverse-access.log; error_log /var/log/nginx/reverse-error.log; # 匹配所有路径,替换域名后跳转 location / { rewrite ^(.*)$ https://login.microsoftonline.com$1 permanent; # permanent为301永久重定向,用redirect则是302临时重定向 } } # 同步处理HTTP请求,强制跳转至HTTPS server { listen 80; server_name login.windows.net; return 301 https://$server_name$request_uri; }
方案2:反向代理(客户端无感知)
如果不想让客户端看到域名变化,可使用反向代理:Nginx转发请求到新域名,再将结果返回给客户端。
配置如下:
server { listen 443 ssl http2; server_name login.windows.net; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; access_log /var/log/nginx/reverse-access.log; error_log /var/log/nginx/reverse-error.log; location / { # 转发请求到目标域名 proxy_pass https://login.microsoftonline.com; # 传递必要的请求头 proxy_set_header Host login.microsoftonline.com; 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; } } # HTTP转HTTPS server { listen 80; server_name login.windows.net; return 301 https://$server_name$request_uri; }
配置验证与重启
- 先检查配置合法性:
sudo nginx -t
- 配置无误后重启Nginx:
sudo systemctl restart nginx
测试方法
- 重定向方案测试:
curl -v https://login.windows.net/fe3f3811-3e28-4a4e-a122-3e1135c01bf2/v2.0/.well-known/openid-configuration
可看到301响应,Location字段指向login.microsoftonline.com的对应地址。
- 代理方案测试:
curl -v https://login.windows.net/fe3f3811-3e28-4a4e-a122-3e1135c01bf2/v2.0/.well-known/openid-configuration
客户端地址仍为login.windows.net,但返回内容实际来自login.microsoftonline.com。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

