Nginx использует поддомен в качестве параметра запроса и переписывает URL - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь использовать субдомены в качестве параметра запроса для самого домена. Примером может быть следующее:

Я хочу, чтобы nginx взял ab.example.com и вызвал example.com? Key = ab , теперь бэкэнд вернет конкретную конфигурацию, которую следует использовать для поддомен " ab ".

После этого пользователь должен увидеть содержимое (точнее, логотип бренда) example.com? Key = ab , но в поле URL-адреса клиента ab.example.com должно сохраняются.

И все дальнейшие запросы должны показывать, например, ab.example.com / login вместо example.com / login .

Я надеюсь, что то, что я сказал, достаточно понятно. Я пробовал различные примеры из интернета и пытался найти некоторые подсказки.

Файл nginx выглядит так:

server {
    listen 80;
    listen [::]:80;

    server_name www.example.com *.example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name www.example.com *.example.com;
    ssl_certificate /path/to/certs/ssl.crt;
    ssl_certificate_key /path/to/keys/ssl.key;

    root /var/www/example_site;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ /index.html =404;
        error_page 404 =200;
    }
}

Я уже пытался сопоставить, но он перенаправляет на неправильный домен:

map $host $subdomain {
    ~^(?<sub>.+)\.example\.com$ $sub;
}

И попытался добавить статический оператор if в блоке сервера тоже:

if ($host = "ab.example.com") {
    rewrite . ?key=ab;
}

Дополнительный блок сервера тоже не помог:

server {
    listen 80;
    listen [::]:80;
    server_name www.ab.example.come ab.example.com;
    rewrite ^ https://example.com/?key=ab permanent;
}

Кто-нибудь видит, что я делаю неправильно или какую часть документации я должен прочитать снова?

1 Ответ

0 голосов
/ 01 сентября 2018

Вам просто нужно сделать это в вашей собственной директиве server_name. Вы можете назначить переменную в регулярном выражении прямо там. Если вам нужно другое поведение для www. субдомена, просто удалите *.example.com из блока и добавьте его в другой файл:

server {
    listen       80;
    server_name  ~^(?<subdomain>.+)\.example\.com$; 
    return       301 http://example.com$request_uri?key=$subdomain;
}

Обратите внимание, что я не использовал rewrite, который вам не нужен. Использование return работает лучше . 301 обозначает вид перенаправления. Затем вы используете назначенную переменную server_name для перенаправления туда, куда вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...