gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:24:33 25 4
gpt4 key购买 nike

我想要达到的目标:

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

我已经设法使用此处的教程获得了一个或其他 flask 应用程序 http://www.markjberger.com/flask-with-virtualenv-uwsgi-nginx/但是当试图实现为两个单独的 flask 应用程序提供服务时,我遇到了困难。当我尝试在浏览器中使用 mydomain.co.uk/flaskapp 或 mydomain.co.uk/flaskapp2 访问任一 flask 应用程序时,我没有看到 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 .

猫/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

猫/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 文件都被符号链接(symbolic link)到 /etc/uwsgi/apps-enabled . UWSGI 可以正常重启,没有任何问题,并且可以正常运行。 flaskapp.sock 和 flaskapp2.sock 都归 www-data 所有

猫/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')

猫/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')

猫/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 文档 here .

具体来说:

Unfortunately nginx is not able to rewrite PATH_INFO accordingly to SCRIPT_NAME. For such reason you need to instruct uWSGI to map specific apps in the so called “mountpoint” and rewrite SCRIPT_NAME and PATH_INFO automatically:



改变我的 flaskapp.iniflaskapp2.ini包含应用程序安装点的文件并打开 manage-script-name 变量已经起作用。

猫/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

猫/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 - 如何在 nginx 上托管的单个域下托管多个 flask 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34692600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com