Конфигурация Nginx для статических сайтов в корневом каталоге, Flask-приложения в подкаталогах

Я хотел бы иметь статический сайт в моем корневом каталоге public_html, а затем Flask-приложения в их собственных подкаталогах (например public_html/foo). Статический корневой каталог функционирует так, как и ожидалось.

Я потратил часы на редактирование конфигурации nginx, чтобы обеспечить работу приложений Flask, но всегда оказываюсь в одном и том же месте, а именно, что следующий код всегда возвращает «Bad Config» при миграции в mysite/foo. Я хочу, чтобы он вернул «Hello World!»

Если я изменяю конфигурацию nginx так, чтобы корень сервера был в public_html/foo, приложения Flask работают так, как ожидалось (т.е. mysite.com возвращает «Hello World!»). В следующей конфигурации неподвижные точки индекса Фляги к mysite.com, когда я верю этому, должны указать на mysite.com/foo

/etc/nginx/sites-enabled/mysite

upstream frontends {
# gunicorn
server 127.0.0.1:18000;
}

server {
listen 80;
server_name www.mysite.com;
rewrite ^/(.*) http://mysite.com$1 permanent;
}

server {
listen 80;
server_name mysite.com;
server_name_in_redirect off;
root /home/ubuntu/public_html/mysite;

access_log /home/ubuntu/logs/mysite/access.log;
error_log /home/ubuntu/logs/mysite/error.log;

location / {
    index index.html;
    }
location /foo {
    try_files $uri @foo;
    }
location @foo {
        proxy_pass http://frontends;
        break;
    }
}

, фляга/home/ubuntu/public_html/mysite/foo/foo.py

from flask import Flask
from flask import render_template
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World!'

@app.route('/foo')
def test():
    return 'Bad config'

@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404

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

/home/ubuntu/public_html/mysite/foo/deploy.py

workers = 2
bind = '127.0.0.1:18000'
proc_name = 'foo_gunicorn'
pidfile = 'foo.pid'

начата с gunicorn-c deploy.py Фу:app

Update

Добавление rewrite/foo/(. * )/$ 1 break; в блок nginx location/foo делает mysite/foo возвратом «Hello World», однако все его ссылки (например, в таблицу стилей из шаблона) по-прежнему указывают на корень сайта (например, mysite/static/style.css вместо mysite/foo/static/style.css)

13
задан Paco 4 September 2013 в 17:16
поделиться