使用nginx作为反向代理运行Apache Zeppelin

时间:2017-03-17 16:33:47

标签: apache nginx websocket reverse-proxy apache-zeppelin

在我们当前的架构中,我们有两个apache前端服务器,在它们前面,我们有一个nginx负载均衡器。在那之前是一个nginx反向代理。

我的问题是我试图通过反向代理运行Apache Zeppelin,而且我对websockets有一些问题。

我收到如下错误:400 HTTP method GET is not supported by this URL

以下是Chrome的“网络”标签显示的屏幕截图: enter image description here

我为Zeppelin添加了反向代理配置:

error_log  /var/log/nginx/nginx_error.log  warn;
server {
    listen       80;
    server_name  localhost;

    location /zeppelin/ {
        proxy_pass http://zeppelin:8080/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade websocket;
        proxy_set_header Connection upgrade;
    }

    # fallback
    location / {
        return 301 http://ci.blablalablab.com/app/;
    }  
}

Zeppelin正在一个docker容器内运行,我公开了8080端口,它的主机名是:zeppelin。

如果您对架构有任何疑问,请不要犹豫。

非常感谢你们!

2 个答案:

答案 0 :(得分:3)

您可以添加到反向代理配置

location /ws {  # For websocket support
    proxy_pass http://zeppelin:8080/ws;
    proxy_http_version 1.1;
    proxy_set_header Upgrade websocket;
    proxy_set_header Connection upgrade;
    proxy_read_timeout 86400;
}

参考:Zeppelin 0.7 auth docs

答案 1 :(得分:1)

经过大量的挖掘后,我最终得到了这样的配置:

location /zeppelin/ {
    proxy_pass http://zeppelin:8080/;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_redirect off;
}


location /zeppelin/ws {
    proxy_pass http://zeppelin:8080/ws;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
}

这工作得非常好,谢谢大家的努力;)