使用 nginx 和 tomcat 配置反向代理和动静分离

本贴最后更新于 2090 天前,其中的信息可能已经时异事殊

背景

本人主修的编程语言是 Java 语言,因此最开始接触的 Web 开发也是 JSP 技术。使用 Java 开发的 Web 应用需要部署在专门的服务器程序上运行,比如 Tomcat。但是一般很少会有人将 Tomcat 作为用户直接访问的服务器的,一般都是使用 nginx 或者 Apache 进行反向代理。我使用的是 nginx。nginx 是一个俄罗斯程序员开发的服务器程序,它本身只能提供静态资源的服务,但它的优点在于并发访问量可以达到非常大的水平。

反向代理的优点

反向代理的主要优点是提高并发访问数。单独一个 Tomcat 服务器能提供的并发访问数不高,如果在主机上部署多个 Tomcat 服务器,使用 nginx 进行反向代理,动态调整用户的请求到不同的 Tomcat 服务器(这个过程称为负载均衡),就可以使并发访问量和单个 Tomcat 服务器相比得到成倍的提升。

动静资源分离也常常和反向代理在一起被提起,比如你部署了一个 Java Web 应用,这是一个动态资源,需要 Tomcat 提供服务(由反向代理实现),但你的网站上同时还有其他的比如纯 HTML 的网页、图片等等静态资源,这些静态资源就可以由 nginx 直接提供给访问者,减少了调用 Tomcat 而产生的多余资源消耗,同样静态资源可以获得相当大的一个并发访问量。

可以画一张图来更清晰地表明反向代理的工作流程。

  1. 用户请求动态资源
    反向代理.png
  2. 用户请求静态资源
    动静分离.png

具体配置方法

配置的方法有很多,我以我自己的实现方法来进行讲解。

首先找到 nginx 的配置文件 nginx.conf。如果是使用 yum 安装的 nginx 那么它的默认路径是在/etc/nginx/中。在该文件中找到:

server {
        listen       80;  
        server_name  localhost;

        location / {
            root   /user/share/nginx/html;
            index  index.html index.htm;
        }  

        ……

也有可能和上述内容有些许不同,重点是 listen 80,只要找到它,就确定了位置。

80 端口一般代表 http 协议,也就是我们在浏览器上输入网址或者 IP 地址时默认使用的访问协议。server_name 用于配置虚拟主机,我们现在暂时用不到。重点在 location。location 后面代表访问的虚拟目录,/ 代表根目录,,也就是直接输入域名或 IP 地址访问的目录,以本地主机为例,就是直接在浏览器里输入 127.0.0.1。在 location 的大括号里面,root 代表的是虚拟目录映射在本地主机上的实际目录,如果是使用 yum 方式安装的 nginx,那么它的默认访问目录是 /user/share/nginx/html。index 后面代表的是该目录的首页文件,像示例中就设定了首页文件为 index.html 或者 index.htm。

假如我们要用 nginx 反向代理 tomcat,并且希望在浏览器直接输入 主机的IP地址 时访问到 nginx 默认的首页,而输入 主机的IP地址/tomcat 时访问到 tomcat 上的内容,我们就要这样配置。

server {
        listen       80;  
        server_name  localhost;

        location / {
            root   /user/share/nginx/html;
            index  index.html index.htm;
        }  

        location /tomcat {
            proxy_pass   http://127.0.0.1:8080;
        }
        ……

加上去的内容就相当于告诉 nginx,在用户访问 IP地址/tomcat 时,就将访问请求传递到 8080 端口(因为 tomcat 默认运行在 8080 端口,如果修改过 tomcat 默认运行端口,就将 8080 改成修改后的端口号)。

这样配置完成后,我们就同时实现了动静资源分离和反向代理。直接访问 IP地址 时,nginx 给用户的是静态资源,减小计算资源的消耗,访问 IP地址/tomcat 时则由 tomcat 提供服务,实现了反向代理。

上面讲的是最基本的配置反向代理和动静分离的方法,还有更加高级的方法,比如设置不同的三级域名访问到不同的目录,动静分离特定格式的文件等等。在此我不做展开,大家有兴趣可以去网上寻找其他资料。

  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖
  • 动静分离
    1 引用
  • 反向代理
    9 引用 • 38 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...