Nginx: Przekieruj adres IP do nazwy domeny

12

Z następującą konfiguracją Nginx:

server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;

    server_name isitmaintained.com;

    ...
}

server {
    listen 178.62.136.230:80;
    server_name 178.62.136.230;

    add_header X-Frame-Options "SAMEORIGIN";

    return 301 $scheme://isitmaintained.com$request_uri;
}

Próbuję przekierować http://178.62.136.230/na http://isitmaintained.com/, ale kiedy wdrażam tę konfigurację, mam jedno Redirect looplub oba z tych łączy.

Co ja robię źle?

Matthieu Napoli
źródło

Odpowiedzi:

30

Spróbuj tego w drugim bloku:

server {
    listen 80;
    server_name 178.62.136.230;

    return 301 $scheme://isitmaintained.com$request_uri;
}

Problem polega na tym, że listendyrektywa drugiego bloku serwera jest bardziej szczegółowa niż pierwszy blok serwera, dlatego jest zawsze używana. A ponieważ drugi blok jest jedynym wirtualnym hostem dla tej listenspecyfikacji, jest on zawsze używany.

Tero Kilkanen
źródło
To ma sens. Ale kiedy to zastosuję, pojawia się następujący błąd: nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32:( I to nie ma sensu, ponieważ moja nazwa domeny nie jest taka długa.
Matthieu Napoli
Z jakiegoś powodu twoja konfiguracja wymaga więcej miejsca do przechowywania nazw serwerów wirtualnych w nginx, więc powinieneś po prostu zwiększyć to ustawienie.
Tero Kilkanen,
Przepraszam, że nie próbowałem bezpośrednio, byłem pewien, że coś jest nie tak. Ale miałeś rację, przekierowanie działa teraz! Bardzo ciepłe dziękuję :)
Matthieu Napoli
jesteś F ***** słuszny, rozwiązałeś mój problem, głosowałem,
dziękuję
3

Byłeś blisko Przepisz, którego szukasz.

server {
    listen 178.62.136.230:80;
    server_name 178.62.136.230 isitmaintained.com;

    rewrite  ^/(.*)$  http://www.isitmaintained.com/$1 permanent;
}
server {
    listen 80;
    server_name www.isitmaintained.com;
    # Serve Stuff Here.
}
Ticoombs
źródło
5
To rewritei returnpowyżej robią dokładnie to samo.
Tero Kilkanen