让我们使用SSLredirect在nginx上使用webroot进行encryption

我有一个网站与nginx与以下要求:

  1. redirect所有http – > https
  2. 零停机让我们encryption证书更新

为了满足(1)我有一个小的http-> httpsredirect在我的nginxconfiguration。 为了满足(2)我将需要修改所述的configuration,以便我可以使用Webroot让我们encryption身份validation方法。

我试图找出满足这两个要求的最佳解决scheme。 我已经拿出了以下,这是有效的。

之前:

 server { listen 80; server_name example.com; return 301 https://example.com$request_uri; } 

后:

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

但是,我希望找出另一种方法。 原因是:

  1. 如果是邪恶的 。 在这种情况下可能不会这么大,因为这只是http-> httpsredirect,应该是非常低的stream量。

  2. 更重要的是,避免使用if会更容易将webrootauthenticationlocking到所有在nginx后面运行的站点,因为我可以在.conf中插入location指令,然后我可以在我所有的小型http- > httpsredirect块。

在这个问题中 ,Alex给出了一个使用裸return语句的例子,但是这对我不起作用( nginx -tnginx: [emerg] invalid number of arguments in "return" directive in /etc/nginx/...抱怨nginx: [emerg] invalid number of arguments in "return" directive in /etc/nginx/... )。

有没有更好的方法来做到这一点? 或者,我的解决scheme以上是如此好?

  • nginx代理+ ssl + clr“400错误请求”错误
  • 根据客户端function指定SHA-1或SHA-2证书
  • nginxclosures了一些图片的连接
  • 处理反向代理configuration中的nginx错误
  • 重写一个子目录到nginx的根目录
  • 检测nginx中的Slashdot效果
  • One Solution collect form web for “让我们使用SSLredirect在nginx上使用webroot进行encryption”

    你可以用普通的位置来代替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; } } 

    原因:select并记住具有最长匹配前缀的位置。

    要查找匹配给定请求的位置,nginx首先检查使用前缀string(前缀位置)定义的位置。 其中,匹配前缀最长的位置被选中并记住。 然后按照它们在configuration文件中出现的顺序检查正则expression式。 正则expression式的search在第一次匹配时终止,并使用相应的configuration。 如果找不到正则expression式的匹配,则使用先前记住的前缀位置的configuration。

    来源: Nginx文档

    服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器.