Раскройте скобки для более ясного подхода.
Вместо одного слушателя 443 создайте 2. То же самое с 80 слушателями.
Как будто вам гораздо легче узнать, что делаетчто, одна конфигурация для каждой пары хоста и схемы.
server {
listen 80;
listen [::]:80;
server_name www.example.com; #this will only listen to http://www.example.com
location / {
return 301 https://example.com$request_uri; #and will upgrade to https
}
#we don't want that many redirects, so this will go directly to example.com
}
server {
listen 80;
listen [::]:80;
server_name example.com; #this will only listen to http://example.com
location / {
return 301 https://$host$request_uri; #and will upgrade to https
}
}
server {
server_name www.example.com;
location / {
return 301 https://example.com$request_uri #this redirects to non-www
}
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server{
#same server configuration as your first server bracket, only accepting https://example.com and not www.
}
Я вижу, что вы отправляете прибывающее соединение на Drupal, так что подумайте, что у Drupal есть переменная $ base_url, которую любой перенаправляющий объект делаетдля этого хоста, поэтому, если он настроен на www.example.com, он не будет иметь значения для nginx conf, так как сам Drupal также может делать перенаправления.
Надеюсь, это помогло, прокомментируйте любой вопрос.