首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx将nonWWW重定向到WWW / SSL certbot

Nginx将nonWWW重定向到WWW / SSL certbot
EN

Server Fault用户
提问于 2019-01-17 11:17:43
回答 2查看 616关注 0票数 2

一段时间以来,我一直试图弄清楚如何将请求从非WWW域重定向到WWW域。这是HTTPS.conf文件:

代码语言:javascript
复制
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时遇到的错误。

代码语言:javascript
复制
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文件。

代码语言:javascript
复制
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重定向没有问题。

EN

回答 2

Server Fault用户

发布于 2019-01-17 15:13:30

这是答案吗?我已经在我自己的服务器上使用过几次了。https://stackoverflow.com/questions/10294481/how-to-redirect-a-url-in-nginx

票数 0
EN

Server Fault用户

发布于 2019-01-17 16:14:39

我发现答案比我最初想象的要复杂一些。主要的问题是我同时拥有HTTP.conf和HTTPS.conf。我删除了HTTPS.conf,因为所有的https请求都是在http.conf中处理的。我移走了重定向。我编辑了http.conf,最后得到了以下内容:

代码语言:javascript
复制
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 (即使是匿名),但它的工作重定向检查工具和其他设备。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/949513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档