我有以下http配置:
server {
listen 80;
server_name example.com;
# Necessary for Let's Encrypt Domain Name ownership validation
location /.well-known/acme-challenge/ {
root /home/vagrant/.well-known/acme-challenge/;
}
return 301 https://$host$request_uri;
}
我希望http://example.com/.well-known/acme-challenge/filename
提供/home/vagrant/.well-known/acme-challenge/filename
,而其他每个http请求都应重定向到https。
我认为Nginx将按顺序处理规则,如果匹配,则使用它,否则继续。但显然不是。我怎样才能实现我的目标?
答案 0 :(得分:16)
您应该将重定向移到" /"块:
location / {
return 301 https://$host$request_uri;
}
他们按顺序处理,但你的在之外的任何位置块,因此可能优先。
答案 1 :(得分:4)
根据nginx,将root xxx
放入位置区块是pitfall。
经过一番努力,这是我的工作配置:
server {
listen 80;
server_name example.com;
root /vagrant/www/current/public;
# Necessary for Let's Encrypt Domain Name ownership validation
location /.well-known/acme-challenge/ {
try_files $uri /dev/null =404;
}
location / {
return 301 https://$host$request_uri;
}
}