映射80端口如何使用nginx配置两个tomcat?

cosgou 发布于 2016/06/16 08:04
阅读 4K+
收藏 1

        服务器是Windows ,已映射80端口,现有两个tomcat实例,例如实例A端口为8081,实例B端口为8082,需要共用80端口;假设本地地址localhost为 192.16.10.10;

    该如何配置 nginx.conf?

    现我 nginx.conf 配置如下:

http{

        .........

    server{

        listen      80;

        server_name    192.16.10.10:8081;

        location / {

            proxy_pass http://localhost:8081

        }

      }

      server{

            listen      80;

            server_name      www.acdf.com;

            location / {

                    proxy_pass http://localhost:8082

        }

     }

}

    我的疑问

    1.需要两个tomcat实例共用 80 端口,是不是 监听  listen  都为 80 ?

    2.nginx 是怎样根据请求地址 来正则匹配 到不同的 虚拟主机的?我的理解是申请两个域名 都绑定到我映射的同一 ip,然后在不同的 server{} 中的 server_name 填入两个域名,通过域名匹配再转到本地的     http://localhost:8081 

    3.就是 server_name  ,这个到底是什么意思,该怎么填写?网上有说填 localhost 的,也有 像我第一种配置直接写ip:port   192.16.10.10:8081 的。如果是这种ip:port 方式的话,我的前端请求地址该如何写,是直接写我映射的地址  http://192.16.10.10   还是  http://192.16.10.10:8081  ? 但是这样写的话,我监听的 80 端口还有作用吗? 我的 server_name 又该怎样写?


请各位大神们不惜赐教。。


加载中
1
车开源
车开源

用域名不是很好解决吗?

server{

            listen      80;

            server_name      www.a.com;

            location / {

                    proxy_pass http://localhost:8080

        }

     }


server{

            listen      80;

            server_name      www.b.com;

            location / {

                    proxy_pass http://localhost:8082

        }

     }
1
geminiblue
geminiblue

upstream java {
   server 127.0.0.1:8080;
   server 127.0.0.1:8082;
}
server {
   listen 80;
   server_name 127.0.0.1;
   location / {
      proxy_pass http://java;
   }
}



这叫最简单的负载均衡,连权重都不用配置。。。

c
cosgou
大神,我已有微信在 80 端口,手机 app 的tomcat 端口 是8085, 如何配置 将 app 也开放到 80 端口?
tinshen
tinshen
简单粗暴。 如果要根据访问的路径跳转的话。 可以考虑使用正则。
0
zvc888
zvc888
server_name 基于域名即可
0
Feng_Yu
Feng_Yu
这不就是基于域名的虚拟主机么?
0
c
cosgou

引用来自“geminiblue”的评论

upstream java {
   server 127.0.0.1:8080;
   server 127.0.0.1:8082;
}
server {
   listen 80;
   server_name 127.0.0.1;
   location / {
      proxy_pass http://java;
   }
}



这叫最简单的负载均衡,连权重都不用配置。。。

大神,我现在已有微信在 80 端口,手机 app 在 tomcat 的 8085 端口 ,nginx.conf中app 配置 如下:

http{

    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    server {
      
      listen       8083 ssl;
      server_name  localhost;

      ssl_certificate      \zs\server.crt;
      ssl_certificate_key  \zs\server.key;

      ssl_session_cache    shared:SSL:1m;
      ssl_session_timeout  5m;

      ssl_ciphers  HIGH:!aNULL:!MD5;
      ssl_prefer_server_ciphers  on;

      location / {
            proxy_pass  http://localhost:8085;
      }
   }

怎样配置才能把我的 app 开放到 80 端口?开放到外网?


0
geminiblue
geminiblue
    server {
       
      listen       443 ssl;
      server_name  xxx.xxx.com;


      ssl_certificate      \zs\server.crt;
      ssl_certificate_key  \zs\server.key;


      ssl_session_cache    shared:SSL:1m;
      ssl_session_timeout  5m;


      ssl_ciphers  HIGH:!aNULL:!MD5;
      ssl_prefer_server_ciphers  on;


      location / {
            proxy_pass  http://localhost:8085;
      }
   }


好了,加到那个server下面

geminiblue
geminiblue
wiki.nginx.org
c
cosgou
刚刚才发现按我那样的配置其实是可以外网访问的,但还是不懂 listen 与 server_name 的含义,谢谢大神了
0
S
ServentJames

引用来自“车开源”的评论

用域名不是很好解决吗?

server{

            listen      80;

            server_name      www.a.com;

            location / {

                    proxy_pass http://localhost:8080

        }

     }


server{

            listen      80;

            server_name      www.b.com;

            location / {

                    proxy_pass http://localhost:8082

        }

     }

GOOD

返回顶部
顶部