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
- 1.
- 2.
- 3.
注意里面的域名有动态生成的,为了方便上面列出的域名解析到Nginx服务,选择安装DNS服务用于解析Nginx服务。
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
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
注意:这里安装的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
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;
...
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
如上图标注部分,增加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;
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
3.完成上面的配置后,使用如下命令验证配置文件是否正确,并重新加载配置
nginx -t
nginx -s reload
- 1.
- 2.
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"
- 1.
- 2.
- 3.
- 4.
解决方法:
需要在nginx.conf配置的http中增加DNS配置:resolver 99.13.31.205;