Уважаемые специалисты 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;
}
}