Я использую 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?