我的情况:
我有一个基于Paste ini构建的Pyramid应用程序,由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的解决方案似乎是在子文件夹上挂载WSGI可调用对象,然后传递--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反向?