如何在nginx上托管的单个域下托管多个flask应用程序?

问题描述 投票:14回答:2

我想要达到的目标:

我有一个托管mydomain.com的Nginx Web服务器。当有人在其客户端中键入domain.com时,我希望服务器从/var/www/mydomain/提供index.html。当他们键入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应用程序。

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

我正在努力实现的目标:我有一台托管mydomain.com的Nginx Web服务器。当有人将我的domain.com输入他们的客户端时,我希望我的服务器从/ var / www / mydomain / ...

nginx flask uwsgi
2个回答
10
投票

查看NGINX here的uwsgi文档。


5
投票

问题出在这里:两个flask应用程序都不知道它们是从您域中的子目录提供的。 Nginx向他们传递了完整的URL,而不是相对于该目录的URL,因此每个URL都是相对于root调度的。让我们在示例中看到:

© www.soinside.com 2019 - 2024. All rights reserved.