我有一个具有以下基本结构的/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。但是,除非我将它们保存在主nginx.conf文件中,否则重写将被忽略。
我可能会使用这样的解决方法:使用“地图”模块 (示例答案显示了如何完成这里)。我可以使用的另一件事是Ansible来模板出配置文件,至少让复制机器生成,但我仍然想知道为什么会发生这种情况,以便更好地理解include指令的局限性。
发布于 2017-05-28 07:26:02
如果服务器块相同( ssl设置除外),则可以将它们组合起来。
一个HTTP/HTTPS服务器可以配置一台同时处理HTTP和HTTPS请求的服务器:服务器{聆听80;侦听443 ssl;server_name www.example.com;ssl_certificate www.example.com.crt;ssl_certificate_key www.example.com.key;.}
https://serverfault.com/questions/852641
复制相似问题