nginx без server_name и используя только статический 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;.


эй, можешь взглянуть на этот serverfault.com/questions/678521/…
Мухаммед Умер,

несколько связанных
Мухаммед Умер

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
Два не равны; Несоответствие - это то, что подается, когда ничего не совпадает, а подстановочный знак соответствует всему. Суть здесь в том, что полезная информация должна быть в ответе, а не на каком-либо другом сайте (как бы хорошо это ни было представлено на этом сайте), как подробно описано здесь
BE77Y

И дело в том, что это не «хороший ответ», а ответ. Извините, нет времени. Если вы хотите отредактировать / переписать его, я даю вам полное разрешение. Иначе они точно будут знать, что делать, и это полезно. Не стесняйтесь переписать его, в противном случае ответ остается в силе.
Джо

3
Если у вас не было «времени», чтобы добавить дополнительную строку с соответствующей информацией, я, честно говоря, не знаю, почему вы удосужились ответить на 3-летнее сообщение с принятым ответом!
BE77Y

4

Если вы хотите, чтобы ваше приложение отвечало на порт 9050 без определенного имени хоста, вы можете просто пропустить server_name, это не требуется, так как Nginx сначала разрешает запись прослушивания, а затем server_name, если присутствует:

server {
   listen 9050;

   .....
}

Подробнее здесь: Nginx имя_сервера и как это работает

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.