准备工作 :
<一个tomcat,一个nginx,两个项目> <一个前后端分离项目,一个前后端一体项目>
版本:
tomcat版本: 8.5.68
nginx版本: 1.20.1 (nginx安装后会有两个目录,具体怎么区分,等等细节自行百度)
安装tomcat以及nginx等步骤请自行百度,这里不一一赘述。
预期结果:
通过不同域名在浏览器访问,出现的页面(项目)不同
前后分离过程:
- 本人的tomcat安装目录在
/opt/apache-8.5.68/
下,nginx在usr/local/nginx/
接下来用我自己的路径演示 - tomcat安装后自带一个webapps目录,我们如果想要同时运行两个项目需要自建一个文件夹,自取名字(最好简明知意)
- 原先文件夹名 : webapps 然后新创建一个 webappsNew 把我们提前打好的项目war包提前放进对应文件夹(什么包根据自己需求)
- 关键 : 配置/opt/apache-8.5.68/conf文件夹下的 server.xml文件, 命令 :
vim server.xml
(编辑此文件) - 我们主要是在此文件中的同一个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里配置的相同(如果配置了的话)}
配置文件中样子↓:
server.port=****
两个项目的tomcat启动端口号都不可以一致!
如果中间出了错误,如:tomcat无法正常启动,报错等等,需要去logs文件夹利用命令 : tail -f catalina.out
实时查看报错信息
或者是删除一个Service,只启动一个项目,挨个排查错误!
Nginx :
<不是两个域名访问同一ip地址的请跳过这一小段>
1.本人利用的是修改自己电脑上的 C:\Windows\System32\drivers\etc
下的 host文件,利用两个域名访问同一个系统ip地址!(只有一个系统)
2.修改hosts文件可能会没有权限修改内容
3.
右键 hosts 属性,修改系统用户对于文件的控制权限,直接点击完全控制后 ,点击应用即可!
(还是不会的话你就百度吧)
常规里的 只读记得取消 然后应用
接下来就可以修改hosts文件内的内容了!
在最后另起一行,格式:
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.