elasticsearch head插件无法通过nginx反向代理工作

mxg2im7a  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(2)|浏览(854)

我有elasticsearch的头部插件安装在不同的服务器上运行。我还为我的es示例设置了一个nginx反向代理。配置如下所示:

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
      listen       80;
      server_name  es.mydomain.net;
      location / {
          proxy_set_header    Host $http_host;
          proxy_set_header    X-Real-IP   $remote_addr;
          proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;

          proxy_redirect off;
          proxy_pass  http://127.0.0.1:9200;
      }
    }
}

点击链接 http://es.mydomain.net/ 工作正常,我得到状态200的回复。但是,如果我尝试点击链接 http://es.mydomain.net/_plugin/head/ ,我似乎得到了一个空白页。注意,如果我直接访问head插件而不使用反向代理,则页面加载良好 http://SERVERIP:PORT/_plugin/head/ .
编辑:
在做了更多的调试之后,我看到了一个 net::ERR_CONTENT_LENGTH_MISMATCH 该页的控制台出错。在看了nginx的日志之后,为了了解错误是什么,我发现了真正的罪魁祸首,就是这个错误:

2015/05/27 16:26:48 [crit] 29765#0: *655 open() "/home/web/nginx/proxy_temp/6/0
0/0000000006" failed (13: Permission denied) while reading upstream, client: 10.
183.6.63, server: es.mydomain.com, request: "GET /_plugin/head/dist/app.js HTT
P/1.1", upstream: "http://127.0.0.1:9200/_plugin/head/dist/app.js", host: "es.my
domain.com", referrer: "http://es.mydomain.com/_plugin/head/"

我在google上特别搜索了这一条,似乎这可以发生,因为worker进程是 nobody ,并且它尝试读取/写入的文件夹可能没有正确的权限。仍在研究这个问题,但找到答案后会更新
编辑2:删除不必要的信息,使问题更直接。

drnojrws

drnojrws1#

为了绕过许可,我想出了两个解决方案,所以我将把它们都介绍给大家。
关于我的nginx设置需要知道的一点是,我没有使用sudo来安装它。我取消了tar文件的归档、配置并安装了它,因此它位于/home/username/nginx/中。
问题是,启动nginx是在“nobody”下创建一个worker进程,然后该进程尝试读取/写入/home/username/nginx/proxy\u temp/,但它没有这样做的权限。网络上的解决方案 chown nobody 临时文件夹,但这个解决方案并不适合我的特殊情况,因为我们在用户名的家里。

解决方案1:

添加 user USERNAME; 到nginx.conf的顶部,以便它以指定的用户名运行工作进程。这不再导致权限问题,因为username有权在所需的临时文件夹中读/写。

解决方案2:

将代理服务器临时路径添加到服务器配置。这样,您就可以为nobody进程指定一个文件夹来创建它具有读/写权限的文件夹。注意,如果nginx服务器使用其他*\u临时文件夹,您可能仍然会遇到权限问题。

server {
  listen       80;
  server_name  es.mydomain.net;
  location / {
      proxy_set_header    Host $http_host;
      proxy_set_header    X-Real-IP   $remote_addr;
      proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;

      proxy_redirect off;
      proxy_pass  http://127.0.0.1:9200;
      proxy_temp_path /foo/bar/proxy_temp

  }
}

我个人更喜欢解决方案1,因为它将应用于所有服务器块,而且一旦conf文件变得更复杂,我就不必担心其他*\u temp文件夹。

krugob8w

krugob8w2#

你必须在所有es节点上安装插件头。

相关问题