Назад | Перейти на главную страницу

Nginx Почему мой сервер обслуживает правильный контент на локальном хосте, но не на 0.0.0.0

Я пытаюсь получить данные со своего сервера, но если я попытаюсь с 0.0.0.0/my/api дает 400, но если я попробую localhost/my/api он дает то, что мне нужно. Я использую nginx, и вот файл конфигурации для сервера

server {
    listen 80;
    server_name localhost 54.149.242.144;
    access_log /var/log/nginx/myapp.log;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/myapp;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Также, если я сделаю netstat, я получу это для сервера

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8080/nginx

Почему он давал мне только правильный контент с localhost и давал мне 400 с адреса 0.0.0.0? Также это приводит к тому, что я не могу получить доступ к api с внешней машины. Наконец, я использую Gunicorn в качестве внутреннего сервера и использую nginx для обратного прокси-сервера.

Адрес 0.0.0.0 может использоваться только в определенном конкретном контексте на машине Linux. Раньше вы могли использовать 0.0.0.0, и он интерпретировался как адрес обратной связи (127.0.0.1 или localhost).

Адрес 0.0.0.0 теперь используется только для прослушивающих сокетов, чтобы показать, что процесс прослушивает все интерфейсы IPv4. Приятно настроить это, потому что вы можете изменить IP-адрес сервера без перезапуска службы, прослушивающей 0.0.0.0.

Я помню (я мог ошибаться ...), что если вы попытаетесь запустить прослушиватель IP-адреса с интерфейса, у которого есть ссылка, он потерпит неудачу.