nginx,redirecthttp到https不按预期方式工作

我的意图是将所有请求redirecthttps://前缀URL和裸地域以及www.*等效项。 acme-challengeurl将被排除在外。

我试着用下面的configuration,并从赤裸裸的域获得正确的redirect,但是当我访问www. 前缀一,我提供了默认的服务器,没有redirect到端口443服务器,并从https服务器根服务。

为什么是这样?

 server { listen 80; listen [::]:80; server_name example.org www.example.org; location '/.well-known/acme-challenge/' { root /var/www/challenges; } location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; listen [::]:443 ssl; server_name example.org www.example.org; ssl_certificate /etc/nginx/ssl/example.org.pem; ssl_certificate_key /etc/nginx/ssl/example.org.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA; ssl_session_cache shared:SSL:50m; ssl_dhparam /etc/nginx/ssl/dhparams.pem; ssl_prefer_server_ciphers on; root /var/www/example.org/; }