如何在Nginx托管的单个域下托管多个Flask应用程序?

我想要达到的目标:

我有一个托管mydomain.com的Nginx Web服务器。当有人将我的domain.com键入其客户端时,我希望我的服务器从中提供index.html。/var/www/mydomain/当他们键入mydomain.com/flaskapp1时,他们应该看到flaskapp1。当他们键入mydomain.com/flaskapp2时,他们应该看到flaskapp2。

我已经成功地使用此处的教程http://www.markjberger.com/flask-with-virtualenv-uwsgi-nginx/来获取一个或其他烧瓶应用程序,但是当尝试实现为两个单独的烧瓶应用程序提供服务时,我遇到了困难。当我尝试在浏览器中使用mydomain.co.uk/flaskapp或mydomain.co.uk/flaskapp2访问任何一个烧瓶应用程序时,都没有看到flask应用程序,而是收到404消息。

这是我到目前为止所拥有的:

cat/etc/nginx/sites-available/mydomain.co.uk

server {

listen 80;

server_name www.mydomain.co.uk mydomain.co.uk;

location / {

root /var/www/html/;

index index.html index.htm;

}

location /flaskapp {

include uwsgi_params;

uwsgi_pass unix:/tmp/flaskapp.sock;

}

location /flaskapp2 {

include uwsgi_params;

uwsgi_pass unix:/tmp/flaskapp2.sock;

}

}

上面的conf文件已被sim链接到中/etc/nginx/sites-enabled

cat/etc/uwsgi/apps-available/flaskapp.ini

[uwsgi]

vhost = true

socket = /tmp/flaskapp.sock

venv = /var/www/flaskapp/venv

chdir = /var/www/flaskapp

module = flaskapp

callable = app

cat/etc/uwsgi/apps-available/flaskapp2.ini

[uwsgi]

vhost = true

socket = /tmp/flaskapp2.sock

venv = /var/www/flaskapp2/venv

chdir = /var/www/flaskapp2

module = flaskapp2

callable = app

这两个.ini文件都已链接到/etc/uwsgi/apps-enabled。UWSGI可以正常重启,没有任何问题,并且可以正常运行。flaskapp.sock和flaskapp2.sock都归www-data所有

cat/var/www/flaskapp/flaskapp.py

from flask import Flask

app = Flask(__name__)

@app.route('/')

def hello_world():

return 'Hello World from flaskapp1!'

if __name__ == '__main__':

app.run(host='0.0.0.0')

cat/var/www/flaskapp2/flaskapp2.py

from flask import Flask

app = Flask(__name__)

@app.route('/')

def hello_world():

return 'Hello World from flaskapp2!'

if __name__ == '__main__':

app.run(host='0.0.0.0')

cat/var/www/mydomain.co.uk/index.html

<!DOCTYPE html>

<html>

<body>

<h1>mydomain.co.uk</h1>

<p>This is the index page of my domain.co.uk</p>

</body>

</html>

两个虚拟环境都安装了flask,并且将使用开发服务器运行flask应用程序。

我希望这是我错过的简单事情。

回答:

查看NGINX的uwsgi文档。

特别:

不幸的是,nginx无法根据SCRIPT_NAME重写PATH_INFO。因此,您需要指示uWSGI在所谓的“挂载点”中映射特定的应用程序,并自动重写SCRIPT_NAME和PATH_INFO:

更改my flaskapp.iniflaskapp2.ini文件以包含应用程序的挂载点,然后打开manage-script-name变量已奏效。

cat/etc/uwsgi/apps-available/flaskapp.ini

[uwsgi]

vhost = true

socket = /tmp/flaskapp.sock

venv = /var/www/flaskapp/venv

chdir = /var/www/flaskapp

module = flaskapp

callable = app

mount = /flaskapp=flaskapp.py

manage-script-name = true

cat/etc/uwsgi/apps-available/flaskapp2.ini

[uwsgi]

vhost = true

socket = /tmp/flaskapp2.sock

venv = /var/www/flaskapp2/venv

chdir = /var/www/flaskapp2

module = flaskapp2

callable = app

mount = /flaskapp2=flaskapp2.py

manage-script-name = true

现在,这两个flask应用程序都根据需要通过nginx通过uwsgi运行。

以上是 如何在Nginx托管的单个域下托管多个Flask应用程序? 的全部内容, 来源链接: utcz.com/qa/420636.html

回到顶部