Nginx proxy_pass无法正确打开 Flask 的代理网址



我需要在第三方资源的个人帐户中创建一个服务,通过python请求进行授权,然后从浏览器重定向到这个个人帐户。

我决定使用Flask+Nginx捆绑包。

首先,我进行授权,获取cookie和标头,并尝试将它们添加到我的浏览器中,然后通过Nginx将代理重定向到这个关闭的个人帐户。

The Flask is like this:
@app.route("/protected_area")
def protected_area():
session = requests.Session()
user = fake_useragent.UserAgent().random
header = CaseInsensitiveDict()
header['user-agent'] = user
header['X-UA-Compatible'] = 'IE=Edge,chrome=1'
header['Cache-Control'] = 'public, max-age=0'
payload = {
'mode': MODE,
'username': LOGIN,
'password': PASS
}
url_main = BASIC_SITE_URL + 'login'
url_login = BASIC_SITE_URL + 'login/form'
url_cabinet = BASIC_SITE_URL + '?personal_cabinet'
response = session.get(url_main, headers=header, allow_redirects=False)
cookies = get_cookies(response.cookies, URL)
cookies = cookies.split(';')
cookies = [(c.split('=', 1)) for c in cookies]
session.cookies.update(dict(cookies))
response = session.post(url_login, data=payload, cookies=response.cookies, headers=header, allow_redirects=False)

cookies = get_cookies(response.cookies, URL)
cookies = cookies.split(';')
cookies = [(c.split('=', 1)) for c in cookies]
session.cookies.update(dict(cookies))
response = session.get(url_cabinet, headers=header, cookies=dict(cookies), allow_redirects=False)
if response.status_code == 200:
print('Sucessful!')
expire_date = datetime.datetime.now()
expire_date = expire_date + datetime.timedelta(days=1)
response = make_response()
response.set_cookie('ba-sso-csrf', dict(cookies).get('ba-sso-csrf'), expires=expire_date)
response.set_cookie('paSession', dict(cookies).get('paSession'), expires=expire_date)
response.header = CaseInsensitiveDict()
response.header['user-agent'] = user
response.header['X-UA-Compatible'] = 'IE=Edge,chrome=1'
response.header['Cache-Control'] = f'public, max-age={expire_date}'
return redirect("/redirect")
elif response.status_code == 404:
print('Unsuccessful!')
return redirect("/redirect")

Nginx中的配置如下:

server {
listen 80;
server_name flask;
location / {
proxy_pass http://flask/;
}
location /redirect {
proxy_pass http://VNESHNIY_URL/?personal_cabinet;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}
}

但当我在浏览器中转到127.0.0.1/protected_area时,什么都不会发生。他试图执行127.0.0.1/重定向,然后Nginx将其留给protected_area。

请告诉我我的任务的正确Nginx配置是什么,以及我是否正确地将cookie和标头传输到Flask,以便使用它们进入外部资源的关闭页面。

谢谢。

首先,您不需要在本地Nginx配置中使用server_name。因为您尝试连接到没有upstream规范的域名。
尝试使用类似的东西:

server {
listen 80 default_server;
location / {
proxy_pass http://127.0.0.1:5000;  # your flask app
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location /redirect {
proxy_pass http://VNESHNIY_URL/?personal_cabinet;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}
}

最新更新