从 nginx https 重定向中排除 Let's Encrypt http 请求

从 nginx https 重定向中排除 Let's Encrypt http 请求

我已经在这里找到了一些关于这个主题的问答,但没有一个能帮助我解决问题。我今天刚刚安装了一个 debian 8 服务器,对我的域的每个请求都重定向到 https。现在我正在尝试为子域创建一个新的 SSL 证书,但由于 certbot 使用 http 访问 .well-known 目录,因此失败了。由于此请求被重定向到 https,因此它不起作用。我的想法是将这个隐藏目录从重定向中排除。

为了测试,我将一段简单的文本放入 .well-known/acme-challenge/ 目录中。每次我对此文件发出请求时,我仍然会被重定向。这是我当前的 nginx 配置:

server {
    listen 80 default_server;
    #listen [::]:80 default_server;
    server_name test.de www.test.de;

    root /var/www/html;

    location /.well-known/acme-challenge {
        root /var/www/html;
        allow all;
    }
    location / {
        return 301 https://test.de$request_uri;
    }
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    include snippets/ssl-test.de.conf;
    include snippets/ssl-params.conf;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

#    location ~ /.well-known {
#        allow all;
#    }
}

有人有什么想法吗?

答案1

当我做类似的事情时,我需要添加以下内容:

location /.well-known {
    root /var/www/html;
    allow all;
    try_files $uri =404;
}

location / {
    return 301 https://example.com$uri;
}

如果没有try_files,nginx 就不知道该做什么( 没有 的默认值try_files)。

此外,在测试时,您需要使用curlwget,这并不关心网站的 HSTS 设置。

相关内容