如何使用Nginx实现CDSW的跨网段访问
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢
1.文档编写目的
在企业安装了CDSW后,由于服务安装在生产网络,考虑到集群的安全企业不允许将生产环境的网络直接放通给办公网或外网访问,如果需要在办公网或是外网访问则需要通过反向代理的方式来实现,本篇文章主要介绍如何使用Nginx反向代理CDSW服务。具体实现流程:
1.客户端发送请求(cdsw1.fayson.com)通过DNS1解析成Nginx Server的IP地址。
2.Nginx Server接收到客户端请求将cdsw1.fayson.com请求转发至CDSW服务。
- 内容概述
1.DNS服务安装及配置
2.Nginx配置及版本要求
3.CDSW访问验证
4.总结
- 测试环境
1.CDSW1.2.2基于图中的DNS2服务运行正常
2.CM和CDH版本为5.13.1
3.CDSW和CDH集群操作系统为RedHat7.2
4.Nginx服务器为RedHat6.4
5.Nginx版本为1.8.6
2.安装DNS服务并配置泛域名解析
该DNS服务主要用于解析Nginx服务IP地址,由于CDSW使用了泛域名,使用了多个域名如:
livelog.cdsw1.fayson.com
consoles.cdsw1.fayson.com
tty-{xxx}.cdsw1.fayson.com
(可左右滑动)
注意里面的域名有动态生成的,为了方便上面列出的域名解析到Nginx服务,选择安装DNS服务用于解析Nginx服务。
具体DNS服务配置这里就不详细讲述了,可以参考Fayson前面的文章《如何在Windows Server2008搭建DNS服务并配置泛域名解析》,《如何在Windows Server2012搭建DNS服务并配置泛域名解析》和《如何利用Dnsmasq构建小型集群的本地DNS服务器》这里Fayson选择使用DNSmasq搭建DNS服务。
1.如下是Fayon的/etc/dnsmasq.conf配置片段信息:
conf-dir=/etc/dnsmasq.d
resolv-file=/etc/resolv.Dnsmasq.conf
strict-order
listen-address=99.6.xxx.xxx
addn-hosts=/etc/hosts
address=/cdsw1.fayson.com/99.6.xxx.xxx
address=/cdsw1/99.6.xxx.xxx
(可左右滑动)
注意:这里安装的DNS服务,并不是配置在Nginx服务服务上,而是用于配置在你的客户端。即第一章的DNS1服务。
2.在访问Nginx的客户端配置DNS
在客户端CMD命令行测试域名是否能正常解析到Nginx服务
3.Nginx版本要求
由于CDSW使用了WebSocket服务,所以在Nginx版本上有一定的要求,需要Nginx版本大于1.3(含)具体可以参考官网说明:
https://www.nginx.com/blog/websocket-nginx/
本次测试选用的Nginx版本为Nginx1.8.6
关于Nginx的安装,这里就不再做说明了,大家可以参考Fayson前面的文章《如何使用Nginx实现Impala负载均衡》里面讲述了Nginx的安装及启停。
4.Nginx配置
1.修改nginx.conf文件,在http内添加如下内容
http {
include mime.types;
include reverse-proxy.conf;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
resolver 99.13.31.205;
...
}
(可左右滑动)
如上图标注部分,增加include和resolver配置。
include配置项的reverse-proxy.conf文件主要配置访问CDSW服务的反向代理。
resolver配置项,主要是为了防止“no resolver defined to resolve”,因为CDSW服务中使用了泛域名解析,在proxy_pass直接设置访问地址则不会出现这个问题。
2.编写reverse-proxy.conf配置文件,内容如下
server {
listen 80;
server_name cdsw1.fayson.com;
location / {
proxy_cookie_path / /;
proxy_pass http://cdsw1.fayson.com;
}
}
#配置反向代理
server {
listen 80;
server_name consoles.cdsw1.fayson.com;
location / {
add_header 'Access-Control-Allow-Origin' 'http://cdsw1.fayson.com';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET';
proxy_pass http://consoles.cdsw1.fayson.com/;
}
}
server {
listen 80;
server_name livelog.cdsw1.fayson.com;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://livelog.cdsw1.fayson.com;
proxy_redirect off;
}
}
#配置WebSocket的反向代理
server {
listen 80;
server_name *.cdsw1.fayson.com;
location ~* /*/ws {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://$host;
proxy_redirect off;
}
location / {
add_header 'Access-Control-Allow-Origin' 'http://cdsw1.fayson.com';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET';
proxy_pass http://$host;
}
}
server {
listen 80;
server_name cdh.fayson.com;
location / {
proxy_pass http://99.13.31.205:7180;
}
}
server {
listen 80;
server_name ads.tableau.cmbchina.cn;
location / {
proxy_pass http://99.6.136.193;
}
}
(可左右滑动)
3.完成上面的配置后,使用如下命令验证配置文件是否正确,并重新加载配置
nginx -t
nginx -s reload
(可左右滑动)
nginx–s reload 命令在不重启服务的情况下重新加载Nginx的配置。
5.访问CDSW服务验证是否配置成功
1.在客户端浏览器输入http://cdsw1.fayson.com,输入用户名和密码登录
2.启动一个Session并运行代码
3.打开会话终端
4.创建工程
5.删除工程
6.总结
- 在配置DNS的时候需要注意,Nginx的反向代理域名和CDSW访问的域名是一致的,因为CDSW服务中有部分连接使用的是CDSW Master的HostName,所以我们使用相同的域名做反向代理后避免了跨域访问Session丢失导致访问权限问题。
- CDSW使用WebSocket服务,Nginx版本必须大于1.3,否则WebSocket反向代理会异常。
7.常见问题
在访问Nginx时在error.log中有如下异常:
2018/01/17 17:08:21 [error] 11065#0: *2952 tty-u5wgknkxfa2315i1.cdsw1.fayson.com could not be resolved
(110: Operation timed out), client: 99.7.42.25, server: *.cdsw1.fayson.com, request: "GET /5kg4v7tey3
1x4x7y/ HTTP/1.1", host: "tty-u5wgknkxfa2315i1.cdsw1.fayson.com", referrer: "http://cdsw1.itc.cmbchina
.cn/admin/demo/engines/u5wgknkxfa2315i1"
(可左右滑动)
解决方法:
需要在nginx.conf配置的http中增加DNS配置:resolver 99.13.31.205;
提示:代码块部分可以左右滑动查看噢 为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操
- 使用PowerShell简化我的工作
- 几个提高工作效率的Python内置小工具
- J2EE相关总结
- (53) 剖析Collections - 算法 / 计算机程序的思维逻辑
- Flask使用Blueprint进行多模块应用的编写
- 优雅的在终端中编写Python
- Eclipse相关问题
- (54) 剖析Collections - 设计模式 / 计算机程序的思维逻辑
- Django 博客教程(三):创建应用和编写数据库模型
- package-info.java文件详解
- 在Spring下集成ActiveMQ
- Java中只有按值传递,没有按引用传递!
- 我是如何使用Python来自动化我的婚礼的
- left join 过滤条件写在on后面和写在where 后面的区别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python实现一个猜拳游戏
- 实验5 OpenGL二维几何变换
- Python关键字及可变参数*args,**kw原理解析
- 实验6 OpenGL模型视图变换
- python学生管理系统的实现
- 详解Android使用Handler造成内存泄露的分析及解决方法
- android使用flutter的ListView实现滚动列表的示例代码
- 实验7 3D机器人
- EasyValidate优雅地校验提交数据完整性
- 实验8 OpenGL太阳系动画
- Django实现列表页商品数据返回教程
- 实验9 OpenGL光照
- Python实现多线程下载脚本的示例代码
- Android自定义控件仿iOS滑块SwitchButton
- kotlin gson反序列化默认值失效深入讲解