Задать вопрос
NikitaTratorov
@NikitaTratorov
CTO

Как настроить в Nginx перенаправление поддоменов на соответствующие папки без переадресации?

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

Нужно организовать такую схему перенаправления:
<subdomain>.site.com/$request_uri -> $scheme://site.com/partners/<subdomain>/$request_uri

чтобы для браузера всё прошло незаметно, т.е. без редиректов.
Поддомены www и new перенаправлять не нужно, т.е. подойдет
if ($host ~ ^(?!www\.|new\.)(.*)\.site\.com$) {...}


При этом, статика должна перехватываться nginx, а php-файлы проксируюстя в apache ниже, после всех location. Т.е. идея в том, чтобы сменить путь в начале конфига, чтобы дальше его обрабатывали другие location-ы.

Полный конфиг:
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    listen          443 ssl http2 default_server;
    listen          [::]:443 ssl http2 default_server;
    server_name     site.com ~^(?<subdomain>.+)\.site\.com$;

    ssl_certificate /etc/letsencrypt/live/new.site.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/new.site.com/privkey.pem;
    include snippets/ssl-params.conf;

    charset utf-8;

    location ~ /.well-known {
        root /usr/share/nginx/html;
        allow all;
        break;
    }

    # неудавшееся перенаправление;
    #if ($host ~ ^(?!www\.|new\.)(.*)\.site\.com$) {
    #       rewrite ^(.*)$ $scheme://site.com/partners/$subdomain/$request_uri? break;
    #}

    # общая статика: стили, картинки, скрипты
    location /assets {
        alias /var/www/html/assets;
        access_log off;
        expires 30d;
        break;
    }

    # картинки и файлы статей
    location /media/upload/articles {
        alias /var/www/html/media/upload/articles;
        access_log off;
        expires 30d;
        break;
    }

    # баннеры
    location /media/upload/bn {
        alias /var/www/html/media/upload/bn;
        access_log off;
        expires 30d;
        break;
    }

    # статика из папок поддоменов кроме php
    location ~* ^\/partners\/.*[^\.php]$ {
        alias /var/www/html/partners;
        access_log off;
        expires 30d;
        break;
    }

    location / {
        charset utf-8;
        proxy_pass          http://127.0.0.1:8080;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    Host $host;
        proxy_set_header    X-Forwarded-Proto $scheme;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_read_timeout  90s;
        limit_req           zone=proxy_global burst=100;
    }
}
  • Вопрос задан
  • 519 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
daager
@daager
Попробуйте такую регулярку ^(?!www\.|new\.)(?<subdomain>[a-z\.]+)\.site.com$
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы