【问题标题】:"http" directive is not allowed here NginxNginx 这里不允许使用“http”指令
【发布时间】:2018-02-08 10:39:25
【问题描述】:

我开始,我想用 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 行?

【问题讨论】:

    标签: nginx lua


    【解决方案1】:

    当您包含它时,它与粘贴匹配文件中的内容一样好。所以如果我的主要nginx.conf

    http {
       line 1
       line 2;
       include sites-enabled/*.conf;
    }
    

    下面是sites-enabled/default.conf

    http {
       server { 
          line 3;
       }
    }
    

    有效配置变为

    http {
       line 1;
       line 2;
       http {
          server {
              line 3; 
          }
       }
    }
    

    现在http 指令不允许在任何其他指令中使用,您可以在根级别使用它。所以"http" directive is not allowed here的错误。您应该运行 nginx -T 来查看它使用的完整组合配置。

    解决方法很简单,从default 文件中删除http 封闭块,因为您已经在http 块内

    【讨论】:

    • 感谢您的回答,我删除了sites-enabled 中的http。现在我有这个错误:nginx: [emerg] unknown directive "postgres_server" in /etc/nginx/sites-enabled/default:20
    • 你需要用我假设github.com/FRiCKLE/ngx_postgres的附加插件编译nginx
    • 你知道如何添加这个模块吗?对不起,我是初学者。
    • 看看这个openresty.org/en/components.html。然后使用包含的 postgres 模块构建
    • 谢谢,我会试试这个。
    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    相关资源
    最近更新 更多