你还在用一串数字访问你的系统吗?

大家还记得第一次启动SpringBoot应用并在浏览器访问是如何进行的吗?在SpringBoot启动后,我们会看到如图所示:

SpringBoot内置tomcat以端口8080启动,然后根据指引,我们在浏览器输入:

http://127.0.0.1:8080/xxx 

就可以访问到我们本地的页面或者接口。

HTTP链接分析

按照http链接的格式:http://127.0.0.1:8080/xxx 总共可以分为以下四个部分:

http - 协议头

127.0.0.1 - 请求IP

8080 - 请求端口

xxx - 请求URI(接口具体路径或者文件地址)

这四部分看起来很简单,但是我们想要把我们的网站推广出去,我们肯定不能用我们的本地IP,如果是局域网访问,我们需要使用局域网IP替换127.0.0.1,如果是公网,则需要使用公网IP替换,假如我们的公网ip为100.78.26.37,你那么如果我们把一串这样的数字发布出去,对于客户来说是难以记忆的。

那有没有办法优化这个地址方便记忆,快速传播。那就是通过域名的方式,

例如我们的CSDN:https://www.csdn.net/,就非常容易记住,并且假如我们IP变了话,这个域名依然不变。

那我们具体怎么通过域名来表达具体的IP地址呢,接下来就请出我们今天的主角:nginx

插播一则通告:本人在代码一线工作近八年时间,有非常丰富的面试经验,有需要优化简历,模拟面试,面试辅导的同学可以联系V:xiaolang1530368931。将简历优化成大厂面试官想看的,提前回答大厂面试官可能会问的问题,为进大厂做最后的冲刺。

一次浏览器域名请求发生了什么

我们以 https://www.csdn.net/  为例,这里咱们暂且不讨论https,咱们到时候另出一篇文章讲解https,这里咱们只讨论域名解析。

了解域名请求之前,咱们要先科普几个知识点:

  1. http请求的默认端口为80,https的默认端口为443。
  2. 域名分为多级域名,域名之间用点隔开,从右至左开始依次递增:
    1. 格式:xxx.三级域名.二级域名.顶级域名
    2. 例子: https://www.csdn.net/ , www即三级域名,csdn即二级域名,net即为顶级域名
  3. 根域名服务器、顶级域名服务器、主域名服务器总的来说就是域名解析服务器不同等级的不同叫法,本质上就是域名解析服务器,类似Java的类加载机制,先自己解析,如果自己解析不了,就逐级向上询问。

整个域名解析的流程图如下:

nginx实践

有了基础理论知识之后,那我们具体怎么使用nginx在本地搭建一个系统可以通过域名访问呢?

刚才我们了解了DNS的解析流程,因为我们是本地搭建,不会去运营商注册域名,更不会去根服务器以及更高级的DNS解析服务器,所以我们配置本地hosts解析即可。

配置hosts

  1. 配置本地DNS解析,例如我们想搭建一个自己的个人博客,我们取名为:http://www.coffeengineeralex.com/ 
  2. 那我们需要在本地hosts文件(如何找到,自行查阅资料)末尾添加一行配置:
    1. 127.0.0.1       www.coffeengineeralex.com

搭建nginx

怎么安装nginx,可以自行查询资料,这里仅介绍mac如何安装nginx,使用mac安装nginx非常简单,只需要使用如下命令就可以安装:

brew install nginx

安装完成之后,我们可以使用如下命令查看nginx的安装位置:

brew info nginx

根据提示信息,我们看到nginx默认是以8080端口启动的。

在变更nginx配置之前,我们先看下nginx是否安装成功,尝试启动nginx,直接使用如下命令就可以启动nginx:

brew services start nginx

启动完成之后,我们直接访问http://localhost:8080/,如果安装成功,我们就可以看到nginx的欢迎页面:

nginx完整的配置如何配置我们在此暂不做展开,有兴趣的我们可以再出一篇文章,我们仅配置域名解析所需要的,我们调整nginx配置如下:


worker_processes  1;events {worker_connections  1024;
}http {server {# 监听80端口listen       80;# 域名为www.coffeengineeralex.comserver_name  www.coffeengineeralex.com;# 默认访问的地址为location / {# 代理到本地启动的端口为8091的SpringBoot服务proxy_pass http://127.0.0.1:8091;}}include servers/*;
}

刷新nginx配置

再调整完nginx配置后,我们需要将nginx配置刷新才会生效,我们使用以下命令进行刷新

nginx -s reload

刷新完nginx配置后,我们在本地启动一个端口为8091(这里因为nginx默认端口为8080,所以我们把后端服务的端口调整一下,避免出现一些不可知的问题)的SpringBoot服务,并定义一个http接口,例如我们自定义一个hello接口:

    @RequestMapping(value = "hello")public Object hello() {return "hello";}

我们在浏览器输入http://www.coffeengineeralex.com/hello ,神奇的一幕发生了,浏览器正常响应了我们请求,并返回了正确结果。

各位同学的毕业设计是不是又多了一个 “装” 起来的选项,其他同学的网站都只能一串数字访问,但是咱们的网站已经可以通过域名访问了,更加接近真实的网址,快去 “装” 起来吧。

拓展

像我们后端服务,一般不会配置单点,都是以集群的方式出现,那如果我们有多台机器,nginx应该如何配置,因为我们是本地搭建,所以我们在本地起三个SpringBoot应用,分别以8091,8092,8093启动搭建一个伪集群。

有了集群之后,我们的nginx配置如下:


worker_processes  1;events {worker_connections  1024;
}http {upstream backend-cluster {server 127.0.0.1:8091 weight=1;server 127.0.0.1:8092 weight=2;server 127.0.0.1:8093 weight=3;} server {# 监听80端口listen       80;# 域名为www.coffeengineeralex.comserver_name  www.coffeengineeralex.com;# 默认访问的地址为location / {# 代理到本地启动的端口为8091的SpringBoot服务proxy_pass http://backend-cluster;}}include servers/*;
}

PS:weight越大,被分发的可能性越大。

我们使用nginx -s reload刷新nginx配置后,可以发现我们不管关掉三个节点中的任意两个节点都是能正常访问的,说明我们的集群已经生效了。这里有个需要特别注意的点就是,不同的tomcat版本可能不支持upstream后名字带_(下划线),所以如果访问报错,我们把 _ 去掉即可。

总结

nginx的功能很强大,配置也是十分丰富,本文只是详细讲解了nginx的初步搭建,具体https证书、跨域、负载均衡策略等等如何配置我们都还没有讲到,看各位同学对nginx的详细配置是否感兴趣,我们可以出一个章题来详细讲讲nginx配置,毕竟它在我们工作中太重要了。


以上就是关于通过nginx搭建域名访问系统的全部内容,如果大家觉得有一点点受益的话,希望点赞、评论、转发来支持我做更加优质的分享。

分享一句非常喜欢的话:把根牢牢扎深,再等春风一来,便会春暖花开。

PS:以上引用信息以及图片均来自网络公开信息,如有侵权,请留言或联系

504401503@qq.com,立马删除。

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

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

相关文章

ffmpeg视频滤镜:膨胀操作-dilation

滤镜介绍 dilation 官网链接 > FFmpeg Filters Documentation 膨胀滤镜会使图片变的更亮,会让细节别的更明显。膨胀也是形态学中的一种操作,在opencv中也有响应的算子。此外膨胀结合此前腐蚀操作,可以构成开闭操作。 开操作是先腐蚀…

Unity中的屏幕坐标系

获得视口宽高 拖动视口会改变屏幕宽高数值 MousePosition 屏幕坐标系的原点在左下角,MousePosition返回Z为0也就是纵深为0的Vector3 但是如果鼠标超出屏幕范围不会做限制,所以可能出现负数或者大于屏幕宽高的情况,做鼠标拖拽物体时需要注…

基于SpringBoot的学生读书笔记共享的设计与实现

一、项目背景 计算机的普及和互联网时代的到来使信息的发布和传播更加方便快捷。用户可以通过计算机上的浏览器访问多个应用系统,从中获取一些可以满足用户需求的管理系统。网站系统有时更像是一个大型“展示平台”,用户可以选择所需的信息进入系统查看…

【数据结构】二叉树——层序遍历

层序遍历 一、层序遍历二、层序遍历(递归)三、层序遍历(非递归)四、总结 一、层序遍历 层序遍历是一种广度优先遍历 以图上二叉树为例,层序遍历就是按照二叉树的深度一层一层进行遍历 遍历顺序: A B C D …

react使用Fullcalendar

前言: 最近在做项目时,遇到了需要用日历的项目。一开始考虑使用antd的日历组件。后来 调研技术库,发现了fullcalendar 库。经过对比 fullcalendar 更强大,更灵活。 其实 antd的日历组件 也不错,简单的需求用他也行。…

Golang--函数、包、defer、系统函数、内置函数

1、何为函数 函数作用:提高代码的复用型,减少代码的冗余,提高代码的维护性 函数定义:为完成某一功能的程序指令(语句)的集合,称为函数。 语法: func 函数名(形参列表)(返回值类型列表){ //执行语句 //…… return …

Chrome和Firefox如何保护用户的浏览数据

在当今数字化时代,保护用户的浏览数据变得尤为重要。浏览器作为我们日常上网的主要工具,其安全性直接关系到个人信息的保密性。本文将详细介绍Chrome和Firefox这两款主流浏览器如何通过一系列功能来保护用户的浏览数据。(本文由https://chrom…

如何在Linux系统中使用SSH进行安全连接

如何在Linux系统中使用SSH进行安全连接 SSH简介 安装SSH 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动SSH服务 验证SSH是否安装成功 SSH配置 配置监听端口 配置登录方式 SSH客户端 安装SSH客户端 使用SSH客户端 SSH密钥认证 生成SSH密钥对 复制公钥到远程服务器…

ElasticSearch - Bucket Selector使用指南

文章目录 官方文档Bucket Selector1. 定义2. 工作原理3. 使用场景与示例使用场景官方案例示例2 4. 注意事项5. 总结 官方文档 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html Bucket Selector https://www.elastic.co/guide/en/…

RHCE——笔记

Web服务器 1,web服务器简介 (1)什么是www 是全球信息广播的意思。通常说的上网就是使用 www 来查询用户 所需要的信息。 www 可以结合文字、图形、影像以及声音等多媒体,并通过可以让鼠标单击超链接的方式将信息以Internet 传递…

Unity XR Interaction Toolkit 开发教程(1):OpenXR 与 XRI 概述【3.0 以上版本】

文章目录 📕Unity XR 开发架构🔍底层插件(对接硬件)🔍高层 SDK(面向应用交互层) 📕OpenXR📕XR Interaction Toolkit🔍特点🔍XRI 能够实现的交互类…

HarmonyOS:@Watch装饰器:状态变量更改通知

Watch应用于对状态变量的监听。如果开发者需要关注某个状态变量的值是否改变,可以使用Watch为状态变量设置回调函数。 说明 从API version 9开始,该装饰器支持在ArkTS卡片中使用。 从API version 11开始,该装饰器支持在元服务中使用。 一、概…

AIGC对传统内容创作行业的冲击

文章目录 引言一、AIGC的概念1.1 AIGC的工作原理 二、AIGC对内容创作行业的影响2.1 提高创作效率2.2 降低创作门槛2.3 改变内容创作的形式 三、AIGC带来的挑战3.1 版权和道德问题3.2 内容质量的参差不齐3.3 人类创作者的角色变化 四、AIGC的应用场景4.1 新闻行业4.2 市场营销4.…

Linux 下执行定时任务之 Systemd Timers

不知道 ECS 因为什么缘故,上面安装的 MySQL 服务老是不定期挂掉,本来想通过 Linux 得 Cron 配置个半小时的定时检测任务,结果一直没有执行,因此又尝试使用了 Systemd Timers 进行了重新配置,简要做个记录。 Systemd Ti…

Java已死,大模型才是未来?

作者:不惑_ 引言 在数字技术的浪潮中,编程语言始终扮演着至关重要的角色。Java,自1995年诞生以来,便以其跨平台的特性和丰富的生态系统,成为了全球范围内开发者们最为青睐的编程语言之一 然而,随着技术的…

C语言第10节:详解操作符

1. 运算符的分类 运算符是C语言中的基本组成部分,用于执行各种操作。以下是常见运算符的详细分类: 1.1. 算术操作符 这些用于执行基本的数学运算: :加法- :减法* :乘法/ :除法% :…

Python实现全国岗位招聘信息可视化分析(源码+论文+部署讲解)

项目源码&数据源获取 利用Python实现全国岗位招聘信息可视化分析 项目背景: 1.为企业招聘决策提供科学的依据和参考,可以帮助人力资源部门、招聘机构和求职者了解当前的就业形势、行业趋势和人才需求,从而做出更明智的招聘和求职决策。…

群控系统服务端开发模式-应用开发-本地上传工厂及阿里云上传工厂开发

记住业务流程图&#xff0c;要不然不清楚自己封装的是什么东西。 一、本地工厂开发 在根目录下extend文件夹下Upload文件夹下channel文件夹中&#xff0c;我们修改LocalUpload业务控制器。具体代码如下&#xff1a; <?php /*** 本地上传工厂* User: 龙哥 三年风水* Date: …

智能座舱相关术语全解及多模态交互在智能座舱中的应用

文章目录 座舱相关术语全解1. 智能座舱2. UFS3. 多模态交互4. 3D虚拟引擎5. AR/VR6. GNSS7. TTS8. DPU9. 摄像头10. 屏幕/显示器11. 音频12. 无线连接13. 其他组件 多模态交互在智能座舱中有以下一些应用 座舱相关术语全解 1. 智能座舱 智能座舱&#xff08;intelligent cabi…

Linux中SPI

参考资料 https://www.cnblogs.com/aaronLinux/p/6219146.html1.SPI 2.SPI传输 2.1传输示例 首先&#xff0c;CS0拉低选中的SPI Flash , 然后在每个时钟周期&#xff0c; DO输出对应的电平。 SPI FLASH会在每个时钟的上升沿读取D0的电平。2.2SPI模式 根据SCK的电平以及数据在…