【问题标题】:Nginx proxy_pass don't open correctly proxy url for FlaskNginx proxy_pass 没有正确打开 Flask 的代理 url
【发布时间】:2021-06-30 21:51:53
【问题描述】:

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

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

首先,我进行授权,获取 cookie 和 headers 并尝试将它们添加到我的浏览器中,然后通过 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/redirect,然后 Nginx 将其留给 protected_area。

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

谢谢。

【问题讨论】:

    标签: python nginx flask


    【解决方案1】:

    首先你不需要在本地 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 2017-11-18
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 2017-05-12
      相关资源
      最近更新 更多