Nginx:如何实现一个域名访问多个项目

1. 背景介绍

最近在多个项目部署中遇到这样一个问题,一个域名如何实现多个项目的访问。因为不想自己单独去申请域名证书和域名配置,便想到了这个方案,结合Nginxlocation功能实现了自己的需求,便记录下来。示例中是以项目演示,其他的语言类似同样的方式进行部署。例如node的项目,可以在location中做一个验证,然后使用porxy_pass反向代理模块实现。

2. location模块的匹配介绍

  1. "="前缀指令匹配,如果匹配成功,则停止其他匹配。

  2. 普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配)。

  3. 正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配。

  4. 如果第三步中有匹配成功,则使用该结果,否则使用第二步结果。

2.1. 注意点

  1. 匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个匹配的正则表达式将停止搜索。

  2. 一般情况下,匹配成功了普通字符串location后还会进行正则表达式location匹配。有两种方法改变这种行为,其一就是使用“=”前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用“^~”前缀,如果把这个前缀用于一个常规字符串那么告诉nginx如果路径匹配那么不测试正则表达式。

location = /uri  

=开头表示精确匹配,只有完全匹配上才能生效。

location ^~ /uri  

^~开头对URL路径进行前缀匹配,并且在正则之前。

location ~ pattern

~开头表示区分大小写的正则匹配。

location ~* pattern

~*开头表示不区分大小写的正则匹配。

location /uri 

不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。

location /

通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default

3. 配置实例

server {listen       80;server_name  hqxg365.com;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   D:/setup/nginx-1.20.1/html/beian/hqxg365;index  index.html index.htm;}# 域名+项目1名称location ^~ /a1/ {alias   D:/setup/nginx-1.20.1/html/beian/hqxg365/a1/;index  index.html index.htm;}# 域名+项目2名称location ^~ /a2/ {alias   D:/setup/nginx-1.20.1/html/beian/hqxg365/a2/;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;}}

4. 效果预览

4.1. 访问a1项目

在这里插入图片描述

4.2. 访问a2项目

在这里插入图片描述

4.3. 访问主域名

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/139633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从TCP到Socket,彻底理解网络编程是怎么回事

进行程序开发的同学,无论Web前端开发、Web后端开发,还是搜索引擎和大数据,几乎所有的开发领域都会涉及到网络编程。比如我们进行Web服务端开发,除了Web协议本身依赖网络外,通常还需要连接数据库,而数据库连…

OpenWRT配置SFTP远程文件传输,让数据分享更安全

文章目录 前言 1. openssh-sftp-server 安装2. 安装cpolar工具3.配置SFTP远程访问4.固定远程连接地址 前言 本次教程我们将在OpenWRT上安装SFTP服务,并结合cpolar内网穿透,创建安全隧道映射22端口,实现在公网环境下远程OpenWRT SFTP&#xf…

Python之函数进阶-函数执行原理

Python之函数进阶-函数执行原理 函数执行流程 C语言中,函数的活动和栈有关。栈是后进先出的数据结构。栈是由底端向顶端生长,栈顶加入数据成为压栈、入栈、栈顶弹出数据称为出栈。 def add(x, y):r x yprint(r)return rdef main():a 1r add(a, 2)r…

ubuntu上如何移植thttpd

thttpd的特点 thttpd 是一个简单、小巧、便携、快速且安全的 HTTP 服务器。 简单: 它只处理实现 HTTP/1.1 所需的最低限度。好吧,也许比最低限度多一点。 小: 请参阅比较图表。它还具有非常小的运行时大小,因为它不会分叉并且非…

牛客网刷题笔记131111 Python实现LRU+二叉树先中后序打印+SQL并列排序

从学校步入职场一年多,已经很久没刷过题了,为后续稍微做些提前的准备,还是重新开始刷刷题。 从未做过计划表,这回倒是做了个计划表,希望能坚持吧。 刷题比较随性且量级不大,今天就写了2个算法2个sql&#x…

无需公网IP,贝锐花生壳内网穿透远程访问NAS

群晖DSM 7.0及以上版本 1.1 安装运行花生壳套件 (1)通过浏览器输入群晖NAS的内网地址,登录进去后,点击【套件中心】,搜索【花生壳】,并点击【安装套件】; (2) 勾选我接…

Jvm虚拟机

问题: 计算机能识别的语言是二进制,Java文件是程序员编写的,如何能够在计算机上运行? 以及Java为什么可以实现跨平台? 一Java的jdk中有jvm虚拟机 可以将文件转换为字节码文件 使得它可以在各种平台上运行,这…

Openlayers:自定义Controls

Openlayers是一款优秀的二维开源地图框架,支持矢量/栅格图层,支持移动端,并且易于自定义和拓展。下面来讲述一下自定义Control的基本思路。 openlayers-features 问题描述 最近在做个人项目时,遇到了一个小问题,就是在地图中心添加一个十字针形状的符号,用来表示地图中心…

Java入门篇 之 补 类与对象

本篇碎碎念:每个人的想法都不一样,不要强求,顺其自然,要相信,一切都在向好的方面前进!!!! 今日份励志文案:山海的浩瀚,宇宙的浪漫,都在我内心翻腾…

LeetCode200.岛屿数量

看完题目我还感觉这道题目有点难,没想到20分钟不到就完全靠自己给写出来了。我就是按照自己的想法来,我用一个等大的visit数组来表示grid数组中的这个元素是否被访问过(是否已经被判断了是不是岛屿)。 先用一个大的循环对grid数组…

贝锐蒲公英X1解决远程访问NAS难题

由于经常在外出差和旅游,需要实现即使在外地也能远程登录回去家里的NAS去处理事情或传输文件,因此解决方案之一是搭建一个安全简易的个人私有云。 实施难度 (1)家庭网络无公网IP,且公网IP价格昂贵(2&…

Django的ORM操作

文章目录 1.ORM操作1.1 表结构1.1.1 常见字段和参数1.1.2 表关系 2.ORM2.1 基本操作2.2 连接数据库2.3 基础增删改查2.3.1 增加2.3.2 查找2.3.4 删除2.3.4 修改 1.ORM操作 orm,关系对象映射,本质翻译的。 1.1 表结构 实现:创建表、修改表、…

Python用requests库采集充电桩LBS位置经纬度信息

这是一个使用Python的requests库来爬取网页内容的示例。首先,我们需要导入requests库。然后,我们需要定义一个函数来处理请求。在这个函数中,我们需要设置爬虫IP服务器的URL和端口号,然后使用requests.get来获取网页内容。最后&am…

GoF之代理模式

2023.11.12 代理模式是GoF23种设计模式之一,其作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以…

解决springboot接受buffer文件为null(从picgo上传buffer看springmvc处理过程)

1. 前言: picgo插件的简单开发 上篇文章我们简单写了picgo上传插件,但是当我们测试的时候,发现问题了,后端MultipartFile file接受到的文件为null。 2. 排查问题: 参考的文档 picgo api列表关于multipart form-data中…

链表OJ题【环形链表】(3)

目录 环形问题的思考 ❓Q1 ❓Q2 🙂Q2 ❓Q3 ❓Q4 8.环形链表 9.环形链表Ⅱ 今天接着链表的经典问题环形问题。大家一定要自己动手多写写。🙂 快慢指针(保持相对距离/保持相对速度)野指针考虑为NULL的情况带环链表&#x…

SpringBoot自动装配定义先后顺序失效原因极其解析

SpringBoot自动装配定义先后顺序失效原因极其解析 1、场景分析1.1、问题总结 2、使用AutoConfigureBefore、AutoConfigureAfter和AutoConfigureOrder注解指定加载顺序2.2、AutoConfigureXX注解失效原因总结 3、使用静态内部装配类提升加载顺序4、bean加载顺序规则 1、场景分析 …

矩阵起源加入 OpenCloudOS 操作系统开源社区,完成技术兼容互认证

近日,超融合异构云原生数据库 MatrixOne企业版软件 V1.0 完成了与 OpenCloudOS 的相互兼容认证,测试期间,整体运行稳定,在功能、性能及兼容性方面表现良好。 一、产品简介 矩阵起源 MatrixOrigin 致力于建设开放的技术开源社区和…

Nginx缓存基础

1 nginx缓存的流程 客户端需要访问服务器的数据时,如果都直接向服务器发送请求,服务器接收过多的请求,压力会比较大,也比较耗时;而如果在nginx缓存一定的数据,使客户端向基于nginx的代理服务器发送请求&…

Spring面试题:(五)Spring注解开发@Component,@Autowired,@Bean,@Configuration

Bean基本注解 spring提供注解的版本 Component注解替代bean标签 bean其它属性的相关注解: scope 替代scopelazy 替代lazy-initPostConstruct 替代init-methodPreDestroy 替代destroy-method 使用Component注解的前提是开启注解扫描 衍生注解Repository,Servi…