AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 836504
Accepted
Saras Arya
Saras Arya
Asked: 2017-03-07 01:31:21 +0800 CST2017-03-07 01:31:21 +0800 CST 2017-03-07 01:31:21 +0800 CST

Nginx 中的行顺序重要吗?

  • 772

我有一个这样的服务器文件

server {
listen 80;
server_name subdomain.example.com;

return 301 https://$server_name$request_uri;

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

现在当我尝试sudo letsencrypt renew. 它抛出并错误说找不到.well-known/acme-challenge。但是,一旦我发表评论,该return 301行就重新启动了服务器并且它起作用了。

现在我想重新测试它,将位置放在首位,而不是评论 return 301 语句,但它说certificate not due for renewal。所以问题是读取文件的顺序,这有关系吗?并且不会因为这个原因自动更新,对于我来说,更新的人如何处理这种情况?

nginx lets-encrypt ssl-certificate-renewal
  • 3 3 个回答
  • 11361 Views

3 个回答

  • Voted
  1. Best Answer
    iwaseatenbyagrue
    2017-03-07T02:17:35+08:002017-03-07T02:17:35+08:00

    在这种情况下,与其说是排序(关于如何评估位置和正则表达式的一个很好的解释可以在这里找到:https ://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-位置块选择算法)。

    对于像位置块这样的东西,简短的版本是最佳匹配获胜,而不是第一场比赛。

    但是,在您的情况下,订单很重要,因为您使用return. 根据https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return:

    停止处理并将指定的代码返回给客户端。非标准代码 444 关闭连接而不发送响应头。

    这里的关键是 areturn立即停止处理/评估,所以发生的事情是 nginx 没有在下面查看任何内容return。

    因此,您只需将该return子句移到您的位置块下方。

    至于测试,我会尝试添加--test-cert到您的命令行(请参阅https://certbot.eff.org/docs/using.html#certbot-command-line-options)。

    这应该避免您在尝试使用他们的生产服务器时遇到的“问题”,该服务器报告您拥有有效的证书并且现在不需要新证书。

    • 9
  2. Tero Kilkanen
    2017-03-07T03:35:42+08:002017-03-07T03:35:42+08:00

    您应该将return指令包含在一个location块中,然后使用正常的location块匹配规则:

    server {
        listen 80;
        server_name subdomain.example.com;
    
        location / {
            return 301 https://$server_name$request_uri;
        }
    
        location /.well-known/acme-challenge {
            root /var/www/letsencrypt;
        }
    }
    
    • 2
  3. user479089
    2018-07-27T02:58:39+08:002018-07-27T02:58:39+08:00

    answering for the idea of line orders in nginx config files

    是的,它确实并且完全取决于 Nginx 支持的不同上下文中指定的不同指令。通俗的说,nginx 有一堆事情要做,并分别应用某些算法best match。

    Nginx 用于在上下文selection algorithm中做出决策;server主要基于两个指令,即。listen和server_name。

    可以定义多个位置上下文,每个位置用于处理某种类型的客户端请求,并且通过将位置定义与客户端请求匹配来选择每个位置selection algorithm。

    默认情况下,upstream上下文使用round-robin来确定将请求交给哪个特定服务器。

    • 0

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve