2016-12-27 1 views
1

플라스크 + gunicorn + nginx를 사용하여 웹 응용 프로그램을 설정하려고합니다. 스크립트를 실행해도 괜찮습니다.하지만 nginx에는 약간의 문제가 있습니다.플라스크 + nginx + gunicorn 리디렉션 오류

hello.py에는 양식을 제출 한 후 색인으로 리디렉션되어야합니다. 내 로컬 테스트에서 인덱스 주소는 http://127.0.0.1:8080이고 모든 것이 잘됩니다.
nginx 및 gunicorn 서버를 사용하여 양식을 제출하면 http://192.168.1.108:1025/ 대신 http://192.168.1.108/으로 리디렉션됩니다. 192.168.1.108 여기 내 로컬 IP입니다.

코드 리디렉션 hello.py에서 코디가 flasky에서 복제가 index.html을하는

from flask import Flask, render_template, session, redirect, url_for, flash 
from flask_script import Manager 
from flask_bootstrap import Bootstrap 
from flask_moment import Moment 
from flask_wtf import Form 
from wtforms import StringField, SubmitField 
from wtforms.validators import Required 
from werkzeug.contrib.fixers import ProxyFix 


app = Flask(__name__) 
app.wsgi_app = ProxyFix(app.wsgi_app) 
app.config['SECRET_KEY'] = 'hard to guess string' 

manager = Manager(app) 
bootstrap = Bootstrap(app) 
moment = Moment(app) 


class NameForm(Form): 
    name = StringField('What is your name?', validators=[Required()]) 
    submit = SubmitField('Submit') 


@app.route('/', methods=['GET', 'POST']) 
def index(): 
    form = NameForm() 
    if form.validate_on_submit(): 
     old_name = session.get('name') 
     if old_name is not None and old_name != form.name.data: 
      flash('Looks like you have changed your name!') 
     session['name'] = form.name.data 
     return redirect(url_for('index')) 
    return render_template('index.html', form=form, name=session.get('name')) 


if __name__ == '__main__': 
    manager.run() 

설정을의 nginx에 :.

worker_processes 2; 
events { 
    worker_connections 1024; 
} 
http { 
    include  mime.types; 
    default_type application/octet-stream; 
    sendfile  on; 
    server { 
     listen  1025; 
     server_name 127.0.0.1:8080; 

     #charset koi8-r; 

     #access_log logs/host.access.log main; 

     location/{ 
      proxy_pass http://127.0.0.1:8080; # gunicorn host address 
      proxy_set_header Host $host; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     } 
    } 
} 

gunicorn -w 2 -b 127.0.0.1:8080 manage:app에 의해 gunicorn 실행합니다. nginx 설정에 문제가 있다고 생각합니다.

답변

0

nginx가 호스트 헤더와 함께 포트를 gunicorn으로 전달하지 않아 응용 프로그램이 8080 대신 기본 포트에서 실행되고 있다고 생각할 수 있습니다. 다음과 같이 nginx에서 첫 번째 proxy_set_header를 chaning 해보십시오.

proxy_set_header Host $host:$server_port; 
+1

정말 고마워요 (^ u ^). – l0o0

관련 문제