无可否认,这个问题困扰了我几个月。我只是拖延了修复其他bug,把它放到了必须修复的地方--
我试着运行两个独立的gunicorn应用程序,并在同一个程序中启动nginx监督人.conf文件。当我启动supervisor时,我能够成功运行handlecalls应用程序,但是当我进入commentbox负责加载的网站时,我得到一个内部服务错误(500)。在
当我分别运行handlecalls和commentbox应用程序时,这些应用程序运行良好。为什么当我试着和supervisord一起运行时commentbox程序会给我500个错误?在
[program:nginx]
directory = /var/www/vmail
command = service nginx start -g "daemon off;"
autostart = True
[program:commentbox]
directory = /var/www/vmail
command = gunicorn app:app -bind 0.0.0.0:8000
autostart = True
[program:handlecalls]
directory = /var/www/vmail
command = gunicorn handle_calls:app --bind 0.0.0.0:8000
autostart = True
[supervisord]
directory = /var/www/vmail
logfile = /var/www/vmail/supervisorerrs.log
loglevel = trace
这与上司无关。Supervisord只是您启动/停止/重新启动服务器的一种方式。这与服务器的配置有关。在
基本原理:要使用nginx为两个gunicorn应用程序提供服务,你必须在两个不同的端口上运行它们,然后将nginx配置为proxy,将请求传递到它们各自的端口。原因是:一旦一个进程在一个端口上运行,该端口就不能被另一个进程使用。在
因此,将supervisord脚本中的配置更改为:
然后在nginx服务器的配置中
^{pr2}$handlecalls
更新:以下是部署web应用程序的基本知识
80
(或者对于https,443
),然后将请求传递给侦听其他端口的其他应用程序(例如,8000
上的commentbox
,端口{您可以通过在
/etc/nginx/sites-available/
中添加某些服务器配置文件(默认情况下)向nginx添加规则,作为如何为应用程序服务的规则。在某些情况下是不同的)。规则应该规定nginx知道应该向哪个应用程序发送请求的方法,例如:80
),每个应用程序都应该分配给不同的域。i、 e:commentbox.yourdomain.com
代表commentbox
,而{yourdomain.com
将服务commentbox
,而{handlecalls
yourdomain.com/commentbox
将服务commentbox
,而{在将配置文件添加到
/etc/nginx/sites-available/
之后,必须将这些文件符号链接到/etc/nginx/sites-enabled/
,好吧,告诉nginx你想启用它们。您可以直接将这些文件添加到/etc/nginx/sites-enabled/
,但我不建议这样做,因为它没有给您一种方便的方法来启用/禁用应用程序。更新:下面是如何配置nginx以使用两个不同的子域为gunicorn应用程序提供服务:
commentbox.yourdomain.com
和handlecalls.yourdomain.com
,并将它们都指向服务器的IP。在在
/etc/nginx/sites-available/commentbox
处为commentbox
创建一个配置文件,其中包含以下内容(根据需要编辑):在
/etc/nginx/sites-available/handlecalls
处为handlecalls
创建一个配置文件,其中包含以下内容(根据需要编辑):创建符号链接以启用这些服务器:
重启nginx生效
相关问题 更多 >
编程相关推荐