我的意图:我想覆盖/etc/nginx/nginx.conf
(在 debian 8 中)中定义的默认配置。想法是保持此文件完全不变,以方便将来的系统更新,并能够获取我未覆盖的选项的最新更改。
我做了什么/etc/nginx/conf.d/
:我以与其他几个 Debian 服务相同的方式创建了自定义配置。
问题:但是,似乎无法覆盖某些配置,因为我得到了“X”指令重复错误。Nginx 似乎不像其他服务那样支持配置覆盖。
问题:有没有办法覆盖并向 nginx 添加新选项http上下文,而无需获取指令重复错误?还是我应该完全放弃这个想法并肆虐nginx.conf
?
非常感谢您的帮助。
这个类似的问题并没有真正解决我的问题,因为我还想从 nginx 自动为我设置的默认选项中获益(例如worker_processes auto;
)
答案1
或者我应该完全放弃这个想法并肆虐nginx.conf?
是的你应该。
软件包维护者所做的唯一更改是
- 你应该早就为自己设置更合理的参数默认值
#
-前缀的示例,如果没有你的行动,无论如何都不会被使用
过去,唯一重大的改变是ssl_protocols
、ssl_prefer_server_ciphers
和worker_processes
。 你应该在几年前就已经覆盖这些了,而对于软件包维护者来说,在 deb 软件包中设置它们似乎是一件合理的事情。
在过去,唯一真正的缓解措施是随系统范围的 nginx.conf 一起提供的,而max_ranges 1;
针对 CVE-2017-7529 的修复措施并未由我所知的任何发行版提供,他们在大多数管理员应用缓解措施之前就发布了针对该漏洞的修复程序。
您不能指望软件包维护者在添加可能造成重大影响的更改方面比您更快,因此您可能不会从继承他们的配置中获益。软件包维护者无法知道对于数百万个用例来说什么是最好的,因此在更改此处的值时会非常保守。
只要您的备份系统正常运行,保持配置不变仍然是一个好主意,这样 apt 就会在交互式更新期间询问您如何根据维护者对配置文件的更改采取行动。
如何确定不同版本之间应用了哪些更改?您可以比较所有(未经验证、不安全下载的)可用软件包版本,如下所示:
(cd "$(mktemp -d)"; rmadison --url=debian nginx-common | awk '{print $3}' | while read a; do curl "http://ftp.debian.org/debian/pool/main/n/nginx/nginx-common_${a}_all.deb" | dpkg -x - x${a}; done; for a in x*/etc/nginx/nginx.conf; do [ -z "$la" ] && la="$a" && continue; diff -wus "$la" "$a";la="$a" ; done; pwd)