Как на NGINX сделать «http to https» и «www to non-www» сразу для пары доменов?
А если так попробовать:server {
    listen              80;
    server_name "~^(www\.)?(.*)$" ;
    return 301 https://$2$request_uri ;
}
server {
    listen              443 ssl;
    server_name "~^www\.(.*)$" ;
    return 301 https://$1$request_uri ;
}
server {
    listen              443 ssl;
    server_name domain.ru domain.com;
    # основная секция
}
Для особых извращенцев:server {
    listen              80;
    listen              443 ssl;
    server_name server_name "~^(www\.)?(.*)$";
	if($scheme = https) {
		if($1 = www) {
			return 301 http://$2$request_uri;
	    }
    }
	if($scheme = http) {
		return 301 http://$2$request_uri;
	}
    # основная секция
}
По-хорошему, регулярок не должно быть. Если это два разных сайта, то лучше разделить конфиги, если это зеркало и основной, то в return прописать основной и убрать регулярки.server {
    listen              80;
    server_name www.domain.com domain.com;
    return 301 https://domain.com$request_uri ;
}
server {
    listen              80;
    server_name www.domain.ru domain.ru;
    return 301 https://domain.ru$request_uri ;
}
server {
    listen              443 ssl;
    server_name www.domain.ru;
    return 301 https://domain.ru$request_uri ;
}
server {
    listen              443 ssl;
    server_name www.domain.com;
    return 301 https://domain.com$request_uri ;
}
server {
    listen              443 ssl;
    server_name domain.ru domain.com;
    # основная секция
}
@kompi
domain.com - это англоязычная версия сайта
www.domain.com - это ALIAS англоязычной версии
domain.ru - это русскоязычная версия сайта
www.domain.ru - это ALIAS русскоязычной версии
@merryjane по идеи два раза через реврайт проходить не будет.
если клиент зашел на www.domain.com или на domain.com
то его по любому редиректит на https://domain.com
если он вдруг своими пытливыми ручками наберет в браузере https://www.domain.com то сработает второе правильно и клиент полетит на https://domain.com