Nginx:“此处不允许使用指令”

Ste*_*lsh 5 directive nginx include

我在 /etc/nginx/conf.d/default.conf 中有一个足够标准的 nginx conf 文件,其中有一个包含另一个文件的服务器块,例如

server {
  ...
  include /etc/nginx/conf.d/nginx-redirects.conf;
  ...
}
Run Code Online (Sandbox Code Playgroud)

nginx-redirects.conf 文件,顾名思义,只执行一长串重定向,例如

rewrite  ^/.../.../...$ https://www.example.com/.../.../... permanent;
rewrite  ^/.../.../...$ https://www.example.com/.../.../... permanent;
...
Run Code Online (Sandbox Code Playgroud)

但是当我重新启动nginx时,出现以下错误:

nginx: [emerg] /etc/nginx/conf.d/nginx-redirects.conf:1 中不允许“重写”指令 nginx: 配置文件 /etc/nginx/nginx.conf 测试失败

我尝试将我的一长串重定向封装在 nginx-redirects.conf 中的一个位置/块中,但使用“位置”而不是“重写”时出现了相同的错误。然后,我尝试将位置/块封装在服务器块中,但使用“服务器”而不是“位置”时出现了相同的错误。

有人知道我做错了什么吗?

Dis*_*oat 0

我刚刚遇到这个问题,答案如评论中所述 - 目录中的配置文件conf.d包含在nginx.conf. 这意味着该rewrite指令试图在http {}不允许的块中使用。

解决方案是将特定于站点的配置文件放在其他地方。由于nginx.conf仅直接包含该目录中的文件,因此您的文件可以位于子目录中,例如/etc/nginx/conf.d/sites/mysite-redirects.conf