覆盖默认的nginx http配置,而不更改默认的nginx.conf

我的本意:
我想覆盖/etc/nginx/nginx.conf中定义的默认配置(在debian 8中).
我们的想法是保持这个文件完全不受影响,以便于将来的系统更新,并能够获得我没有覆盖的选项的最新更改.

我做了什么:
我在/etc/nginx/conf.d/中创建了一个自定义配置,就像我对其他几个debian服务一样.

问题:
但是,似乎无法覆盖某些配置,因为我得到一个“X”指令是重复错误.
Nginx似乎不像其他服务那样支持配置覆盖.

题:
有没有办法覆盖并添加新选项到nginx http上下文而不会得到指令是重复错误?或者我应该完全放弃这个想法并肆虐nginx.conf?

非常感谢您的帮助.

This similar question并没有真正解决我的问题,因为我也想从我自动设置的默认选项nginx中获利(例如worker_processes auto;)

最佳答案

Or should I completely abandon the idea and rampage the nginx.conf?

是的你应该.

软件包维护者所做的唯一更改是

>更合理的参数默认值,无论如何你应该自己设置一个很长的时间
>#-prefixed示例,无论如何都不会在没有您的操作的情况下使用

过去,唯一重要的更改是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)

转载注明原文:覆盖默认的nginx http配置,而不更改默认的nginx.conf - 代码日志