将所有请求重定向到HTTPS(一个子目录除外)


13

我正在尝试从nginx Web服务器上的自签名证书迁移到“让我们加密”证书。

目前,我将所有请求重定向http/80https/443,使用我之前创建的自签名证书。

现在-根据我的理解,让我们加密向端口80发出请求(因为我正在使用的webroot选项certbot)。这些请求将被重定向,从而导致证书生成失败。

我尝试通过以下服务器块来实现此目的,监听端口80:

server {
        listen  80;     
        server_name     sub.domain.tld;
        server_tokens   off;


        location /.well-known {
                root /var/www/letsencrypt;
        }

        location / {
                return 301 https://$host$request_uri;
        }
}

但是无论如何/.well-known都将请求重定向到https/443

我如何将所有请求从重定向http/80https/443,除了以外的请求/.well-known/


1
据我所知,中webrootcertbot选项需要普通HTTP。
SaAtomic

2
您如何检查重定向?我猜您的浏览器尊重您域的HSTS标头,但让我们加密的bot会忽略它。请与wget/curl
阿列克谢十大

Answers:


17

尝试这个:

server {
    listen  80;     
    server_name     sub.domain.tld;
    server_tokens   off;

    root /var/www/letsencrypt;

    location /.well-known {
        try_files $uri $uri/ =404;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

由于try_files您的虚拟服务器中没有任何条目,因此它不知道该如何处理传入的请求/.well-known


2
locationtry_files只是从root目录发送文件。
阿列克谢10年

1
很奇怪,我有完全一样的情况,我不使用try_files,它对我来说很好用。实际上,我有与问题中所述完全相同的配置。唯一的区别是location /.well-known/而不是location /.well-known(请注意结尾的斜杠)。所以,也许这就是问题所在?
奥莱·凯尔德曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.