2016-12-27 2 views
1

Я пытаюсь использовать колбу + gunicorn + nginx для настройки веб-приложения. Это нормально, запустив скрипт, но у него есть небольшая проблема в nginx.колба + ошибка nginx + gunicorn redirect

В hello.py он должен перенаправить на индекс после отправки формы. В моем локальном тесте индексный адрес http://127.0.0.1:8080, и все идет хорошо.
С сервером nginx и gunicorn, при отправке формы, он будет перенаправлен на http://192.168.1.108/ вместо http://192.168.1.108:1025/. 192.168.1.108 здесь мой локальный ip.

код редирект index.html в hello.py, то Коди клон из flasky настройки

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 по gunicorn -w 2 -b 127.0.0.1:8080 manage:app. Я думаю, что что-то не так в конфигурации nginx.

ответ

0

Я подозреваю, что ваша проблема в том, что nginx не передает порт вместе с заголовком Host на gunicorn, так что ваше приложение думает, что оно работает на порт по умолчанию вместо 8080. Попробуйте перечислить свой первый proxy_set_header в nginx:

proxy_set_header Host $host:$server_port; 
+1

Это работает, спасибо большое (^ u ^). – l0o0

Смежные вопросы