准备工作 :

<一个tomcat,一个nginx,两个项目> <一个前后端分离项目,一个前后端一体项目>

版本:

tomcat版本: 8.5.68
nginx版本: 1.20.1 (nginx安装后会有两个目录,具体怎么区分,等等细节自行百度)

安装tomcat以及nginx等步骤请自行百度,这里不一一赘述。

预期结果:

通过不同域名在浏览器访问,出现的页面(项目)不同

前后分离过程:

  1. 本人的tomcat安装目录在 /opt/apache-8.5.68/ 下,nginx在 usr/local/nginx/ 接下来用我自己的路径演示
  2. tomcat安装后自带一个webapps目录,我们如果想要同时运行两个项目需要自建一个文件夹,自取名字(最好简明知意)
  3. 原先文件夹名 : webapps 然后新创建一个 webappsNew 把我们提前打好的项目war包提前放进对应文件夹(什么包根据自己需求)
  4. 关键 : 配置/opt/apache-8.5.68/conf文件夹下的 server.xml文件, 命令 : vim server.xml (编辑此文件)
  5. 我们主要是在此文件中的同一个Server标签下 配置两个Service (Service name 随意取,可以重复)

<两个项目就需要两个Service标签,接下来只放一个,自行复制操作>

<Service name="Catalina">
  <Connector port="你的项目运行的端口号" protocol="HTTP/1.1"
               connectionTimeout="200000"
               redirectPort="443" />
     <Engine name="Catalina" defaultHost="localhost">     
     <Realm className="org.apache.catalina.realm.LockOutRealm">
 <Realm className="org.apache.catalina.realm.UserDatabaseRealm"                                                                                                   
               resourceName="UserDatabase"/>                                                                                                                             
      </Realm>

      <Host name="localhost"  appBase="webapps"                                                                                                                          
            unpackWARs="true" autodeploy="true">
            <Context path="" docBase="/opt/apache-tomcat-8.5.68/你的项目所在文件夹名称!/你的war包名称!" debug="0" reloadable="true" />                                                                
        <!-- Access log processes all example.                                                                                                                           
                          Documentation at: /docs/config/valve.html                                                                                                      
             Note: The pattern used is equivalent to using pattern="common" -->                                                                                          
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"                                                                                    
               prefix="localhost_access_log" suffix=".txt"                                                                                                               
               pattern="%h %l %u %t "%r" %s %b" />                                                                                                             

      </Host>
    </Engine>
  </Service>

Connector port {这里的端口号,要和你的idea里配置的相同(如果配置了的话)}

不同机器部署nginx nginx部署两个项目_tomcat


配置文件中样子↓:

server.port=****

两个项目的tomcat启动端口号都不可以一致!

如果中间出了错误,如:tomcat无法正常启动,报错等等,需要去logs文件夹利用命令 : tail -f catalina.out 实时查看报错信息
或者是删除一个Service,只启动一个项目,挨个排查错误!


Nginx :

<不是两个域名访问同一ip地址的请跳过这一小段>

1.本人利用的是修改自己电脑上的 C:\Windows\System32\drivers\etc 下的 host文件,利用两个域名访问同一个系统ip地址!(只有一个系统)

2.修改hosts文件可能会没有权限修改内容

3.

不同机器部署nginx nginx部署两个项目_html_02

右键 hosts 属性,修改系统用户对于文件的控制权限,直接点击完全控制后 ,点击应用即可!
(还是不会的话你就百度吧)

不同机器部署nginx nginx部署两个项目_不同机器部署nginx_03


常规里的 只读记得取消 然后应用

接下来就可以修改hosts文件内的内容了!

不同机器部署nginx nginx部署两个项目_tomcat_04


在最后另起一行,格式:

ip地址 + 空格 + 你的域名(本机访问不需要真正购买域名,想要其他人访问需要买域名)

这里没写自己配置的地址,需要保密

修改完以后!!!切记把hosts文件的所有权限修改回去,保证你的系统文件安全!!!


不修改hosts文件直接操作Nginx:

/usr/local/nginx/conf

配置文件操作: vim nginx.conf

两个项目,也是配两个server,这里只给一个,具体的自己根据情况改变!

server {
        listen       80;#这个server判断的是前后端分离的项目,当你无论输入域名或者ip地址的时候,不加端口号形式的访问,都会自动访问80,除非特殊指定!
        server_name  (我刚才hosts配的域名),不配置的直接写自己访问系统的ip;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;#前后端分离的前端页面记得打包后放入nginx/html文件夹!
        }
        location /tomcat下的项目war包名称/
        {   
            proxy_pass http://127.0.0.1:这个server指定的项目的tomcat的启动端口号!/tomcat下的项目war包名称/;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

<修改hosts意义>
上面的代码代表着,当我在自己电脑浏览器上输入我自己的域名 比如:www.baidu.com ,会自动跳转到我在hosts文件里配置的ip地址的系统,也就是我自己的系统,然后nginx做判断,你是进入的哪一个server,然后你输入域名的时候没有加端口默认访问80,所以进入nginx以后跳转到你指定端口的tomcat

<不修改hosts意义>

你直接用你的linux系统的ip,在浏览器输入(前提是nginx和tomcat已经启动(前后一体的不需要启动nginx)),然后是不加端口号的(因为我的nginx配置的是80端口进入后进行转发(反向代理)),你可以根据自己的情况进行修改!举一反三,然后转发到我的tomcat后即可访问!

nginx也有log,出错了多百度,耐心细心的思考,查漏补缺,如果遇到tomcat或者nginx启动失败,可能是复制我的配置文件内容出错了

检查: 版本号,大小写,字母缺失,整体流程的思考

-----------------------------------------------------------------------END------------------------------------------------

9/15日补充: 前后端分离的项目,在前端记得把自己的端口修改了! 我的需求是,客户端通过浏览器访问80端口然后通过nginx.conf的server转发到指定tomcat端口(和项目启动端口一致),所以我的前端中没有指定端口,默认就是80.