我有一个/etc/nginx/nginx.conf这个基本结构:
http { server { listen 80; server_name example.com; root /var/html; location / { rewrite ...; } } server { listen 443; server_name example.com; root /var/html; location / { rewrite ...; } } }
有许多rewrite指令,http和https server块之间的所有相同,所以我试图将它们提取到一个外部文件:
http { server { listen 80; include /etc/nginx/redirects.conf; } server { listen 443; include /etc/nginx/redirects.conf; } }
redirects.conf文件只包含:
server_name example.com; root /var/html; location / { rewrite ...; }
nginx -t -c /etc/nginx.conf告诉我语法正常,但是重写规则没有生效。 我知道该文件正在评估,因为如果我介绍一个语法错误,nginxs barfs。 但重写将被忽略,除非我把它们保存在主要的nginx.conf文件中。
解决方法我可能会使用:使用“地图”模块 (示例答案显示这是如何完成的)。 另一件我可以使用的是Ansible模板出来的configuration文件,至less使复制机器生成,但我仍然想知道为什么这是发生,以更好地了解include指令的限制。
如果你的服务器块是相同的(ssl设置除外),你可以将它们合并。
单个HTTP / HTTPS服务器
可以configuration同时处理HTTP和HTTPS请求的单个服务器:
server { listen 80; listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ... }