Nginx反向代理部署多个项目_nginx多个反向代理-程序员宅基地

技术标签: Linux  nginx  linux  centos  

需求

假设现在有一个顶级域名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域名太贵啦~)
image-20220305210655158

white.ouou.com

image-20220305205546180

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

image-20220305205731193

配置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目录内。

image-20220305205945684

当然这个需求只有我个人需要,大可以创建一个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报错

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40571331/article/details/123301961

智能推荐

python编码问题之encode、decode、codecs模块_python中encode在什么模块-程序员宅基地

文章浏览阅读2.1k次。原文链接先说说编解码问题编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 Eg:str1.decode('gb2312') #将gb2312编码的字符串转换成unicode编码str2.encode('gb2312') #将unicode编码..._python中encode在什么模块

Java数据流-程序员宅基地

文章浏览阅读949次,点赞21次,收藏15次。本文介绍了Java中的数据输入流(DataInputStream)和数据输出流(DataOutputStream)的使用方法。

ie浏览器无法兼容的问题汇总_ie 浏览器 newdate-程序员宅基地

文章浏览阅读111次。ie无法兼容_ie 浏览器 newdate

想用K8s,还得先会Docker吗?其实完全没必要-程序员宅基地

文章浏览阅读239次。这篇文章把 Docker 和 K8s 的关系给大家做了一个解答,希望还在迟疑自己现有的知识储备能不能直接学 K8s 的,赶紧行动起来,K8s 是典型的入门有点难,后面越用越香。

ADI中文手册获取方法_adi 如何查看数据手册-程序员宅基地

文章浏览阅读561次。ADI中文手册获取方法_adi 如何查看数据手册

React 分页-程序员宅基地

文章浏览阅读1k次,点赞4次,收藏3次。React 获取接口数据实现分页效果以拼多多接口为例实现思路加载前 加载动画加载后 判断有内容的时候 无内容的时候用到的知识点1、动画效果(用在加载前,加载之后就隐藏或关闭,用开关效果即可)2、axios请求3、map渲染页面4、分页插件(antd)代码实现import React, { Component } from 'react';//引入axiosimport axios from 'axios';//引入antd插件import { Pagination }_react 分页

随便推点

关于使用CryPtopp库进行RSA签名与验签的一些说明_cryptopp 签名-程序员宅基地

文章浏览阅读449次,点赞9次,收藏7次。这个变量与验签过程中的SignatureVerificationFilter::PUT_MESSAGE这个宏是对应的,SignatureVerificationFilter::PUT_MESSAGE,如果在签名过程中putMessage设置为true,则在验签过程中需要添加SignatureVerificationFilter::PUT_MESSAGE。项目中使用到了CryPtopp库进行RSA签名与验签,但是在使用过程中反复提示无效的数字签名。否则就会出现文章开头出现的数字签名无效。_cryptopp 签名

新闻稿的写作格式_新闻稿时间应该放在什么位置-程序员宅基地

文章浏览阅读848次。新闻稿是新闻从业者经常使用的一种文体,它的格式与内容都有着一定的规范。本文将从新闻稿的格式和范文两个方面进行介绍,以帮助读者更好地了解新闻稿的写作_新闻稿时间应该放在什么位置

Java中的转换器设计模式_java转换器模式-程序员宅基地

文章浏览阅读1.7k次。Java中的转换器设计模式 在这篇文章中,我们将讨论 Java / J2EE项目中最常用的 Converter Design Pattern。由于Java8 功能不仅提供了相应类型之间的通用双向转换方式,而且还提供了转换相同类型对象集合的常用方法,从而将样板代码减少到绝对最小值。我们使用Java8 功能编写了..._java转换器模式

应用k8s入门-程序员宅基地

文章浏览阅读150次。1,kubectl run创建pods[root@master ~]# kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1[root@master ~]# kubectl get podsNAME READY STATUS REST...

PAT菜鸡进化史_乙级_1003_1003 pat乙级 最优-程序员宅基地

文章浏览阅读128次。PAT菜鸡进化史_乙级_1003“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是: 1. 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符; 2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或..._1003 pat乙级 最优

CH340与Android串口通信_340串口小板 安卓给安卓发指令-程序员宅基地

文章浏览阅读5.6k次。CH340与Android串口通信为何要将CH340的ATD+Eclipse上的安卓工程移植到AndroidStudio移植的具体步骤CH340串口通信驱动函数通信过程中重难点还存在的问题为何要将CH340的ATD+Eclipse上的安卓工程移植到AndroidStudio为了在这个工程基础上进行改动,验证串口的数据和配置串口的参数,我首先在Eclipse上配置了安卓开发环境,注意在配置环境是..._340串口小板 安卓给安卓发指令