nginx без імені сервера та з використанням лише статичної ip-адреси?


34

це моє перше розгортання веб-додатків, і я стикаюся з усілякими проблемами.

Зараз я збираюся реалізувати nginx + gunicorn для додатка Django, але це питання стосується в основному конфігурацій nginx. Для деякого контексту - nginx отримає з'єднання та проксі до локального сервера gunicorn.

в конфігураціях nginx, де написано, server_nameчи потрібно її надати? Я не планую використовувати доменні імена будь-якого типу, лише через зовнішній ip своєї мережі (він статичний) та номер порту для прослуховування.

Моє бажання - коли я отримаю доступ до чогось подібного, http://xxx.xxx.xxx.xxx:9050я зможу отримати сайт.

Далі наведено зразок коду, на якому я буду базувати конфігурації для посилання.

   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;
     }

Відповіді:


31

server_nameза замовчуванням порожній рядок, що добре; ви можете виключити це повністю.

Ще один поширений підхід до необхідності "Я не хочу називати це ім'я" - це використовувати server_name _;

Ваша http://xxx.xxx.xxx.xxx:9050URL-адреса не працює з цим конфігурацією; ви слухаєте лише через порт 80. Вам також потрібно буде додати listen 9050;.



дещо пов’язаний
Мухаммед Умер

5

ім'я_сервера _; не є мальовничою карткою дивіться тут:

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

просто вкажіть директиву default_server для доступу лише через ip (див. http://nginx.org/en/docs/http/request_processing.html )

server {
    listen 1.2.3.4:80 default_server;
    ... 
    }

2
Не рекомендується просто посилатися на корисну інформацію та не включати її у свою відповідь - у цьому випадку server_name _;це невідповідність.
BE77Y

1
"не є підстановкою" == "не відповідає". Я впевнений, що вони отримають це.
Джо

2
Два не рівні; невідповідність - це те, що подається, коли більше нічого не відповідає, в той час як wildcard відповідає всім. Сенс тут, однак, полягає у тому, що корисна інформація повинна міститись у відповіді, а не на будь-якому іншому веб-сайті (однак добре представленому на цьому веб-сайті), як детально описано тут
BE77Y

І справа в тому, що це не «хороша відповідь», але це відповідь. Вибачте, немає часу. Якщо ви хочете відредагувати / переписати його, я даю вам повний дозвіл на. Інакше вони точно будуть знати, що робити, і це корисно. Сміливо переписуйте його, інакше відповідь стоїть.
Джо

3
Якщо у вас не було "часу", щоб включити додатковий рядок із відповідною інформацією, я, чесно кажучи, не знаю, чому ви потурбувались відповісти на 3-річну посаду з прийнятою відповіддю!
BE77Y

4

Якщо ви хочете, щоб ваш додаток відповідав на порт 9050 без конкретного імені хоста, тоді ви можете просто пропустити ім’я_сервера, це не потрібно, оскільки Nginx спочатку вирішує запис прослуховування, а потім ім'я_сервера, якщо він присутній:

server {
   listen 9050;

   .....
}

Детальніше тут: ім'я_сервера Nginx та як це працює

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.