Я хочу иметь статический сайт в моем корневом каталоге public_html, а затем приложения Flask в своих собственных подкаталогах (например, public_html/foo). Статический корневой каталог функционирует так, как ожидалось.
Я потратил часы на редактирование конфигурации nginx, чтобы работать с флеш-приложениями, но всегда возвращаюсь туда же, а именно, что следующий код всегда возвращает "Bad Config" при переходе на mysite/foo. Я хочу, чтобы он вернул "Hello World!"
Если я изменяю конфигурацию nginx, так что корень сервера находится в public_html/foo, приложения Flask работают как ожидалось (т.е. mysite.com возвращает "Hello World!" ). В следующей конфигурации индекс Flask все еще указывает на mysite.com, когда я полагаю, что он должен указывать на mysite.com/foo
/и т.д./Nginx/сайты с поддержкой /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 foo:app
Update
Добавление rewrite /foo/(.*) /$1 break;
в блок nginx location /foo
делает mysite/foo возвратом "Hello World", однако все его ссылки (например, те, что относятся к таблице стилей из шаблона) все еще указывают на корень сайта (например, mysite/static/style.css вместо mysite/foo/static/style.css)