只能访问生产机器一个ip、有限port的外网机,要查看spark 正在运行task和history的情况,还有能够查看日志,下载日志
#nginx -t 可以查看到当前使用的配置文件位置
#location 前缀字符窜匹配时 自动就截取了后段部分拼接到http_proxy中
server {
listen 8091;
server_name localhost;
set $ip1 xxx;
set $ip2 xxx;
location ^~/4040/ {
proxy_pass http://$ip1:4040/;
}
location ^~/8084/ {
proxy_pass http://$ip2:8084/;
}
location ^~/log1/8042/ {
proxy_pass http://$ip1:8042/;
}
location ^~/log2/8042/ {
proxy_pass http://$ip2:8042/;
}
location ^~/download {
alias /;
add_header Content-Type "application/octet-stream";
}
}
#listen 8091端口,并且访问当前nginx的http请求(如果是写域名,多个域名指到当前nginx所在服务器,猜想域名相同可能会不行,未验证,都配置localhost省事)
#set $varname varvalue 在nginx中变量赋值,全都是字符窜,减少硬编码后期变更的麻烦
#location ^~/4040/ 匹配 路径/4040/开头的,并将后段截取
#proxy_pass http:// i p 1 : 8084 、 将 后 半 段 加 到 h t t p : / / ip1:8084、 将后半段加到http:// ip1:8084、将后半段加到http://ip1:8084/后面形成url转发请求
例如输入的:http://proxy_ip:8091:/4040/xxxxx 就会被nginx转发到请求http://ip1:8084/xxxx去
#至于为什么不用rewrite、redirect,两个都还未验证;因为怕redirect返回给浏览器浏览器自己再跳转会被拦截,而rewrite也还不清楚
#spark history组件是spark webUI的组件,history job 的端口18080已经在nginx配置过,但是正在运行的job任务看不到,端口是4040 再到8084 看job UI,再到其他各个机器的执行日志
而前段浏览器只能访问指定nginx所在机器的有限个port,所以都用一个port来进行转发,人工手动在前台更改为proxy_ip:port 后面在加上 特殊的前缀路径进行转发请求
location ^~/download {
alias /;
add_header Content-Type "application/octet-stream";
}
#alias /; 取目标目录为服务器根目录,用root /;的方式 会变成去 /download/下面的目录找文件,而alias就是去/下面找文件
#加上add_header Content-Type “application/octet-stream” 是防止浏览器都当做流文件下载,而不是有些文件直接页面展示
#nginx自带的模块 中nginx自己缓存临时文件,然后必须要有后台程序处理文件,这个就蛋疼了,所以没搞。
由于缓存机制,一开始没有发现 proxy_pass http://:8084$ip1/ 的问题,但是后面发现什么路径都到了ip1:8084/cluster;
原来nginx有 在proxy_pass 中使用$ip时,会给header location 赋值 为proxy_pass的值进行302重定向(浏览器根据302赞成再去访问header中location),就只访问该路径,而不是拼接后的url,
指得回退到,每一个都手写ip,而不能用变量名的问题了,至于为什么不用域名,因为银行体系卡的严,各种网段、ip、port、网关配置,麻烦。生产机器间能用域名访问,那是搭建storm、hadoop、spark、ambari时开发人员自己在各个机器/etc/hosts文件中配置的;
外面的机器连接想都不要想,只能访问指定ip