上篇文章中说了如何只启用一个uwsgi进程服务多个Django应用,虽然成功了,但是却有一个很大的问题:经常出现502。
刷新一下说不定又好了,再刷又502,就这样循环往复。
刚开始也不知道什么原因,一直调配置参数,不过基本没有什么改观,后来仔细查看uwsgi的启动参数,发现了一个参数:map-socket,这个参数的意义为:当你将一个uWSGI实例绑定到多个socket,你可以指定某些工作进程到某些socket来提高服务质量。
它的用法如下:
[uwsgi] socket = /tmp/uwsgi0.sock socket = /tmp/uwsgi1.sock workers = 6 map-socket = 0:1,2,3 map-socket = 1:4,5,6
上面的意思是,开启6个子进程,1,2,3通过/tmp/uwsgi0.sock来处理;4,5,6通过/tmp/uwsgi1.sock来处理。
Nginx中可以把有的虚拟主机的监听的socket设置为uwsgi0.sock,有的设置成uwsgi1.sock,这样设置之后刷新了很多次都没有再出现502了。