gee*_*des 5 nginx uwsgi pyramid
我有一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是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
Run Code Online (Sandbox Code Playgroud)
此配置位于Pyramid的production.ini中,因此我使用以下命令为应用程序提供服务:
uwsgi --ini-paste-logged production.ini
Run Code Online (Sandbox Code Playgroud)
所有这一切都很好.
一个简单的改变.我想将此应用程序作为子文件夹而不是作为根目录提供.http://localhost我希望从中提供服务,而不是从中提供服务http://localhost/myapp.
现在一切都破了.
如果我将nginx location指令更改/为/myapp或/myapp/,我得到404,因为WSGI应用程序接收所有前缀的uris /myapp.
uWSGI解决方案似乎是将WSGI callable挂载到子文件夹上,然后传递--manage-script-name选项,此时uWSGI应该从uri中神奇地剥离子文件夹前缀并修复问题.
但是,我发现的文档和所有其他资源只给出了表单的示例:
mount = /myapp=myapp.py
Run Code Online (Sandbox Code Playgroud)
我没有包含WSGI可调用的myapp.py,因为我的可调用是由PasteDeploy构建的.
那么,是否可以从Paste ini中挂载WSGI callable?或者我是否必须将Uwsgi配置从Paste ini中拆分出来并定义一个单独wsgi.py的调用paste.deploy.loadapp来生成一个可以挂载的wsgi callable?
或者是否有另一种方法可以将此应用程序作为nginx的子文件夹提供服务,同时不会弄乱网址反转?
dav*_*djb -1
是的,绝对可以使用 Nginx 将 Pyramid 挂载为子目录。您需要使用 uWSGI 中的 Modifier1 选项,如下所示:
location /myapp {
include uwsgi_params;
uwsgi_param SCRIPT_NAME /myapp;
uwsgi_modifier1 30;
uwsgi_pass localhost:8080;
}
Run Code Online (Sandbox Code Playgroud)
的神奇值告诉uWSGI从请求的开头30删除参数。Pyramid 接收请求并正确处理它。 SCRIPT_NAMEPATH_INFO
只要您使用标准金字塔机制在应用程序中生成 URL 或路径,SCRIPT_NAME就会自动合并,这意味着链接/资源等的所有 URL 都是正确的。
该文档不是最清晰的,但有更多关于修饰符的信息,请访问: https: //uwsgi-docs.readthedocs.org/en/latest/Protocol.html
| 归档时间: |
|
| 查看次数: |
913 次 |
| 最近记录: |