nginx 同一端口反向代理多个 tomcat

目标

使用 nginx 监听 80 端口,用户通过输入 tomcat1.hxstrive.com 和 tomcat2.hxstrive.com 两个域名访问到不同的 tomcat。其中一个 tomcat 监听 8080 端口,另一个 tomcat 监听 8081 端口。

效果

用户在浏览器输入 tomcat1.hxstrive.com 域名访问监听 8080 端口的 tomcat,输入 tomcat2.hxstrive.com 域名访问监听 8081 的 tomcat。

配置

(1)修改 hosts 文件,使用文本编辑器打开 C:WindowsSystem32driversetchosts 文件,添加如下内容:

127.0.0.1       tomcat1.hxstrive.com
127.0.0.1       tomcat2.hxstrive.com

将 tomcat1.hxstrive.com 和 tomcat2.hxstrive.com 域名映射到 127.0.0.1。

(2)分别启动两个 tomcat,分别监听 8080 和 8081 端口。如下图:

在同一台电脑上面启动两个 tomcat 需要修改 tomcat 端口如下:

a、修改 Server 的端口,这里修改为 8006,避免与另一个 tomcat 端口冲突。

<Server port="8006" shutdown="SHUTDOWN">
    <!-- ... -->
</Server>

b、修改 HTTP 端口,下面修改为 8081 端口,避免与另一个 tomcat 端口冲突。

<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

c、禁用 AJP 或者修改一个端口,避免与另一个 tomcat 端口冲突。

<!-- Define an AJP 1.3 Connector on port 8009 
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

(3)配置 nginx.conf 文件,内容如下:

# 配置工作进程数量
worker_processes  1;

events {
    # 设置工作进程可以同时打开的最大连接数
    worker_connections  1024;
}

http {
    # 引用 MIME 类型
    include       mime.types;
    default_type  application/octet-stream;

    server {
        # 监听 80 端口
        listen       80;
        # 设置虚拟服务器的名称
        server_name  tomcat1.hxstrive.com;

        location / {
            # 启用或禁用在与代理HTTPS服务器建立连接时通过TLS服务器名称指示扩展(SNI、RFC 6066)传递服务器名称
            proxy_ssl_server_name on;
            # 设置代理服务请求头字段
            # X-Real-IP 真实发出请求的客户端IP
            proxy_set_header X-Real-IP $remote_addr;
            # X-Forwarded-For 记录着从客户端发起请求后访问过的每一个 IP 地址
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # 确定客户端与代理服务器或者负载均衡服务器之间的连接所采用的传输协议(HTTP 或 HTTPS)
            proxy_set_header X-Forwarded-Proto $scheme;
            # HTTP 1.1 协议中新增的一个请求头,主要用来实现虚拟主机技术
            proxy_set_header Host $host;
            # 将请求转发到 http://localhost:8080 地址
            proxy_pass http://localhost:8080/;
        }
    }

    server {
        # 监听 80 端口
        listen       80;
        # 设置虚拟服务器的名称
        server_name  tomcat2.hxstrive.com;

        location / {
            # 启用或禁用在与代理HTTPS服务器建立连接时通过TLS服务器名称指示扩展(SNI、RFC 6066)传递服务器名称
            proxy_ssl_server_name on;
            # 设置代理服务请求头字段
            # X-Real-IP 真实发出请求的客户端IP
            proxy_set_header X-Real-IP $remote_addr;
            # X-Forwarded-For 记录着从客户端发起请求后访问过的每一个 IP 地址
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # 确定客户端与代理服务器或者负载均衡服务器之间的连接所采用的传输协议(HTTP 或 HTTPS)
            proxy_set_header X-Forwarded-Proto $scheme;
            # HTTP 1.1 协议中新增的一个请求头,主要用来实现虚拟主机技术
            proxy_set_header Host $host;
            # 将请求转发到 http://localhost:8081 地址
            proxy_pass http://localhost:8081/;
        }
    }

}

上面配置文件配置了两个 server 虚拟机,均监听 80 端口,但是他们的 server_name 不一样。一个 server_name 为 tomcat1.hxstrive.com,另一个 server_name 为 tomcat2.hxstrive.com。

(4)启动 nginx,或者重新加载 nginx 配置文件,访问效果如下图:

a、访问 tomcat1.hxstrive.com 域名,如下图:

b、访问 tomcat2.hxstrive.com 域名,如下图:

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号