iis和tomcat同時執行,完美解決80埠衝突問題

海島拾貝發表於2018-07-19

背景:一臺vps伺服器上需要同時執行兩個網站,節(老)省(板)成(扣)本,用一個伺服器。一個是已經建好的官網(iis管理一鍵安裝的PHP網站),另一個是java 專案網站(jeecg框架修改的商城專案)。

問題:之前的官網已經執行著了,並且佔用著了80埠,然而新的網站也需要用到80埠,(你不可能讓使用者登入商城網站,網址後面手動加埠號吧!)

解決:使用Nginx反向代理方式使兩者相容

解決步驟:

環境:Windows server 2003 IIS7  Tomcat8

(後來升級成Windows server 2003 IIS8同樣可用)

IIS使用的域名:www.abc.com

要使用tomcat的域名:www.123.cn

首先IIS和Tomcat準確無誤的執行起來

下載Nginx,版本只要在1.1以上基本都行。官網下載地址

①修改IIS的所有網站專案的埠,修改為非80埠,因為我們的nginx伺服器要佔用80埠。

②設定tomcat的配置檔案:server.xml,開啟:

重點在於配置加粗部分:包含埠號(82),監聽的域名。(這裡我已經把註釋全去掉了,省事,這是整個server.xml檔案)

<?xml version='1.0' encoding='utf-8'?>

 

<Server port="8005" shutdown="SHUTDOWN">

 

  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

  <Listener className="org.apache.catalina.core.JasperListener" />

  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

 

  <GlobalNamingResources>

 

    <Resource name="UserDatabase" auth="Container"

              type="org.apache.catalina.UserDatabase"

              description="User database that can be updated and saved"

              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

              pathname="conf/tomcat-users.xml" />

  </GlobalNamingResources>

 

  <Service name="Catalina">

 

    <Connector port="82" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" URIEncoding="UTF-8" />

 

 

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

 

 

    <Engine name="Catalina" defaultHost="www.123.cn">

 

      <Realm className="org.apache.catalina.realm.LockOutRealm">

 

        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

               resourceName="UserDatabase"/>

      </Realm>

 

      <Host name="www.123.cn"  appBase="webapps"

            unpackWARs="true" autoDeploy="true">

 

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="localhost_access_log." suffix=".txt"

               pattern="%h %l %u %t "%r" %s %b" />

 

<Context path = "" docBase = "d:/website/hlcg_war_exploded"  />

 

      </Host>

    </Engine>

  </Service>

</Server>

 

③來到nginx的conf目錄,開啟nginx.conf,對裡面修改如下:

(這裡主要是新增轉發的域名,對於IIS我們全轉發到對應域名加上81埠,對於tomcat的我們全加上82埠,其中Nginx監聽80埠)

 

#user  nobody;

worker_processes  1;

 

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

 

#pid        logs/nginx.pid;

 

 

events {

    worker_connections  1024;

}

 

 

http {

    include       mime.types;

    default_type  application/octet-stream;

 

    #access_log  logs/access.log  main;

 

    sendfile        on;

    #tcp_nopush     on;

 

    keepalive_timeout  65;

 

    #gzip  on;

 

    server {

        listen       80;

        server_name  www.123.cn;

 

        location / {

       proxy_pass   http://www.123.cn:81;

        }

 

    }

 

    server {

        listen       80;

        server_name  www.abci.com;

 

        location / {

       proxy_pass   http://www.abc.com:82;

        }

    }

 

#可繼續按格式向下新增網址

}

 

Listen:Nginx監聽的埠(80),這裡不要改

server_name:Nginx監聽的域名。

proxy_pass:要轉發到的地址。

④開啟IIS伺服器,再開啟Tomcat伺服器,再開啟Nginx伺服器,訪問對應的域名,即Nginx配置中的server_name,記得不需要加埠!因為Nginx會幫你訪問這些網站。

搞定,外網訪問測試下吧

相關文章