Jak zdobyć dev. *. Domain.com do pracy na nginx

0

Staram się, aby nginx akceptował strony internetowe w tym formacie: dev. *. Domain.com. Przeczytałem dokumenty i rozumiem, że muszę do tego użyć wyrażenia regularnego.

Nazwa symbolu wieloznacznego może zawierać gwiazdkę tylko na początku lub na końcu nazwy i tylko na granicy kropki. Nazwy „www. .example.org ”i„ w .example.org ”są nieprawidłowe. Jednak nazwy te można określić za pomocą wyrażeń regularnych, na przykład „~ ^ www .. +. Example.org $” i „~ ^ w. .example.org $ ”. Gwiazdka może pasować do kilku części nazwy. Nazwa „ .example.org” pasuje nie tylko do www.example.org, ale także www.sub.example.org.

Więc mam:

server {
        listen 80;
        server_name ~^dev\..+\.domain\.com\.br$ dev.domain.com.br;

        access_log /var/log/nginx/dev.domain.com.br.access.log;
        error_log /var/log/nginx/dev.domain.com.br.error.log;

        location / {
            proxy_pass http://127.0.0.1:68319/;
            include /etc/nginx/proxy.conf;
        }
        location /media/ {
            alias /my/folder/to/media/;
            expires 15d;
        }
        location /favicon.ico { 
            alias /my/folder/to/favicon.ico;
            expires 15d;
        }
    }

Jakoś kończy się złapanie przez tę regułę (która jest ostatnia):

server {
        listen 80;
        server_name *.domain.com.br domain.com.br;

        access_log /var/log/nginx/domain.com.br.access.log;
        error_log /var/log/nginx/domain.com.br.error.log;

        location / {
            proxy_pass http://127.0.0.1:8080/;
            include /etc/nginx/proxy.conf;
        }
        location /media/ {
            alias /my/path/to/media/;
            expires 15d;
        }
        location /favicon.ico { 
            alias /my/path/to/favicon.ico;
            expires 15d;
        }
    }

Jakieś pomysły? Z góry bardzo dziękuję.

PS: Myślę, że jest łapany przez * .domain.com ze względu na kolejność testów nginx na mecze. Czy w każdym razie mogę przepisać * .domain.com, aby przetestować tylko 1 poziom subdomeny? tzn. test.domain.com pasuje do * .domain.com, ale sub.test.domain.com nie.

Starcie
źródło

Odpowiedzi:

5

* .domain.com to tylko proste dopasowanie sufiksu, nie ma możliwości ograniczenia go do poziomu pojedynczej subdomeny. Aby osiągnąć to, co chcesz, musisz przekonwertować swój przyrostek, aby był również wyrażeniem regularnym:

server {
  server_name ~^dev\..+\.domain\.com\.br$ dev.domain.com.br;
  ...
}

server {
  server_name ~^[^.]+\.domain\.com\.br$ domain.com.br;
  ...
}

oba wyrażenia są wyrażeniami regularnymi, kolejność bloków serwera ma znaczenie.

kolbyjack
źródło