Nginx未知指令" if"

时间:2017-03-08 09:01:51

标签: nginx http-referer nginx-location

在我的Nginx服务器上,为了节省时间,我制作了etc / nginx / include.conf并将此行放在etc / nginx / sites-available / site1.conf中:

location / {
    include /etc/nginx/include.conf;
    try_files $uri $uri/ /index.php?page=$uri;
}

include.conf的内容:

if ($http_referer ~* (badreferers)) { 
        return 403; 
}

测试conf文件时,会出现此错误: [emerg]未知指令" if"在/etc/nginx/include.conf:1

当我将if语句直接放在etc / nginx / sites-available / site1.conf中时,它不会给出错误。

这里可能有什么问题?

更新: nginx -V给出:

  

nginx版本:nginx / 1.4.6(Ubuntu)由gcc 4.8.4构建(Ubuntu)   4.8.4-2ubuntu1~14.04.3)启用TLS SNI支持配置参数: - with-cc-opt =' -g -O2 -fstack-protector --param = ssp-buffer-size = 4 -Wformat -Werror = format-security -D_FORTIFY_SOURCE = 2' --with-ld-opt =' -Wl,-Bsymbolic-functions -Wl,-z,relro' --prefix = / usr / share / nginx --conf-path = / etc / nginx / nginx.conf --http-log-path = / var / log / nginx / access.log --error-log-path = /var/log/nginx/error.log --lock-path = / var / lock / nginx.lock --pid-path = / run / nginx.pid --http-client-body-temp-path = / var / lib / nginx / body --http-fastcgi-temp-path = / var / lib / nginx / fastcgi --http-proxy-temp-path = / var / lib / nginx / proxy --http-scgi-temp- path = / var / lib / nginx / scgi --http-uwsgi-temp-path = / var / lib / nginx / uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_spdy_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module

3 个答案:

答案 0 :(得分:1)

您使用旧的nginx版本1.4。在现代1.10.2上你的配置工作正常。

我检查了nginx的来源。 “include”指令不仅仅被包含文件的内容替换。它根据上下文进行不同的处理。所以你可以在包含文件中放置一些限制。至少在你的nginx版本中。 正如nginx documentation所说

  

包含的文件应包含语法正确的指令和   块。

答案 1 :(得分:0)

如果http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#if的一部分。你需要将重写模块添加到你的nginx中。

或者更好的我们来自nginx他们自己的官方包

http://nginx.org/en/linux_packages.html#stable

答案 2 :(得分:0)

看起来你在nginx配置文件中的某处就像

一样
include /etc/nginx/*.conf;

因此,您的文件 /etc/nginx/include.conf 不仅包含在 /etc/nginx/sites-available/site1.conf 中,还包含其他一些& #34;如果"指令无效,你会收到错误。