- 强制 HTTPS 跳转:将所有 HTTP 请求自动跳转到 HTTPS,这是目前最基本的安全要求。
- 强制 WWW 跳转:将不带
www的域名(如yourdomain.com)跳转到带www的域名(如www.yourdomain.com)。 - 强制非 WWW 跳转:与上面相反,将带
www的域名跳转到不带www的域名。 - HTTP 跳转至 HTTPS 并同时处理 WWW:这是最完整和推荐的配置,兼顾了安全和域名统一。
下面我将分别给出这几种情况的 Nginx 配置代码,并提供详细的解释。

重要前提:配置文件位置
在修改 Nginx 配置之前,请先找到你的网站配置文件,它通常位于:
/etc/nginx/sites-available/目录下- 或者
/usr/local/nginx/conf/vhost/目录下(如果你是编译安装的 Nginx)
你的网站配置文件可能类似于 yourdomain.com.conf 或 default,使用 sudo vim 或 nano 等命令编辑它。
# 示例:编辑你的网站配置文件 sudo vim /etc/nginx/sites-available/yourdomain.com.conf
强制 HTTP 跳转至 HTTPS(最基础)
这是所有网站都应该做的第一步,确保所有流量都通过加密的 HTTPS 连接。
Nginx 配置代码:

# 在你的 server 块内部添加以下代码
# 这个 server 块专门处理 HTTP 请求,并将其重定向到 HTTPS
server {
listen 80;
server_name yourdomain.com www.yourdomain.com; # 替换成你的域名
# 将所有 HTTP 请求永久重定向到 HTTPS
# 301 是永久重定向,对 SEO 有利
return 301 https://$host$request_uri;
}
# 下面是正常的 HTTPS server 块
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
# SSL 证书配置(必须)
ssl_certificate /path/to/your/fullchain.pem; # 替换成你的证书路径
ssl_certificate_key /path/to/your/privkey.pem; # 替换成你的私钥路径
# ... 其他配置,如网站根目录、index 文件等 ...
root /var/www/yourdomain.com;
index index.php index.html index.htm;
# ... 其他织梦相关配置 ...
}
代码解释:
listen 80;:监听 80 端口,即 HTTP 请求。server_name ...;:指定需要处理的域名。return 301 ...;:执行一个永久重定向(HTTP 301状态码)。https://$host$request_uri;:$host:变量,表示请求的域名主机名(yourdomain.com或www.yourdomain.com),它会保留原始域名,不会自动添加www。$request_uri:变量,表示完整的请求路径和参数(/about.html?id=1)。- 这行代码的意思是:“将所有访问
http://yourdomain.com/anything的请求,永久跳转到https://yourdomain.com/anything”。
强制 WWW 跳转(HTTP 和 HTTPS 都处理)
如果你希望用户只能通过 www.yourdomain.com 访问你的网站,可以使用这个配置。
Nginx 配置代码:
# 这个 server 块处理不带 www 的 HTTP 请求
server {
listen 80;
server_name yourdomain.com; # 只匹配不带 www 的域名
return 301 https://www.$host$request_uri;
}
# 这个 server 块处理不带 www 的 HTTPS 请求
server {
listen 443 ssl http2;
server_name yourdomain.com; # 只匹配不带 www 的域名
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;
return 301 https://www.$host$request_uri;
}
# 这是主 server 块,处理所有带 www 的请求
server {
listen 443 ssl http2;
server_name www.yourdomain.com; # 只匹配带 www 的域名
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;
# ... 你的网站主配置 ...
root /var/www/yourdomain.com;
index index.php index.html index.htm;
# ... 其他织梦相关配置 ...
}
代码解释:

- 我们创建了三个
server块来处理所有可能性。 - 第一个块:
http://yourdomain.com->https://www.yourdomain.com。 - 第二个块:
https://yourdomain.com->https://www.yourdomain.com。 - 第三个块:真正的网站配置,只处理
https://www.yourdomain.com的请求。
强制非 WWW 跳转(HTTP 和 HTTPS 都处理)
与场景二相反,如果你希望用户只能通过 yourdomain.com 访问你的网站。
Nginx 配置代码:
# 这个 server 块处理带 www 的 HTTP 请求
server {
listen 80;
server_name www.yourdomain.com; # 只匹配带 www 的域名
return 301 https://$host$request_uri;
}
# 这个 server 块处理带 www 的 HTTPS 请求
server {
listen 443 ssl http2;
server_name www.yourdomain.com; # 只匹配带 www 的域名
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;
return 301 https://$host$request_uri;
}
# 这是主 server 块,处理所有不带 www 的请求
server {
listen 443 ssl http2;
server_name yourdomain.com; # 只匹配不带 www 的域名
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;
# ... 你的网站主配置 ...
root /var/www/yourdomain.com;
index index.php index.html index.htm;
# ... 其他织梦相关配置 ...
}
代码解释:
- 第一个块:
http://www.yourdomain.com->https://yourdomain.com。 - 第二个块:
https://www.yourdomain.com->https://yourdomain.com。 - 第三个块:真正的网站配置,只处理
https://yourdomain.com的请求。
完整推荐配置(HTTP -> HTTPS + 非 WWW -> WWW)
这是目前最主流、最推荐的配置,它同时解决了安全和域名统一的问题。
Nginx 配置代码:
# 1. 处理所有 HTTP 请求,并重定向到带 www 的 HTTPS
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://www.$host$request_uri;
}
# 2. 处理所有 HTTPS 请求,并将非 www 域名重定向到 www
server {
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;
# 将非 www 的 HTTPS 请求重定向到 www
return 301 https://www.$host$request_uri;
}
# 3. 主服务器,处理所有带 www 的 HTTPS 请求
server {
listen 443 ssl http2;
server_name www.yourdomain.com;
# SSL 优化配置(推荐)
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';
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 你的网站根目录和首页
root /var/www/yourdomain.com;
index index.php index.html index.htm;
# 织梦 CMS 伪静态规则(非常重要!)
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# 处理织梦后台管理目录的伪静态(如果你的后台目录不是默认的 dede)
# location /dede/ {
# try_files $uri $uri/ /dede/index.php?$query_string;
# }
# 禁止访问 .htaccess 文件(如果服务器是 Apache 和 Nginx 共存)
location ~ /\.ht {
deny all;
}
# PHP 配置
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 根据你的 PHP 版本修改
}
# 其他配置...
}
织梦(DedeCMS)的额外重要配置:伪静态
除了域名跳转,为了让织梦的 URL 伪静态(如 /a/2025/1234.html)正常工作,你必须在 Nginx 配置中添加正确的伪静态规则,上面的“完整推荐配置”中已经包含了它。
核心伪静态规则:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
作用: 当 Nginx 收到一个请求时,它会按顺序尝试:
try_files $uri:直接访问请求的文件。try_files $uri/:如果请求的是一个目录,尝试访问目录下的index文件。/index.php?$query_string:如果以上都失败(例如访问了一个不存在的静态 HTML 文件),就将请求全部转发给index.php处理,并带上原始的查询字符串,这正是织梦伪静态的核心原理。
如何应用和测试配置
-
保存文件:保存你的 Nginx 配置文件。
-
检查语法:在修改配置后,务必先检查语法是否正确,避免 Nginx 启动失败。
sudo nginx -t
如果显示
syntax is ok和test is successful,则说明语法正确。 -
重载 Nginx:如果语法正确,平滑地重载 Nginx 以应用新配置,这不会中断现有的连接。
sudo systemctl reload nginx # 或者 sudo nginx -s reload
-
测试:使用浏览器访问你的网站(
http://yourdomain.com,http://www.yourdomain.com等),观察地址栏是否按预期跳转,你也可以使用curl命令来检查 HTTP 状态码。# 检查 HTTP 是否跳转到 HTTPS curl -I http://yourdomain.com # 检查是否跳转到带 www 的域名 curl -I http://yourdomain.com
通过以上步骤,你就可以为你的织梦网站配置好 Nginx 的跳转规则了。
