Perl Catalyst перенаправление с www на не www

У меня есть хостинговая платформа, на которой размещаются веб-сайты нескольких клиентов. Это приложение Catalyst, сбалансированное по нагрузке nginx. Я хотел бы, чтобы каждый клиент имел возможность выбирать, хочет ли он, чтобы его домен имел www перед ним или не www перед ним, а затем я хотел бы иметь возможность перенаправить соответствующим образом. Мой вопрос: лучше всего обрабатывать что-то подобное на уровне nginx или на уровне Catalyst? Обычно простое перенаправление с www на non-www будет обрабатываться на уровне балансировщика нагрузки, но я думаю, что, поскольку способ перенаправления зависит от домена, может быть, имеет смысл обрабатывать перенаправления на уровне Catalyst? Если да, то как лучше всего обработать перенаправление с www на non-www (или наоборот) в Catalyst? Или, если вы думаете, что nginx будет лучше, как лучше всего справиться с этим, используя это? Спасибо!


person srchulo    schedule 24.05.2013    source источник
comment
О каком количестве доменов здесь идет речь? Есть ли vhost для каждого домена?   -  person innaM    schedule 25.05.2013
comment
@innaM сейчас 100 доменов. И будет больше. Для каждого нет виртуального хоста, я пытался избежать этого, поэтому я мог просто указать домены на сервере nginx и заставить его работать без необходимости каждый раз возиться с конфигурацией. В настоящее время у меня есть один серверный блок, который передает все домены серверам приложений Catalyst. Как вы думаете, лучше всего было бы просто иметь блок сервера для каждого домена? Это было бы много копирования и вставки!   -  person srchulo    schedule 25.05.2013
comment
Я думал не о копировании и вставке, а об автоматизации процесса. Ведь вы же perl-программист :-) Но мне сложно сказать, возможен ли такой вариант в вашей ситуации.   -  person innaM    schedule 26.05.2013
comment
@innaM, ну, это правда :) Я мог бы автоматизировать это с помощью perl, думаю, мне просто не нравился тот факт, что мне приходилось перезапускать nginx каждый раз, когда я добавлял новый домен в систему, чтобы файл конфигурации мог действовать , но, возможно, это не так важно, как я думал. Возможно, это лучший вариант.   -  person srchulo    schedule 26.05.2013


Ответы (2)


Вы можете сделать это с DNS клиента. Например, если вы сделаете www.domain.com псевдонимом CNAME для domain.com и перепишете www.domain.com на domain.com с помощью nginx. Я бы подумал, что это будет самый простой подход. Это как-то смущает Catalyst?

Также обратите внимание, что использование псевдонимов CNAME таким образом означает, что вы должны быть осторожны с SSL-сертификатами, которые вы можете использовать для HTTPS.

person G. Cito    schedule 24.05.2013
comment
но если я перепишу www.domain.com на domain.com с помощью nginx, как я узнаю, какие домены нужно переписать, если у меня есть 20 разных доменов, входящих в nginx? Например, domaina.com необходимо перенаправить на www.domain.com, а domainb.com необходимо перенаправить на www.domainb.com. Возможно, я неправильно понимаю ваше решение, но разве мне не придется вручную помещать это в файл конфигурации для nginx для каждого уникального домена? - person srchulo; 24.05.2013
comment
Поскольку это произойдет на уровне DNS, сама по себе не будет никакой перезаписи. Требуется ли Catalyst один канонический домен в запросе? Я также использую обратные прокси-серверы, чтобы изолировать меня от проблем, с которыми вы сталкиваетесь. - person G. Cito; 30.05.2013

Веб-серверы, такие как nginx, очень хорошо подходят для простого перенаправления URL-адресов. С nginx вы можете сделать перенаправление следующим образом:

server {
        listen       0.0.0.0:80;
        server_name  *.mydomain.com;

        rewrite ^(.*) http://mydomain$1 permanent;
}
person Julien    schedule 24.05.2013
comment
Я хотел бы иметь возможность перенаправлять с www на без www или наоборот для каждого отдельного домена. То, что у вас здесь, означает, что мне придется определить конфигурацию сервера для каждого домена, который я хочу поддерживать. Как только у меня будет приличное количество доменов для поддержки, будет очень сложно добавлять эту директиву каждый раз. - person srchulo; 25.05.2013