【nginx】一 nginx http_proxy转发、下载文件常规配置

版权声明:转载请标明出处。 https://blog.csdn.net/u010720408/article/details/89243233

需求

只能访问生产机器一个ip、有限port的外网机,要查看spark 正在运行task和history的情况,还有能够查看日志,下载日志

nginx转发配置

#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/后面形成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 中使用$ip 导致302 重定向问题

由于缓存机制,一开始没有发现 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

猜你喜欢

转载自blog.csdn.net/u010720408/article/details/89243233