我主要使用 nginx 作为几个 gunicon/mod_wsgi 应用程序前面的反向缓存代理,当然还有服务器静态文件。
我发现很快我的 nginx 配置就变得无法维护;问题是我有一些相似(甚至相同)的模式,但我无法使它干净。
我遇到的最大问题之一是我喜欢使用命名位置作为对一组 conf 进行分组的一种方式,例如。
location @django_modwsgi {
include proxy.conf;
proxy_pass http://127.0.0.1:8080;
}
location @django_gunicorn {
include proxy.conf; # this could also be included directly in the server {} block?
proxy_pass http://gunicorn_builder;
}
Run Code Online (Sandbox Code Playgroud)
注意。 问题不在于同时拥有 gunicorn 和 wsgi。那只是一个例子。另一种是:
location @namedlocation_1 {
some cache settings;
some cache_key settings;
ignore some headers;
expires;
proxy_pass
}
location @namedlocation_2 {
other cache settings;
other cache_key settings;
ignore some headers;
expires;
proxy_pass
}
Run Code Online (Sandbox Code Playgroud)
但是要调用命名位置,我发现的唯一方法是:
location …
Run Code Online (Sandbox Code Playgroud) 我们正在运行基于Ubuntu 9.10 Karmic Koala的生产服务器,内核几乎是最新的 (2.6.38.2-grsec-xxxx-grs-ipv6-64) 但karmic 包存储库现在已经过时了,例如。Nginx 是 0.7.62 - 真的有问题 - 而最新的稳定版是 1.0.x!
此外,业力刚刚走到了生命的尽头。
这个问题:保持 UNIX 包最新的最佳实践?看起来很相似,但实际上只包含一些关于包管理器的建议;根本不是我需要的!
所以我看到的选项是:
#1 的缺点非常明显。
我不敢做一个 dist-upgrade 路径,因为停机时间和可能的灾难性后果对于生产服务器是不可能预测的,目前主要是重新构建我自己需要的包。但我确定我可能会遗漏一些。
我不太清楚使用 Ubuntu 向后移植的风险(稳定性/兼容性)是什么,此外,9.10 不再正式提供任何内容。Launchpad 是单独构建的,类似的问题 - 这比编译我自己的好多少?
构建包似乎很好,但是:
最后……最近发行版中的“旧”包怎么样?我想除了自己重新构建它们之外没有其他方法吗?2 和 4 的组合最终是最佳路径吗?
关于什么是最好的方法,或者为什么我的一些选择是好的/不好的原因,是否有任何客观的共识?
如果真的没有,我会接受在创建无限线程之前问题已关闭!
我正在配置 gunicorn(由 supervisord 监控并在 nginx 前端后面)并且对要设置的最佳进程数感到有些困惑。
在文档中清楚地解释了:
workers = multiprocessing.cpu_count() * 2 + 1
Run Code Online (Sandbox Code Playgroud)
我的机器是四核,所以应该算 9 个工人。
但我想运行多个应用程序,每个应用程序监听不同的端口。
那么计数是否应该被(截断):
workers_per_application = int(workers / NUM_APPLICATIONS)
Run Code Online (Sandbox Code Playgroud)
或者每个人都应该有上述数量的工人?
我认为这个问题实际上不仅适用于 gunicorn,而且适用于所有类似的侦听服务器......