gpt4 book ai didi

nginx - uWSGI:如何挂载粘贴部署( Pyramid )应用程序?

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

是)我有的:
我有一个 Pyramid 应用程序,它是从 Paste ini 构建的,由 uWSGI 提供服务并由 nginx 代理。它工作得很好。这是 nginx 配置:

server {
listen 80;
server_name localhost;
access_log /var/log/myapp/nginx.access.log;
error_log /var/log/myapp/nginx.error.log warn;

location / {
uwsgi_pass localhost:8080;
include uwsgi_params;
}
}
这是 uWSGI ini 配置:
[uwsgi]
socket = 127.0.0.1:8080
virtualenv = /srv/myapp/venv
die-on-term = 1
master = 1
logto = /var/log/myapp/uwsgi.log
此配置位于 在 Pyramid 的 production.ini 中 ,这样我就可以使用以下命令为应用程序提供服务:
uwsgi --ini-paste-logged production.ini
所有这些工作都很好。
我想做的事:
一个简单的改变。我想将此应用程序用作子文件夹,而不是根。而不是从 http://localhost 提供服务, 我想从 http://localhost/myapp 提供服务.
现在 一切被打破。
如果我更改 nginx location来自 / 的指令至 /myapp/myapp/ ,我得到 404,因为 WSGI 应用程序接收到的 uri 都以 /myapp 开头.
uWSGI 解决方案似乎是 mount the WSGI callable on the subfolder ,然后通过 --manage-script-name选项,此时 uWSGI 应该神奇地从 uri 中删除子文件夹前缀并修复问题。
但是,我发现的文档和所有其他资源仅提供了以下形式的示例:
mount = /myapp=myapp.py
我没有包含 WSGI 可调用对象的 myapp.py,因为我的可调用对象是由 PasteDeploy 构建的。
那么,是否可以从 Paste ini 中挂载 WSGI 可调用对象?或者我是否必须将 uwsgi 配置从 Paste ini 中拆分出来并定义一个单独的 wsgi.py调用 paste.deploy.loadapp生成我可以挂载的 wsgi 可调用文件?
还是有另一种方法可以将此应用程序作为 nginx 的子文件夹提供服务,同时又不会弄乱 url 反转?

最佳答案

是的,绝对可以将 Pyramid 挂载为 Nginx 的子目录。您需要使用的是 uWSGI 中的 Modifier1 选项,如下所示:

location /myapp {
include uwsgi_params;
uwsgi_param SCRIPT_NAME /myapp;
uwsgi_modifier1 30;
uwsgi_pass localhost:8080;
}
30 的魔法值告诉uWSGI删除 SCRIPT_NAME的参数从 PATH_INFO 开始在请求中。 Pyramid 接收请求并正确处理它。

只要您使用标准 Pyramid 机制在应用程序中生成 URL 或路径, SCRIPT_NAME将自动合并,这意味着链接/资源等的所有 URL 都是正确的。

文档不是最清楚的,但在以下位置提供了更多关于修饰符的信息: https://uwsgi-docs.readthedocs.org/en/latest/Protocol.html

关于nginx - uWSGI:如何挂载粘贴部署( Pyramid )应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30768696/

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