mga*_*lgs 4 nginx lets-encrypt
我有一个nginx
符合以下要求的网站:
为了满足(1)我的配置中有一个小的 http->https 重定向nginx
。为了满足 (2) 我需要修改上述配置,以便我可以使用 webroot Let's Encrypt 身份验证方法。
我试图找出满足这两个要求的最佳解决方案。我想出了以下方法,这很有效。
前:
server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)
后:
server {
listen 80;
server_name example.com;
location ~ /\.well-known\/acme-challenge {
root /usr/share/nginx/html;
allow all;
}
if ($request_uri !~ /\.well-known) {
return 301 https://example.com$request_uri;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我希望找到另一种方法。原因如下:
如果是邪恶的。在这种情况下可能不是什么大问题,因为这只是 http->https 重定向,应该是非常低的流量。
更重要的是,避免if
将更容易将 webroot 身份验证绑定到我后面运行的所有站点,nginx
因为我可以将该location
指令放入 a 中.conf
,然后我可以在我所有的 http->https 重定向块中随意包含。
在这个问题中,亚历克斯给出了一个使用裸return
语句的例子,但这对我不起作用(nginx -t
抱怨nginx: [emerg] invalid number of arguments in "return" directive in /etc/nginx/...
)。
有没有更好的方法来做到这一点?或者我上面的解决方案是否已经足够好?
您可以将 替换if
为正常位置:
server {
listen 80;
server_name example.com;
location /.well-known/acme-challenge {
root /usr/share/nginx/html;
allow all;
}
location / {
return 301 https://example.com$request_uri;
}
}
Run Code Online (Sandbox Code Playgroud)
原因:选择并记住具有最长匹配前缀的位置。
为了找到与给定请求匹配的位置,nginx 首先检查使用前缀字符串(前缀位置)定义的位置。其中,选择并记住匹配前缀最长的位置。然后按照它们在配置文件中出现的顺序检查正则表达式。正则表达式的搜索在第一次匹配时终止,并使用相应的配置。如果找不到与正则表达式的匹配项,则使用之前记住的前缀位置的配置。
来源:Nginx 文档
归档时间: |
|
查看次数: |
1430 次 |
最近记录: |