停止 nginx 到 30(2|1) 重定向到 /.well-known 位置

停止 nginx 到 30(2|1) 重定向到 /.well-known 位置

我正在为两个不同的域名设置 letsencrypt:example.be 和 example.com

我已将 Nginx 配置为将所有 example.com/* 请求重定向到 example.be/de/*

// Block 1
server {
    listen 80;
    server_name .example.com;
    return 302 http://example.be/de$request_uri;
}

// Block 2
server {
    listen 80;
    server_name www.example.be;
    return 302 http://example.be$request_uri;
}

Block 3
server {
    listen 80;
    server_name example.be;

    // server config
}

最终一切都应该落在第 3 块上。除了 letsencrypt 发出的 .well-known 请求.example.com 302 是临时存在的;一切正常后,它们将转到 301。

因此我想到在第一个服务器块中“捕获”该 uri。

// rewrite of Block 1
server {
   listen 80;
   server_name .example.com;

   location ^~ /.well-known/ {
     root        /path/to/public/folder/;
     try_files   $uri =404;
   }

  return 302 http://example.be/de$request_uri;
}

请求http://example.com/.well-known/test.html导致重定向到http://example.be/de/.well-known/test.html

如果我删除返回语句,test.html则会显示该页面。

关于如何捕获针对 .well-known 目录的此请求,有什么指示吗?

答案1

^~我不明白你为什么在你的 中使用location。这没有必要。尝试将其删除。

我的工作 certbot 配置是:

server {
        server_name www.yes-www.org yes-www.org www.yes-www.com yes-www.com;

        listen [::]:80;
        listen 80;

        location /.well-known/acme-challenge/ {
            root /var/www;
            try_files $uri =404;
        }

        access_log off;

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

如果这不起作用,请尝试从您的server块中删除现有但您可能尚未在问题中发布的所有内容。

相关内容