140、【JavaEE】【Nginx】反向代理

1、概述

  • 反向代理,即服务器端的代理。用户并不知道反向代理的存在。由反向代理服务器接收请求然后转发给真正的服务器,服务器的响应再通过反向代理服务器返回给用户。

  • Nginx 实现反向代理的基础是虚拟主机,因为真正的服务器对于 Nginx 而言就是一个虚拟主机,只不过在配置的时候最起码要配置真正服务器的地址。

2、举例

2.1、使用 Nginx 反向代理与其部署在同一机器上的 Tomcat

  • 为了最佳效果,还需借助“本地 DNS” — hosts文件。在hosts文件中配置一个域名(www.nginxtest.com),映射到部署 Nginx 的主机 IP 地址中。

  • 部署 Nginx 和 Tomcat 的主机的 IP 地址是192.168.3.42(举例使用的是虚拟机)

  • 正常情况下,Tomcat 启动之后,使用http://192.168.3.42:8080就能访问到。但是“反向代理”要实现的是:通过 Nginx,使用www.nginxtest.com也能访问到 Tomcat。

Nginx-30
  • 1、开启 Tomcat,开放防火墙的8080端口,访问http://192.168.3.42:8080,验证 Tomcat 是否正常。
Nginx-31
  • 2、配置hosts:
Nginx-32
  • 3、Nginx 配置文件:
worker_processes  1;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  www.nginxtest.com;

        location / {
            proxy_pass http://192.168.3.42:8080; # 反向代理的关键,使用 proxy_pass 配置要代理的真实 IP 地址
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }    
    }
}

关于 server 块中的 server_name 不理解的可以参考:139、【JavaEE】【Nginx】虚拟主机配置 最后的流程图

  • 4、启动 Nginx 或已启动重新加载配置文件。在浏览器上输入http://www.nginxtest.com,可以看到 Tomcat 的页面,说明反向代理成功。
Nginx-33

2.2、使用 Nginx 反向代理与其部署在不同一机器上的 Tomcat

  • 原理跟“2.1、使用 Nginx 反向代理与其部署在同一机器上的 Tomcat”是一样的。只需要修改 Nginx 配置文件中对应 server 块中的proxy_pass指令即可(比如说proxy_pass http://192.168.3.55:8080等)。

2.3、使用 Nginx 反向代理多个 Tomcat

一般情况:

  • 如果每个 Tomcat 部署的是不同的内容,打算使用不同域名,那么这个时候,多个 Tomcat 就需要多个 server 块。

  • 如果每个 Tomcat 部署的内容相同,目的是为了降低服务器压力,这个时候使用一个 server 块即可,但需要进行一些与“负载均衡”有关的配置。

3、反向代理中 Nginx 配置文件中的 server 块

worker_processes  1;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  www.nginxtest.com;

        location / {
            proxy_pass http://192.168.3.42:8080;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }    
    }
}
  • listen:Nginx 所监听的本机(部署并启动 Nginx 的主机)端口。

  • server_name:虚拟主机名称,见 139、【JavaEE】【Nginx】虚拟主机配置 最后的“流程图”。

  • location 块:路由,一个 server 块中可以有多个 location 块。

常见 location 块的通式是:

location [=|~|~*|^~|@] /pattern/ {
    # ······
}

其中,location后的部分是定义的路由(映射)规则。通过指定模式来与客户端请求的 URI 相匹配。


https://segmentfault.com/a/1190000013267839

Nginx-34

https://blog.csdn.net/weixin_44367006/article/details/101715799

Nginx-35

proxy_pass:代理转发,被代理的真实服务器的 IP、端口等。

关于proxy_pass注意事项:https://blog.csdn.net/weixin_42170236/article/details/109315541

Nginx-38

4、总结

  • 使用 Nginx 作为反向代理服务器,可以直接将其看作“其所代理的服务器”,否则对一些现象很难理解。

比如说:Nginx 的配置文件如下:

worker_processes  1;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://192.168.3.42:8090;
        }
    }
}

浏览器访问http://192.168.3.42,然后看到 Tomcat 页面,没有问题:

Nginx-39

当修改 Nginx 配置文件中的location

worker_processes  1;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location = / {
            proxy_pass http://192.168.3.42:8090;
        }
    }
}

浏览器再次访问http://192.168.3.42,看到的结果:

Nginx-40

发现一些静态资源(CSS 等)无法加载。

Nginx-41

通过浏览器控制台,看到相关静态资源的响应码是404,但是“请求网址”是http://192.168.3.42/tomcat.css,而不是http://192.168.3.42:8090/tomcat.css

原因是在 Nginx 的配置文件中只提供了location = / {······}这一精确路由(使用=
页面中的<link href="tomcat.css" rel="stylesheet" type="text/css" />等转化为 HTTP 请求,由于 Nginx 中存在精确路由,所以请求的是http://192.168.3.42/tomcat.css(成功被代理)。但是 Nginx 并没有提供其他的路由与之匹配,导致404。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,295评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,928评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,682评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,209评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,237评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,965评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,586评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,487评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,016评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,136评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,271评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,948评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,619评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,139评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,252评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,598评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,267评论 2 358

推荐阅读更多精彩内容