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

4
在我们当前的架构中,我们有两个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个回答

5
您可以将以下内容添加到您的反向代理配置中。
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;
}

Reference: Zeppelin 0.7 auth docs


这在最新版本的Zeppelin和Nginx上不起作用。有什么想法吗?我尝试使用与您相同的配置。 - Sanket Tarun Shah
1
我实际上只是在 Zeppelin 0.8.2 + Nginx 1.16.1 上使用它,它按预期工作。 - Adam Szmyd

3

经过大量的挖掘,我最终得到了以下配置:

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";
}

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


这在最新版本的Zeppelin和Nginx上不起作用。有什么想法吗?我的配置与你的相同。 - Sanket Tarun Shah
自那以后我就没有使用过Zeppelin了,希望你已经找到了解决方案:D - IgZiStO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接