我有一个由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构建的。
因此,是否可能
从粘贴ini内装入可调用的WSGI?还是我必须将uwsgi配置从Paste ini中分离出来,并通过调用wsgi.py
来定义单独的paste.deploy.loadapp
来生成可安装的wsgi可调用项?或者还有另一种方法可以将此应用程序作为nginx的子文件夹提供,同时又不会弄乱网址反转?
我拥有:我有一个金字塔应用程序,该应用程序是由Paste ini构建的,由uWSGI提供服务并由nginx代理。效果很好。这是nginx的配置:server {listen 80; server_name ...
是的,使用Nginx可以将您的Pyramid挂载为子目录。您需要使用的是uWSGI的Modifier1选项,如下所示:
我想按照您的建议去做,但这是我能找到的最接近的解决方案:如果您愿意修改PasteDeploy配置,则可以按照以下步骤操作:http://docs.pylonsproject.org/docs/pyramid/en/1.0-branch/narr/vhosting.html
从Python2切换到Python3后,我的部署遇到了这个问题。