使用 nginx 作为反向代理运行 Apache Zeppelin
Posted
技术标签:
【中文标题】使用 nginx 作为反向代理运行 Apache Zeppelin【英文标题】:Running Apache Zeppelin with nginx as reverse proxy 【发布时间】:2017-08-09 07:38:56 【问题描述】:在我们当前的架构中,我们有两个 apache 前端服务器,在它们前面,我们有一个 nginx 负载均衡器。前面还有一个 nginx 反向代理。
我的问题是我正在尝试通过反向代理运行 Apache Zeppelin,而我在使用 websockets 时遇到了一些问题。
我收到这样的错误:400 HTTP method GET is not supported by this URL
下面是 Chrome 的“网络”标签显示的屏幕截图:
我为 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。
如果您对架构有任何疑问,请不要犹豫。
非常感谢你们!
【问题讨论】:
【参考方案1】:您可以添加到您的反向代理配置中
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
【讨论】:
这不适用于最新版本的 Zeppelin 和 Nginx。有任何想法吗?我尝试使用与您相同的配置。 我实际上只是将它用于 Zeppelin 0.8.2 + Nginx 1.16.1,它按预期工作【参考方案2】:经过大量的挖掘,我最终得到了这个配置:
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。有任何想法吗?我的配置和你的一样。 从那以后我就没有和 Zeppelin 合作过,希望你找到解决办法:D以上是关于使用 nginx 作为反向代理运行 Apache Zeppelin的主要内容,如果未能解决你的问题,请参考以下文章
Apache的网站,使用Nginx进行反向代理(1个IP绑定多个域名,对应多个网站)解决方案
Laravel - 所有路由上的 NGINX + Apache 反向代理 404