"http"指令在这里不允许使用 Nginx

我开始并想要使用Nginx连接到我的数据库。这是我的sites-enables/default文件:

http {
  upstream database {
   postgres_server 192.168.0.166 dbname=stardb
                                user=username password=yourpass;
  }

  server {
    listen 80 default_server;
    listen [::]:80 default_server;

    location /ip {
      postgres_pass     database;

      postgres_query    HEAD GET  "SELECT http_host as ip FROM establishment_view where aet = 'NXS_DEV_FLO2'";
    }
  }
}

我遇到了这个错误:

nginx[7597]: nginx: [emerg] "http"指令在/etc/nginx/sites-enabled/default文件的第17行不允许使用

我看到这个错误很常见,但即使看了其他文章,我也不能解决我的问题。而我在nginx.conf文件中有这行:

include /etc/nginx/sites-enabled/*;

我是否需要在sites_enables/default文件中删除http行?

点赞
用户2830850
用户2830850

当你使用include命令时,它的效果就好像是将匹配文件的内容粘贴到主要的nginx.conf中一样。比如我的主要nginx.conf文件是这样的:

http {
   line1
   line2;
   include sites-enabled/*.conf;
}

而下面是sites-enabled/default.conf的内容:

http {
   server {
      line3;
   }
}

那么最终的配置文件就会变成这样:

http {
   line1;
   line2;
   http {
      server {
          line3;
      }
   }
}

由于http指令不允许嵌套在其他指令中,只能在根级别使用。所以当出现错误提示“在此处不允许使用”时,可以运行nginx -T命令查看完整的合并配置。

解决方法很简单,只需要将default文件中的http块删除即可,因为你已经在一个http块内部了。

2018-02-08 10:56:20