简体   繁体   English

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

[英]Nginx proxy_pass don't open correctly proxy url for Flask

I need to create a service that will authorize through python requests in the personal account of a third-party resource, and then redirect to this personal account from the browser.我需要在第三方资源的个人账户中创建一个通过python请求授权的服务,然后从浏览器重定向到这个个人账户。

I decided to use the Flask + Nginx bundle.我决定使用 Flask + Nginx 包。

First, I do authorization, take cookies and headers and try to add them to my browser, and then make a proxy redirect to this closed personal account through 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")

And the config in Nginx is as follows: 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;
    }

}

But when I go to 127.0.0.1/protected_area in my browser, nothing happens.但是当我在浏览器中访问 127.0.0.1/protected_area 时,没有任何反应。 He tries to do 127.0.0.1/redirect, then Nginx leaves it to protected_area.他尝试执行 127.0.0.1/redirect,然后 Nginx 将其留给 protected_area。

Please tell me what is the correct Nginx config for my task and whether I correctly transfer cookies and headers to Flask in order to use them to enter the closed page of an external resource.请告诉我什么是我的任务正确的 Nginx 配置,以及我是否正确地将 cookie 和标头传输到 Flask 以便使用它们进入外部资源的关闭页面。

Thank you.谢谢你。

First of all you do not need to use server_name in local Nginx configuration.首先,您不需要在本地 Nginx 配置中使用server_name Cause you try to connect to domain name without upstream specification.导致您尝试连接到没有upstream规范的域名。
Try to use something like that:尝试使用类似的东西:

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;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM