Nginx:除了一个以外的所有重定向

时间:2016-04-08 16:15:01

标签: nginx

我有以下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将按顺序处理规则,如果匹配,则使用它,否则继续。但显然不是。我怎样才能实现我的目标?

2 个答案:

答案 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;
  }
}