Ошибки перенаправления прокси с Nginx, Docker, Gunicorn и Flask - PullRequest
0 голосов
/ 07 мая 2019

Я использую Flask, MariaDB, Nginx, Gunicorn и Docker для размещения моей веб-страницы. Я использую 4 отдельных контейнера Docker (Flask + Let's шифрование, Nginx, Gunicorn и MariaDB), и веб-сайт полностью функционален, подключается через https для всех запросов, но при перенаправлении через:

return redirect(url_for('main.home'))

адрес не разрешается как

https://mywebsite.com/home

но вместо этого разрешается в качестве имени моей службы gunicorn, указанной в моем файле docker-compose.yml:

gunicornservice / дом

Обратите внимание, мое приложение Flask - это Blueprint () с именем 'main' Местоположения, указанные в вызовах url_for (), являются именами функций маршрутов, указанных для 'main':

@main.route("/home")
def home():
    return render_template('home.html')

Я попытался отредактировать файл конфигурации для nginx, так как я считаю, что именно в этом и заключается решение, которое, вероятно, связано с проблемой пересылки. Я нашел несколько похожих сообщений на SO, на одну из которых ссылались, используя _external = True в качестве второго аргумента в url_for (), но это только разрешило адрес как mywebsite.com/home, выдавший ту же ошибку,

"Этот сайт недоступен

IP-адрес сервера gunicornservice не найден.

DNS_PROBE_FINISHED_NXDOMAIN "

Мой конфигурационный файл Nginx:

events { }

http {

    upstream upstream-web {
        server jonathanolson.us;
    }

    server {
        listen 80;
        server_name gunicornservice;

        location / {
            root /NHL-Project/flasksite/static;
            proxy_pass http://gunicornservice:8000;
            proxy_redirect off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/jonathanolson.us/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/jonathanolson.us/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    }

    server {
        if ($host = jonathanolson.us) {
            return 301 https://$host$request_uri;
        } # managed by Certbot


        listen 80;
        server_name jonathanolson.us;
        return 404; # managed by Certbot
    }
}

Я ожидаю результатов от звонка на

return redirect(url_for('main.home'))

чтобы вернуть URL:

"https://mywebsite.com/home"

но вместо этого он возвращает URL:

"gunicornservice / дом"

Как я могу позвонить, чтобы перенаправить (url_for ()) вернуть правильные страницы моего сайта, такие как https://mywebsite.com/home?

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Я нашел решение в другом посте на SO.После добавления большего в моем коде, я получил ошибку 400, в которой говорилось «Простой HTTP-запрос был отправлен на порт HTTPS», что привело меня к этой статье SO: Работа с nginx 400 «Простой HTTP-запрос был отправлен«HTTPS порт» ошибка

В этом сообщении этот ответ объясняет, как вставить спецификацию конфигурации, которая будет правильно перенаправлять этот запрос http в https.

0 голосов
/ 07 мая 2019

Возможно, настройка SERVER_NAME поможет.

...