У меня установлено серверное приложение Bokeh в Heroku с несколькими стилями, которые приводят к громоздким URL-адресам. Например: https://invlabs -bokehserver.herokuapp.com / avyview? Style = snowpacktracker
Я использую Flask, развернутый в Heroku, для получения расширений из простого пользовательского домена ( www.snowpacktracker.com ) и перенаправления во второе приложение Heroku, которое запускает сервер Bokeh и возвращает html-контент. Соответствующий код приложения Flask:
from flask import Flask, redirect
app = Flask(__name__)
@app.route('/')
def index():
return redirect(url_for("btac"), code=302)
@app.route('/btac')
def func1():
return redirect("https://invlabs-bokehserver.herokuapp.com/avyview?style=snowpacktracker", code=302)
@app.route('/btac/historic')
def btac_historic():
return redirect("https://invlabs-bokehserver.herokuapp.com/avyview", code=302)
if __name__ == '__main__':
app.run()
Мне бы хотелось, чтобы исходный URL-адрес оставался неизменным, пока происходит перенаправление Flask. Есть ли в Flask возможность сделать это? Или я могу настроить веб-сервер для достижения этой цели?
ОБНОВЛЕНИЕ и дальнейшие детали:
Я не могу заставить прокси-сервер nginx работать правильно. Моя текущая ситуация:
www.snowpacktracker.com настроен в качестве пользовательского домена (с использованием цели DNS, предоставленной Heroku) для моего приложения Heroku, на котором запущен nginx + gunicorn + Flask (это рабочая ссылка, которую вы можете использовать чтобы увидеть текущее поведение). Основной URL для этого приложения Heroku: https://snowpacktracker.herokuapp.com.
Когда это первое приложение Heroku получает запрос, приложение Flask перенаправляет на второе приложение Heroku, работающее на сервере Bokeh. В настоящее время реализовано переключение URL в браузере на https://invlabs -bokehserver.herokuapp.com / avyview? Style = snowpacktracker .
Оба www.snowpacktracker.com и www.snowpacktracker.com / btac перенаправляют на один и тот же URL. У меня есть второй стиль, определенный с www.snowpacktracker.com / btac / исторический , который перенаправляет на https://invlabs -bokehserver.herokuapp.com / avyview .
Моя цель - загрузка страницы www.snowpacktracker.com (и любых расширений: / btac или / btac / history) для перенаправления через Flask, как в настоящее время реализовано, но для исходный URL остается неизменным.
Я пытался отредактировать блок location
в файле конфигурации nginx.conf.erb
по ссылке в ответе @Fian, но мне не повезло.
Какие правильные операторы для proxy_pass
или proxy_redirect
(или rewrite
?) В блоке location
, чтобы выполнить это желаемое поведение?
Мой текущий конфигурационный файл nginx (предоставляется в Heroku nginx build pack ):
daemon off;
#Heroku dynos have at least 4 cores.
worker_processes <%= ENV['NGINX_WORKERS'] || 4 %>;
events {
use epoll;
accept_mutex on;
worker_connections 1024;
}
http {
gzip on;
gzip_comp_level 2;
gzip_min_length 512;
server_tokens off;
log_format l2met 'measure#nginx.service=$request_time request_id=$http_x_request_id';
access_log logs/nginx/access.log l2met;
error_log logs/nginx/error.log;
include mime.types;
default_type application/octet-stream;
sendfile on;
#Must read the body in 5 seconds.
client_body_timeout 5;
upstream app_server {
server unix:/tmp/nginx.socket fail_timeout=0;
}
server {
listen <%= ENV["PORT"] %>;
server_name _;
keepalive_timeout 5;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
}
}