Ubuntu 16.04下Nginx 1.20.1配置oldsite到newsite的重定向问题
Nginx域名重定向配置方案
需求背景
- 运行环境:Ubuntu 16.04 + Nginx 1.20.1,多站点托管
- 原有站点域名:
oldsite.example.com - 新建站点域名:
newsite.example.com,已完成DNS解析配置,持有独立SSL证书,需同时支持HTTP/HTTPS访问 - 需求:将
oldsite.example.com的所有访问流量永久重定向到新域名对应路径
一、旧域名(oldsite.example.com)配置修改
原有旧域名配置需要替换为如下内容,覆盖原有80端口、443端口的server块:
# 旧域名HTTP请求重定向到新域名HTTPS server { server_name oldsite.example.com; listen 80; return 301 https://newsite.example.com$request_uri; } # 旧域名HTTPS请求重定向到新域名HTTPS server { listen 443 ssl; server_name oldsite.example.com; # 此处填写旧域名原有的SSL证书配置(需保留,否则HTTPS访问旧域名会报证书错误) ssl_certificate /path/to/oldsite/fullchain.pem; ssl_certificate_key /path/to/oldsite/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; add_header Content-Security-Policy upgrade-insecure-requests; return 301 https://newsite.example.com$request_uri; }
注意:必须保留旧域名的HTTPS证书配置,否则用户直接访问
https://oldsite.example.com时会触发证书错误,无法完成重定向。
二、新域名(newsite.example.com)配置
新增如下配置块,确保新域名同时支持HTTP和HTTPS访问:
# 新域名HTTP请求处理 server { server_name newsite.example.com; listen 80; # 若无需强制HTTPS,可删除下方return行,直接填写站点root、index等配置 return 301 https://newsite.example.com$request_uri; } # 新域名HTTPS站点配置 server { listen 443 ssl; server_name newsite.example.com; # 新站点独立SSL证书配置 ssl_certificate /path/to/newsite/fullchain.pem; ssl_certificate_key /path/to/newsite/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; add_header Content-Security-Policy upgrade-insecure-requests; # 下方填写新站点实际配置,示例如下: root /var/www/newsite; index index.html index.htm index.php; # 其他站点规则(伪静态、反向代理等按实际需求添加) }
三、配置生效步骤
- 执行
nginx -t校验配置文件语法是否正确,返回syntax is ok、test is successful说明配置无误 - 执行
systemctl reload nginx重载Nginx配置,使规则生效 - 分别访问
http://oldsite.example.com、https://oldsite.example.com、http://newsite.example.com、https://newsite.example.com验证重定向和站点访问是否正常
内容的提问来源于stack exchange,提问作者mks
相关产品推荐
相关产品推荐

