需求

假设现在有一个顶级域名ouou.com和三个二级域名white.ouou.com,blog.ouou.com,default.ouou.com,这4个域名都跟同一个IP进行绑定。三个二级域名分别对应三个不同的项目,我们希望通过不同二级域名访问同一个服务器,用Nginx做路由转发,到达不同的项目首页。

默认配置当访问顶级域名时,与访问blog.ouou.com到达同一个项目。

以下通过一个具体的例子进行讲解。本篇文章着重描述Nginx如何做路由转发,但也涉及部分部署的知识,为了本人学习记录所用,可以选择性阅读。因为需求高度定制,所以通用性不大。如果纯粹想看nginx根据不同域名做路由,可查看此文章:Nginx 根据不同域名做路由转发

环境

版本

Nginx:1.20.1 (使用LNMP环境快速搭建)

MySQL:8.0.28

Linux操作系统:CentOS7

项目

项目一:前后端分离项目,本文使用开源项目白卷作为例子,作者在CSDN中有详尽的笔记,可以当作springboot入门实践项目。对应域名white.ouou.com。

项目二:WordPress博客项目,用php开发的小型web项目,适合做个人博客。不是前后端分离架构。对应域名blog.ouou.com。

项目三:这里作为例子,显示Nginx默认首页。对应域名default.ouou.com。

服务器

服务器一:作为Nginx做转发的服务器,部署了WordPress项目,白卷的前端部分,和test项目

服务器二:作为后端服务器,部署了白卷的后端,仅接收api请求

服务器三:作为数据库服务器,安装了mysql

本文假设已经安装好所有软件环境,如果没有,可以参考附录

结果

先看结果

ouou.com和blog.ouou.com到博客项目首页(目前我的真实个人博客地址https://www.ouou.ink,欢迎来访,.com域名太贵啦~)

white.ouou.com

default.ouou.com 就是lnmp环境下Nginx的首页

配置host文件

本文实验环境在虚拟机上进行,如果使用服务器,应该用真实域名绑定到服务器ip

首先在windows文件系统中找到hosts文件:C:\Windows\System32\drivers\etc\hosts

将4个域名绑定到服务器一的ip,要知道域名只能绑定到ip而不能指定端口

服务器一的ip ouou.com
服务器一的ip default.ouou.com
服务器一的ip blog.ouou.com
服务器一的ip white.ouou.com

Nginx配置文件

首先看下通过lnmp工具安装好的Nginx的配置文件(之前为了快速搭建出WordPress而使用lnmp,与正常安装不会有太大差异,在此场景不受影响)

打开文件:

vim /usr/local/nginx/conf/nginx.conf

查看server部分:

server {listen 80 default_server reuseport;#listen [::]:80 default_server ipv6only=on;server_name _;index index.html index.htm index.php;root /home/wwwroot/default;....
}

listen 80,Nginx默认监听80端口,根目录 /home/wwwroot/default,当我们访问ouou.com时,会访问服务器中/home/wwwroot/default目录下的index文件。

之前写过一篇博客使用WordPress搭建个人博客,本文在此实现下继续做部署工作。通过搭建WordPress博客后,会生成一个wordpress项目,项目放到/home/wwwroot/下,与default目录同级,同时,我们创建white目录,将打包好的白卷前端项目,放到white目录内。

当然这个需求只有我个人需要,大可以创建一个wordpress的空目录,然后放置一个简单的index.html来完成实验。

为了使得顶级域名默认访问博客项目,将server中的root进行修改root /home/wwwroot/wordpress;

添加server

在nginx.conf文件下添加Server

 server {listen 8001;server_name _;root /home/wwwroot/white;# 处理vue的history模式路由 location / {try_files $uri $uri/ /index.html;}}server {listen 8002;server_name _;root /home/wwwroot/default;}

保存文件,重启Nginx

nginx -s reload

首先测试是否能通过端口访问到项目,输入http://ouou.com:8001,http://ouou.com:8002,如果能访问到白卷和默认页,则表示成功。

经过这一步骤,实现Nginx监听不同端口,路由到不同的项目。接下来要做的事情是,判断请求的域名,根据域名转发到不同端口。

路由转发

在/usr/local/nginx/conf/vhost下创建3个文件

default.ouou.com.conf

server {listen 80; # 监听 80 端口autoindex on;server_name blog.ouou.com; # 判断域名access_log /usr/local/nginx/logs/access.log combined;index index.html index.htm index.jsp index.php;if ( $query_string ~* ".*[\;'\<\>].*" ){return 404;}location / {proxy_pass http://127.0.0.1:80; # 反向代理到 80 端口add_header Access-Control-Allow-Origin *;}
}

blog.ouou.com.conf

server {listen 80; # 监听 80 端口autoindex on;server_name white.ouou.com; # 判断域名access_log /usr/local/nginx/logs/access.log combined;index index.html index.htm index.jsp index.php;if ( $query_string ~* ".*[\;'\<\>].*" ){return 404;}location / {proxy_pass http://服务器二ip:8001; # 反向代理到 8001 端口add_header Access-Control-Allow-Origin *;}
}

white.ouou.com.conf文件

server {listen 80; # 监听 80 端口autoindex on;server_name default.ouou.com; # 判断域名access_log /usr/local/nginx/logs/access.log combined;index index.html index.htm index.jsp index.php;if ( $query_string ~* ".*[\;'\<\>].*" ){return 404;}location / {proxy_pass http://127.0.0.1:8002; # 反向代理到 8002 端口add_header Access-Control-Allow-Origin *;}
}

再次重启Nginx。

每段大概的意思是通过监听80端口,因为每个域名一开始都是进入到80端口,判断域名内容,然后代理到对应的地方,反向代理地址不局限于同一个服务器。

再次使用二级域名访问即可。

部署白卷后端项目

白卷后端项目使用springboot框架开发,springboot自带Tomcat环境,可以通过maven打成jar包,在服务器二中安装好java环境,直接上传jar包,再通过命令java -jar xxx.jar运行即可。

在白卷前端项目中,需要将请求服务器ip改为服务器二的ip地址,并且做路由转发时,转发到服务器二的ip地址。

连接数据库服务器

这没什么好说的,在springboot配置文件中将连接数据库的url改为服务器三的ip地址。指出来是因为之前都是用的本地开发调试,很少设计到远程链接mysql,如果连接远程mysql出问题,可以参考:远程链接MySQL报错

尾声

虽然三言两语就结束了篇文章,但是过程中遇到不少问题,个中苦涩滋味只有自己能体会,从中也收获了许多。

前路漫漫,依然要持续坚定地前行。

附录

白卷

使用VMware安装CentOS7

使用WordPress搭建个人博客

CentOS手动安装JDK

CentOS7用yum方式安装MySQL

远程链接MySQL报错

Nginx反向代理部署多个项目相关推荐

  1. .net5 Nginx 反向代理部署

    .net5 Nginx 反向代理部署 几个概念先了解一下 集群 多个服务器(或者软件)呢,都可以完整的完成一个业务 eg:一个业务呢有A,B,C三个流程,服务器甲可以完成A,B,C.服务器乙也可以完成 ...

  2. nginx反向代理部署与演示(二)

    我们把LB01作为负载均衡器,WEB01和WEB02作为两台web服务器. WEB01与WEB02虚拟主机配置如下: 我们修改nginx下的conf/nginx.conf文件,在http{}中加入如下 ...

  3. 使用Nginx反向代理部署laravel和history模式的Vue项目[更新]

    nginx.conf里要加上对laravel的静态文件目录的转发(这里假设我的静态文件在public/static下).修改vue的nginx配置. 我们以在我本地的开发环境为例,windows7+n ...

  4. 宝塔面板部署nuxt项目线程守护启动以及Nginx反向代理

    宝塔面板部署nuxt项目 宝塔部署Vue,nuxt等项目需要是使用到node.jshe nginx才能实现部署.因此使用宝塔面板使用软件安装安装PM2管理器以及nginx代理软件 步骤一 新建文件夹上 ...

  5. 容器化单页面应用中Nginx反向代理与Kubernetes部署

    在<容器化单页面应用中RESTful API的访问>一文中,我介绍了一个在容器化环境中单页面应用访问后端服务的完整案例.这里我将继续使用这个案例,介绍一下容器化单页面应用部署的另一个场景: ...

  6. docker安装_使用docker在带有SSL的Nginx反向代理后面部署Quarkus或任何基于Java的微服务...

    docker安装 已经有一段时间了,但是根据一位朋友的要求,我将向您展示如何使用docker在Nginx反向代理后面部署Quarkus微服务. 我们会做什么- 我将在centos 8主机上安装dock ...

  7. 使用Nginx反向代理将自己的域名指向自己所发布的项目

    之前做了一个个人博客,但是没有将域名解析,所以访问我的博客是要用我服务器的ip地址进行访问,虽然说不是很安全,但是我一个学生,估计也不会有什么人来搞我的服务器,不过自己访问我的博客的时候看着那网站心里 ...

  8. Nginx反向代理及域名解析访问本地项目

    ···目录··········································· 终极目标 明确思路 域名解析 破解域名 Nginx反向代理解决端口问题 完成测试 注意事项 终极目标 ...

  9. 精灵商场项目(五)--虚拟机Linux使用+Nginx反向代理

    文章目录 一.虚拟机Linux使用 1.1 Linux 介绍和使用 1.2 虚拟机配置 1.3 检查是否正常连接 1.4 虚拟机克隆 1.5 LinuxIP划分和链接 1.6 Xshell 1.6.1 ...

最新文章

  1. 行走智慧城市 数据要有统一“身份”
  2. python b站 礼物_[我叫以赏]Python获取B站UP主粉丝数
  3. Coursera吴恩达《卷积神经网络》课程笔记(4)-- 人脸识别与神经风格迁移
  4. mongodb 导出一条数据导出_使用MongoDB命令工具导出、导入数据
  5. HDU:4185-Oil Skimming
  6. Robotium双client測试框架
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的学校教务查询系统
  8. 数据分析工具测评!被Excel打过的“耳光”,现在可以还回去了
  9. 如何在PHP7中安装mysql的扩展
  10. python下载pyhive包:
  11. Python 微博画像分析
  12. Python面向对象三大特征之封装
  13. java 迭代_java迭代是什么意思
  14. iphone6 和 iphone6 plus 屏幕适配问题
  15. gff3转mysql_PASA的使用
  16. 十五、《大数据项目实战之用户行为分析》HBase数据表操作
  17. Redis学习(1)——下载与配置[转]
  18. Activity跳转方式
  19. IBM z15揭开面纱,多项业界首创技术护航混合多云安全
  20. 您的计算机无法启动f2,华硕笔记本电脑 开机按f2无法进入BIOS 无法进入安全模式 键盘键位失灵 仅开机键可用...

热门文章

  1. 【财富空间】一个人真正的资本是什么
  2. 操作无法完成 计算机名不正确,连接共享打印机时 “操作无法完成,键入的打印机名不正确”的问题...
  3. 摩托罗拉edge s pro使用体验 缺点 时不时漏接电话
  4. godaddy mysql 地址 2014_Godaddy空间创建MySql数据库图文教程
  5. luckySheet+POI+EasyExcel实现在线excel模版的导出和数据填充
  6. php ci框架 hook,CodeIgniter框架钩子机制实现方法【hooks类】
  7. java入门-W3(K81-K143)
  8. JavaWeb详细笔记(适合小白)
  9. Android开发核心知识笔记共2100页,讲的明明白白!
  10. 最全自学黑客技术学习路线,少走弯路