LINUX.ORG.RU
решено ФорумAdmin

Nginx rewrite

 ,


0

1

Привет ЛОР. Прошу подсказать как можно реализовать такое.

Есть сайт с фронтендом nginx и php-fpm в качестве бэкенда. Сайт работает через защищенное соединение. Сделаны реврайты и теперь обращения со всех поддоменов, скажем site.domain.ru перенаправляет на https://domain.com.

Но при входе на поддомен https://site.domain.ru никуда не реврайтит, а хочется чтобы также было перенаправление на https://domain.ru

Как сделать?

Сейчас реврайт таков:

server_name domain.ru;
rewrite         ^ https://domain.ru? permanent;

Конфигурация nginx состоит из отдельных virtual host'ов, каждый из которых привязан к паре ip:port. Часто ip не указывается, и virtual host расположен на всех IP.

Твой rewrite не висит в воздухе, а указан в одном из virtual host'ов. Соответственно, и применяться он будет только к этому virtual host'у.

Ищи конфиг virtual host'а site.domain.ru, и в него добавляй rewrite

router ★★★★★ ()
Ответ на: комментарий от router

Отдельного конфига для виртхоста какого либо из поддоменов - нет. Создать? Перенаправление на https://domain.com ведь работает при заходе на site.domain.com, а не работает только если обращаться по https://site.domain.com. Почему тогда реврайт работает на http, но не работает на https?

Кстати

hostname -f
дает именно этот site.domain.com может в это проблема?
nginx 1.2.8

partyzan ★★★ ()
Ответ на: комментарий от partyzan

Почему тогда реврайт работает на http, но не работает на https?

Потому что на *:80 и *:443 у тебя расположено два разных virtual host'а. Ищи где у тебя задан server с включенным ssl.

router ★★★★★ ()
Ответ на: комментарий от router

По ходу надо читать. Никаких вирт хостов разных нету, в конфиге описан только один и при заходе на domain.com:80 и site.domain.com:80 редиректит на https://domain.com. В /etc/nginx/conf.d ничего нету.

Спасибо хоть на этом.

partyzan ★★★ ()
Ответ на: комментарий от partyzan

А где по-твоему задан server с включенным ssl? Ты же не думаешь что nginx каждый раз при запуске генерит новый рандомный сертификат ;)

egrep -v '^\s*(#|$)' /etc/nginx/ -R | grep -i 'ssl'
egrep -v '^\s*(#|$)' /etc/nginx/ -R | grep -i 'include'

примечание. Первый греп рекурсивно ищет в /etc/nginx, пропуская пустые строки и комментарии, второй - выбирает строки с ключевым словом.

В /etc/nginx/conf.d ничего нету.

Есть ещё файлы уровнем выше, /etc/nginx/

Конфиг у nginx только один - /etc/nginx/nginx.conf, но в нём можно прописать include, чем все и пользуются, вынося отдельные хосты в /etc/nginx/conf.d. Но никто не мешает включить конфиг из, например, /home/user/ или /tmp/megaxakep/

[router@vml-nginx ]$ ps auxw | grep nginx
root     19061  0.0  0.9 110968  9396 ?        Ss    2012   0:04 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf

З.Ы. на всякий случай проверь что висит на 443 порту ( sudo netstat -npl | grep 443 ), вдруг там не nginx :)

router ★★★★★ ()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от router

Все сделал. Теперь по любому протоколу и любому поддомену переходит на https://domain.ru

Просто разбил и дал детальное описание виртхостам с указанием портов и реврайтов

server {

ssl on;
...
listen 443 ssl;
rewrite....;
}
Было все в куче и не было четких правил реврайта, а когда добавил подробное поведение при обращении все заработало.

router, спасибо за помощь, натыкал меня в мои ошибки.

partyzan ★★★ ()
Последнее исправление: partyzan (всего исправлений: 1)
server_name .domain.ru;

обрати внимание не точку перед domain.ru.

beastie ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.