百度结果都是骗人的

2016-10-09  本文已影响79人  伍仟蚊

为解决资源整合的问题,需要使用Nginx对局域网内部的网站进行统一管理进行反向代理,以供外网访问。

根据URI(全球统一资源定位符)的定义

[scheme:][//host:port][path][?query][#fragment]

可知,常规用于区分站点的手段有三种

1,域名host

2,端口port

3,IP

域名需要DNS解析和绑定,不方便管理,而且被工信部限制使用(域名需要备案)

端口除了防火墙限制了端口开放外(局域网防火墙只允许特定少数端口开放如80),也受到ISP(网络供应商,如电信等的限制)

局域网网络处理局域网内,外网IP数量有限,校内资源无法使用IP进行对外公布

所以从常规的三种手段都无法解决这个难题

根据当前系统部署现状,以及网络环境,前面三种常用的技术方案都不太适用,因此延伸考虑path,但path通用的防火墙或者域名提供商难以对Path进行区分和转发,因此这需要一台独立的服务器以及特定的容器应用程序设置区分.

实现原理:

1. 服务器指定域名为:www.test.com

2. 设置Path(虚拟目录)www.test.com/source1

3. 将Path资源重定向到内部网络服务资源

查了诸多文档,以下链接的文档有参考价值,但也达不到目的

http://blog.csdn.net/dyllove98/article/details/8923212

server

{

listen  80;

location /test {

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_pass http://192.168.0.37/test/;

proxy_set_header Host 192.168.0.37;

proxy_set_header X-Forwarded-For $remote_addr;

}

location / {

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_pass http://192.168.0.37/;

proxy_set_header Host 192.168.0.37;

proxy_set_header X-Forwarded-For $remote_addr;

}

}

这段代码如果是单一的二级目录其实是可以转发的,受它启发证明二级目录转发是可以实现的,那问题来了,如果存在多个要如何办呢?https://zhangge.net/5054.html链接给出了另名的方式用upstream转发,原理也差不多。代码就不贴了。

综上所述要解决多个二级目录转发问题,关键是转发后,页面带的资源文件,没有带二级目录,以致资源丢失,说人话就是:

aaa.com/aaa -> 192.168.0.1 域名aaa.com/aaa指向内部地址,但当页面包含资源时,这些资源就没有/aaa了这样导致资源无法定向到192.168.0.1了。

因为http是无状态的,URL本身包含的内容已经无法用于再标识其本身,所以此时作为一个码狗突然想起本职工作,不如用Cookie标识一下。然后查阅了Nginx带的Cookie功能,果然可以,下面上菜了。

server {

listen 88;

server_name ~^\d+\.\d+\.\d+\.\d+$;

location /sise {

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_pass http://www.sise.com.cn/;

proxy_set_header Host www.sise.com.cn;

proxy_set_header X-Forwarded-For $remote_addr;

#这里设置根据虚拟目录设置一个HOST到客户端记住用户是访问test的

add_header Set-Cookie 'host=www.sise.com.cn';

}

location /mis {

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_pass http://ca.sise.com.cn:7001/tomcat/;

proxy_set_header Host ca.sise.com.cn:7001;

proxy_set_header X-Forwarded-For $remote_addr;

add_header Set-Cookie 'host=ca.sise.com.cn';

}

location /tomcat {

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_pass http://ca.sise.com.cn:7001/tomcat;

proxy_set_header Host ca.sise.com.cn:7001;

proxy_set_header X-Forwarded-For $remote_addr;

add_header Set-Cookie 'host=ca.sise.com.cn';

}

location / {

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_set_header X-Forwarded-For $remote_addr;

if ( $http_cookie ~ "^(.*www\.sise.com\.cn.*)$")

{

proxy_pass http://www.sise.com.cn;

break;

}

if ( $http_cookie ~ "^(.*ca\.sise.com\.cn.*)$")

{

proxy_pass http://ca.sise.com.cn;

break;

}

}

}

无法显示?

==============华丽分割线20170213修改=============

以下代码在非硬编码情况可以达到虚拟目录转发效果

location /web/ {

auth_basic "Restricted";

auth_basic_user_file htpasswd;

proxy_redirect off ;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header REMOTE-HOST $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass    http://localhost:808;

}

上一篇 下一篇

猜你喜欢

热点阅读