перезапись поддоменов nginx

8

Еще один вопрос правил переписывания nginx

Как я могу сделать переписать с http://www.*.domain.comв http://*.domain.com?

заранее спасибо

- Деб

РЕДАКТИРОВАТЬ:

Извините, я не видел, чтобы текстовое форматирование убрало * из моего вопроса. Я исправил это сейчас. Что мне нужно сделать, это перейти с www.joe.domain.com на joe.domain.com, где Джо может быть любое слово.

дебютантка
источник

Ответы:

7

Каково значение дополнительного периода перед domain.com? Является ли целью удалить www из URL? Если это так, это должно сработать:

if ($host ~* www\.(.*)) {
  set $host_without_www $1;
  rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.com/foo'
}

Не забудьте: sudo /etc/init.d/nginx restartзагрузить его

Источник: NGINX Wiki

iainlbc
источник
Извините, я не видел, чтобы текстовое форматирование убрало * из моего вопроса. Что мне нужно сделать, это перейти с www.joe.domain.com на joe.domain.com, где Джо может быть любое слово. Так что вы правы, мне просто нужно убрать www.
Deb
12

Это что-то вроде хака.

Самый быстрый способ производительности будет

server {
  server_name www.domain.com;
  rewrite ^ http://domain.com$request_uri permanent;
}

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

Кроме того, вам не нужно перезагружать nginx - перезагрузка - это все, что требуется, и кто захочет иметь больше времени простоя, чем требуется?

Мартин Фьордвальд
источник
+1 имеет смысл ... ура
iainlbc
1
Это не хак. Nginx очень быстро просматривает имена серверов, так что это действительно самый быстрый подход.
Александр Азаров
1
@Alaz Это было в ответ на ответ, предоставленный iainlbc, я имел в виду, что условие if было взломом, а не поиск сервера, который я рекомендовал.
Мартин Фьордвальд
1

Решение Мартина Ф. все хорошо, пока у вас нет сотен доменов. Я, однако, предложил бы пойти другим путем - обслуживать приложение на www.joe.domain.com и перенаправлять с joe.domain.com. Уверен, что это в RFC.

Джастин Алан Райан
источник
Если у вас nginx обрабатывает столько доменов, то напишите скрипт для генерации конфигурации. Это довольно простой язык конфигурации, и вы действительно не хотите выполнять анализ регулярных выражений при каждой загрузке страницы на сервере с высоким трафиком.
Мартин Фьордвальд
В принципе, возможно, но вы это профилировали? У меня были очень загруженные сайты, использующие регулярные выражения для всех запросов. Это заботится. Кроме того, многие среды общего хостинга не имеют серьезных проблем с производительностью, но имеют проблемы с управлением. Оба решения могут хорошо работать в разных параметрах.
Джастин Алан Райан
Если у вас есть сотни доменов, используйте regexp в имя_сервера: stackoverflow.com/questions/2498712/nginx-subdomain-rewrite
Александр Азаров