У меня есть хостинговая платформа, на которой размещаются веб-сайты нескольких клиентов. Это приложение Catalyst, сбалансированное по нагрузке nginx. Я хотел бы, чтобы каждый клиент имел возможность выбирать, хочет ли он, чтобы его домен имел www
перед ним или не www
перед ним, а затем я хотел бы иметь возможность перенаправить соответствующим образом. Мой вопрос: лучше всего обрабатывать что-то подобное на уровне nginx
или на уровне Catalyst
? Обычно простое перенаправление с www
на non-www
будет обрабатываться на уровне балансировщика нагрузки, но я думаю, что, поскольку способ перенаправления зависит от домена, может быть, имеет смысл обрабатывать перенаправления на уровне Catalyst
? Если да, то как лучше всего обработать перенаправление с www
на non-www
(или наоборот) в Catalyst
? Или, если вы думаете, что nginx
будет лучше, как лучше всего справиться с этим, используя это? Спасибо!
Perl Catalyst перенаправление с www на не www
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
но если я перепишу www.domain.com на domain.com с помощью nginx, как я узнаю, какие домены нужно переписать, если у меня есть 20 разных доменов, входящих в nginx? Например, domaina.com необходимо перенаправить на www.domain.com, а domainb.com необходимо перенаправить на www.domainb.com. Возможно, я неправильно понимаю ваше решение, но разве мне не придется вручную помещать это в файл конфигурации для nginx для каждого уникального домена?
- person srchulo; 24.05.2013
Поскольку это произойдет на уровне 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
Я хотел бы иметь возможность перенаправлять с www на без www или наоборот для каждого отдельного домена. То, что у вас здесь, означает, что мне придется определить конфигурацию сервера для каждого домена, который я хочу поддерживать. Как только у меня будет приличное количество доменов для поддержки, будет очень сложно добавлять эту директиву каждый раз.
- person srchulo; 25.05.2013