一段时间以来,我一直试图弄清楚如何将请求从非WWW域重定向到WWW域。这是HTTPS.conf文件:
server {
server_name domain.com *.domain.com;
return 302 https://$host$request_uri;
}
server {
listen 443 ssl default_server;
server_name www.domain.com;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
}基于配置,它应该可以工作。因为所有的非WWW域都应该被重定向,但他们没有。我已经改变了301到302的测试目的。这些是我在运行nginx -t时遇到的错误。
nginx: [warn] conflicting server name "domain.com" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "domain.com" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "*.domain.com" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "www.domain.com" on 0.0.0.0:443, ignored这是管理证书的HTTP.conf文件。
server {
server_name www.domain.com domain.com;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # managed b$
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # managed$
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 default_server;
server_name www.domain.com domain.com;
return 404; # managed by Certbot
}我确信问题是由certbot生成的最后几行if。但是,如果我更改它们/从domain.com服务器块中删除port80,则以"SSL证书无效“结尾。可能是因为重定向。这里有太多的因素让我无法单独找到解决方案。我对http到https重定向没有问题。
发布于 2019-01-17 15:13:30
这是答案吗?我已经在我自己的服务器上使用过几次了。https://stackoverflow.com/questions/10294481/how-to-redirect-a-url-in-nginx
发布于 2019-01-17 16:14:39
我发现答案比我最初想象的要复杂一些。主要的问题是我同时拥有HTTP.conf和HTTPS.conf。我删除了HTTPS.conf,因为所有的https请求都是在http.conf中处理的。我移走了重定向。我编辑了http.conf,最后得到了以下内容:
server {
server_name domain.com www.domain.com;
return 301 https://www.$host$request_uri;
}
server {
server_name www.domain.com;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # managed b$
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # managed$
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = domain.com) {
return 301 https://www.$host$request_uri;
} # managed by Certbot
#listen 80 default_server;
#server_name www.domain.com domain.com;
#return 404; # managed by Certbot
}它似乎不工作在我的主要PC (即使是匿名),但它的工作重定向检查工具和其他设备。
https://serverfault.com/questions/949513
复制相似问题