Нгрок не туннелирует должным образом Nginx - PullRequest
0 голосов
/ 23 января 2020

У меня flask приложение развернуто на Nginx поверх моей виртуальной машины.

Все развернуто Хорошо, и я могу запросить мой apis на http://my.ip.number (у меня есть публичные c IP)

Но когда я запускаю Ngrok (мне нужен https, и у меня нет имени домена для генерации сертификата SSL), URL https // number.ngrok .io показывает мне домашнюю страницу Nginx (Добро пожаловать на Nginx) вместо моего веб-приложения .

Почему это происходит?

PD: Когда я запускаю "curl localhost", я получаю Nginx Welcome Page, но когда я выполняю c "curl -4 localhost", я получаю домашняя страница веб-приложения

и т. д. / nginx / site-available / myproject

server {
    listen 80;
    server_name 0.0.0.0;
    location / {
        include proxy_params;
        proxy_pass http://unix:/home/datascience/chatbot-cima/chatbot.sock;
    }
}

server {
    listen 80;
    server_name 127.0.0.1;

    location / {
        proxy_pass http://unix:/home/datascience/chatbot-cima/chatbot.sock;
    }
}

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://unix:/home/datascience/chatbot-cima/chatbot.sock;
    }
}

server {
    listen 80;
    server_name public.ip;

    location / {
        proxy_pass http://unix:/home/datascience/chatbot-cima/chatbot.sock;
    }
}

1 Ответ

1 голос
/ 23 января 2020

Любой запрос, поступающий от ngrok, имеет заголовок Host, установленный на URL-адрес ngrok. Поведение nginx будет состоять в том, чтобы попытаться сопоставить один из server блоков в вашей конфигурации выше, и использовать по умолчанию первый, если ни один server_name не соответствует заголовку Host.

Однако, Я предполагаю, что есть другой файл конфигурации на /etc/nginx/conf.d/default.conf или /etc/nginx/sites-enabled/0-default, который имеет директиву listen с установленным default_server. Это будет ловить эти запросы и служить "Добро пожаловать в nginx!" стр.

Я предлагаю вам найти этот файл и удалить его, что должно решить проблему.

Однако вы также можете упростить приведенную выше конфигурацию и просто получить:

server {
    listen 80;
    server_name localhost;
    location / {
        include proxy_params;
        proxy_pass http://unix:/home/datascience/chatbot-cima/chatbot.sock;
    }
}

Если в конфигурации нет другого server блока, скрывающегося где-то еще с такой директивой, как listen 80 default_server;, тогда он должен перехватывать все запросы.

Для получения дополнительной информации см .: Как nginx обрабатывает запрос

...