Skip to main content
 首页 » 编程设计

python之在 Nginx 上使用 uWSGI 部署 Pyramid 的问题

2025年05月04日8del

我似乎在部署 Pyramid 网络应用程序时遇到了一些小问题。问题似乎出在我用来在启动时启动 Web 应用程序的初始化脚本中。出于某种原因,除非我的套接字设置为具有“nobody.nobody”的权限或在我的 uwsgi 初始化脚本之后启动 Nginx,否则 uWSGI 将无法工作。我更改了我的初始化脚本以反射(reflect)这些更改,但它似乎不起作用。初始化脚本(或启动 uwsgi 的部分)如下所示:

#!/sbin/runscript 
args="--ini-paste /var/www/pyramid/app1/development.ini" 
command="/var/www/pyramid/bin/uwsgi" 
pidfile="/var/run/uwsgi.pid" 
sock="/var/tmp/proxy/uwsgi.sock" 
nobody="nobody.nobody" 
 
start() { 
  ebegin "Starting app1" 
  chown $nobody $sock 
  start-stop-daemon --start --exec $command -- $args \ 
      --pidfile $pidfile  
  chown $nobody $sock 
  einfo "app1 started" 
  eend $? 
} 

我的 Nginx 配置如下所示:

location / {  
    include uwsgi_params; 
    uwsgi_pass unix:///var/tmp/proxy/uwsgi.sock; 
    uwsgi_param SCRIPT_NAME "" ; 
}   

我的 ini 文件包括以下内容:

[uwsgi] 
socket = /var/tmp/proxy/uwsgi.sock 
pidfile = /var/run/uwsgi.pid 
master = true 
processes = 1 
home = /var/www/pyramid 
daemonize = /var/log/uwsgi.log 
virtualenv = /var/www/pyramid/ 
pythonpath = /var/www/pyramid/bin 

发生的事情是 Nginx 将启动,然后 uwsgi 将启动。在/var/tmp/proxy 中执行“ls -la”显示 uwsgi.sock 的权限设置为“root root”而不是“nobody nobody”。然而,重新启动 Nginx 将解决问题,无论套接字的权限是什么(但 Nginx 必须先启动)。

因此,我可以使用的方法是:

  • 启动uwsgi
  • 启动nginx
  • 重启nginx

或

  • 启动nginx
  • 启动uwsgi
  • 重启nginx

我完全不知道为什么这不起作用。如果有人有任何建议,我将不胜感激!

请您参考如下方法:

您可以使用以下设置在您的 ini 文件中更改其套接字的权限:

chmod-socket = 777 # socket permission 
gid = www-data # socket group  
uid = www-data # socket user