nginx bez nazwy_serwera i używając tylko statycznego adresu IP?

34

to jest moje pierwsze wdrożenie aplikacji internetowej i napotykam na różnego rodzaju problemy.

Obecnie idę na implementację nginx + gunicorn dla aplikacji Django, ale głównie to pytanie dotyczy konfiguracji nginx. W pewnym kontekście - nginx otrzymuje połączenia i proxy do lokalnego serwera gunicorn.

w konfiguracjach nginx, gdzie jest napisane, server_nameczy muszę je podać? Nie planuję używać żadnych nazw domen, tylko poprzez zewnętrzny adres IP mojej sieci (jest statyczny) i numer portu, którego należy słuchać.

Pragnę, aby kiedy uzyskałem dostęp do czegoś takiego http://xxx.xxx.xxx.xxx:9050, byłbym w stanie uzyskać stronę.

Poniżej znajduje się przykładowy kod, na którym oprę konfiguracje w celach informacyjnych.

   server {
        listen   80;
        server_name WHAT TO PUT HERE?;

    root /path/to/test/hello;

    location /media/ {
        # if asset versioning is used
        if ($query_string) {
            expires max;
        }
    }
    location /admin/media/ {
        # this changes depending on your python version
        root /path/to/test/lib/python2.6/site-packages/django/contrib;
    }
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://localhost:8000/;
    }
        # what to serve if upstream is not available or crashes
        error_page 500 502 503 504 /media/50x.html;
     }
grzmotnąć-
źródło

Odpowiedzi:

31

server_namedomyślnie jest to pusty ciąg, co jest w porządku; możesz to całkowicie wykluczyć.

Innym powszechnym podejściem do potrzeby „Nie chcę nazywać tego” jest użycie server_name _;

Twój http://xxx.xxx.xxx.xxx:9050adres URL nie będzie jednak działał z tą konfiguracją; nasłuchujesz tylko na porcie 80. Trzeba też dodać listen 9050;.

Shane Madden
źródło
hej, możesz rzucić okiem na ten serverfault.com/questions/678521/…
Muhammad Umer
nieco spokrewniony
Muhammad Umer
5

Nazwa serwera _; nie jest symbolem wieloznacznym patrz tutaj:

http://blog.gahooa.com/2013/08/21/nginx-how-to-specify-a-default-server

wystarczy określić dyrektywę default_server dla dostępu tylko ip (patrz http://nginx.org/en/docs/http/request_processing.html )

server {
    listen 1.2.3.4:80 default_server;
    ... 
    }
Joe
źródło
2
Odradza się po prostu link do użytecznej informacji i nie uwzględnianie jej w odpowiedzi - w tym przypadku server_name _;jest to niezgodna informacja.
BE77Y,
1
„nie jest znakiem wieloznacznym” == „jest niezgodny”. Jestem pewien, że to dostaną.
Joe
2
Obie nie są sobie równe; brak dopasowania jest wyświetlany, gdy nic więcej nie pasuje, podczas gdy symbol wieloznaczny pasuje do wszystkiego. Chodzi tu jednak o to, że przydatne informacje powinny znajdować się w odpowiedzi, a nie zawierać linków na innych
stronach
Chodzi o to, że nie jest to „dobra odpowiedź”, ale odpowiedź. Przepraszam, nie ma czasu. Jeśli chcesz go edytować / przepisać, daję Ci pełne pozwolenie. W przeciwnym razie będą dokładnie wiedzieć, co robić, i to jest pomocne. Możesz go przepisać, w przeciwnym razie odpowiedź pozostanie.
Joe
3
Jeśli nie miałeś „czasu” na dołączenie dodatkowej linii z odpowiednimi informacjami, szczerze mówiąc, nie wiem, dlaczego zadałeś sobie trud, aby odpowiedzieć na 3-letni post z zaakceptowaną odpowiedzią!
BE77Y
4

Jeśli chcesz, aby aplikacja odpowiadała na porcie 9050 bez określonej nazwy hosta, możesz po prostu pominąć nazwę serwera, nie jest to wymagane, ponieważ Nginx najpierw rozpoznaje pozycję nasłuchiwania, a następnie nazwa_serwera, jeśli jest obecna:

server {
   listen 9050;

   .....
}

Więcej informacji tutaj: Nginx nazwa_serwera i jak to działa

gansbrest
źródło