【问题标题】:NGINX redirect to HTTPS, while still maintaining HTTP route for Let's Encrypt ChallengesNGINX 重定向到 HTTPS,同时仍然为 Let's Encrypt Challenges 维护 HTTP 路由
【发布时间】:2019-11-05 11:20:48
【问题描述】:

我可以成功地将流量从 80 端口路由到 HTTPS,也可以成功获取 Let's Encrypt SSL 证书。但是当我想要both时,我的问题就开始了。

每当我的证书到期时,我都必须调整配置以通过 Let's Encrypt 挑战。这不好。

这是成功通过挑战的配置

server {
    listen      80;
    listen [::]:80;
    server_name example.com *.example.com;

    #for certbot challenges (renewal process)
    location ~ /.well-known/acme-challenge {
        allow all;
        root /data/letsencrypt;
    }

    root /data/letsencrypt;
    index index.html;
}

这是一个将流量路由到 HTTPS

的配置
server {
    listen      80 default_server;
    listen [::]:80 default_server;
    server_name example.com *.example.com;

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

    return      444;
}

每当我开始尝试将它们结合起来时,HTTPS 的路由似乎就占了上风,挑战就被打破了。

注意我在 Docker 环境中使用 Nginx 作为反向代理也很有用,因此我从 HTTP 路由到 HTTPS,并从那里反向代理其他服务。

【问题讨论】:

标签: nginx ssl-certificate lets-encrypt nginx-reverse-proxy nginx-config


【解决方案1】:
server{

    listen      80;
    listen [::]:80;
    server_name example.com *.example.com;

    #for certbot challenges (renewal process)
    location ~ ^/.well-known/acme-challenge {
        allow all;
        root /data/letsencrypt;
    }

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

应该做的伎俩。

如果端口 80 并以 /.well-known/acme-challenge 开头,则进入挑战。

其他:301 到 https。

检查的优先级首先是正则表达式(位置〜^blablabla),然后是一般(位置/{)

如果不起作用,您的互动是什么?

【讨论】:

  • 您可以在没有正则表达式的情况下做同样的事情 - 只需使用常规位置块。它们按照最长到最短匹配的顺序进行评估。
  • 是的,但我更喜欢保护镜头,因为我不知道他的配置是什么。如果我给他一个正则表达式,其他正则表达式 90% 不会干扰。常规位置块的优先级较低。因此,如果他有其他可能以某种方式匹配的正则表达式......像这样它会起作用。当然,您的回答在我的回答中肯定有效。
  • @flaixman 我的证书刚刚过期,所以我有机会对此进行测试,效果很好。谢谢!
猜你喜欢
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 2017-08-10
  • 2020-06-01
  • 1970-01-01
  • 2011-03-29
  • 2018-01-05
相关资源
最近更新 更多