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

大家还记得第一次启动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.com
        server_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.com
        server_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,立马删除。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

穿越数据迷宫

第一章 在未来的世界里,人类的生活已经被高度数字化。互联网不再是简单的信息交换平台,而是成为了一个庞大的虚拟世界——“数据迷宫”。在这个世界里,每个人都有一个独特的数字身份,他们的生活、工作、娱乐都离不开这个虚拟空间…

六、元素应用CSS的习题

题目一&#xff1a; 使用CSS样式对页面元素加以修饰&#xff0c;制作“ 旅游攻略 ”网站。如下图所示 运行效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>旅游攻略</title><…

网络优化系列:探讨网络请求的性能提升策略

文章目录 引言一、网络请求优化1.1 DNS 解析耗时因素优化措施相关文章 1.2 创建连接耗时因素优化措施相关文章 1.3 发送 / 接收数据耗时因素优化措施相关文章 1.4 关闭连接耗时因素优化措施相关文章 二、网络库2.1 网络库的角色2.2 网络库的比较2.3 实际应用中的选择相关文章 三…

RabbitMQ 的集群

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ 的集群】面试题&#xff1f;希望对大家有帮助&#xff1b; RabbitMQ 的集群 RabbitMQ 是一种流行的开源消息代理&#xff0c;广泛用于构建分布式系统中的消息队列。随着应用程序规模的扩大&#xff0c;单一的 RabbitMQ 实…

微服务架构深入理解 | 技术栈

微服务架构深入理解 | 技术栈 服务网关 服务网关是在微服务架构中扮演重要角色的组件&#xff0c;它是系统对外的入口&#xff0c;负责接收和处理客户端的请求&#xff0c;并将请求路由到相应的微服务。服务网关常常与API管理、负载均衡、安全认证、流量控制等功能结合&#xf…

OpenSLL下载,环境变量配置

https://slproweb.com/products/Win32OpenSSL.html 环境变量 新建一个path为安装选择的目录的bin路径

AI图像相似性搜索对比:VIT, CLIP, DINO-v2, BLIP-2

图像相似性搜索的核心在于一个简单的想法&#xff1a;图像可以表示为高维空间中的向量。当两个图像相似时&#xff0c;它们的向量应该在这个空间中占据相似的位置。我们可以通过测量角度&#xff08;或余弦相似度&#xff09;来确定这些向量的相似程度。如果角度小&#xff0c;…

零基础Java第十二期:类和对象(三)

目录 一、static成员&#xff08;补&#xff09; 1.1. static修饰成员方法 1.2. static成员变量初始化 二、代码块 2.1. 静态代码块和实例代码块 ​三、对象的打印 一、static成员&#xff08;补&#xff09; 1.1. static修饰成员方法 public class Linear {public st…

三层交换技术,eNSP实验讲解

三层交换技术&#xff0c;eNSP实验讲解 一、简要介绍1、概念2、工作原理3、优点4、应用场景5、与路由器的区别 二、eNSP仿真实验1、步骤一&#xff1a;创建连接&#xff0c;明确参数。2、步骤二&#xff1a;设置PC1和PC2参数3、步骤三&#xff1a;配置交换机&#xff0c;通过命…

【Linux】掌握库的艺术:我的动静态库封装之旅

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 文章目录 1.什么是库1.2 认识动静态库1.2.1 动态库1.2.2…

访问控制技术原理与应用

目录 访问控制概述实现访问控制目标访问控制参考模型常见访问控制模型访问控制模型-DAC自主访问控制访问控制模型-MAC强制访问控制访问控制模型-RBAC基于角色的访问控制访问控制模型-ABAC基于属性的访问控制 访问控制概述 访问控制是对资源对象的访问授权控制的方法以及运行机…

nginx配置转发到elk的kibana的服务器

服务器准备 在135服务器上安装nginx服务 编辑kibana服务器的配置文件 将端口改为监听自己 杀掉之前kibana进程 重新启动kibana服务 因为设置了监听自身&#xff0c;所以前台访问kibana页面报错 此时我们修改nginx配置文件&#xff0c;用grep命令反选不含#和空行的行 将其覆盖原…

【Android】View的事件分发机制

文章目录 分发顺序ActivityViewGroupView 协作方法整体流程注意 Activity事件分发ViewGroup事件分发View点击事件总结 分发顺序 Activity->ViewGroup->View Activity 分发事件&#xff1a;Activity 通过 dispatchTouchEvent 方法分发事件&#xff0c;首先尝试将事件传递…

湘潭市学生公交卡线上申领流程及一寸照片自拍方法

在湘潭市&#xff0c;学生公交卡的线上申领流程已经非常便捷&#xff0c;同时&#xff0c;为了满足学生公交卡申领时所需的一寸照片要求&#xff0c;本文将详细介绍整个申领流程以及如何使用手机自拍并制作线上申领学生公交卡所需的一寸照片电子版。 一、湘潭市学生公交卡线上申…

翻译工具体验分享:deepl翻译等10款神器对比

作为一位在外贸行业摸爬滚打多年的客服&#xff0c;我深知在与国际客户沟通时&#xff0c;准确、高效的翻译工具是多么的重要。今天&#xff0c;我就来和大家分享一下我使用过的几款翻译工具&#xff0c;一共是十款&#xff0c;大家可以先看看。 一、福昕在线翻译 传送门&…

Linux入门(2)

林纳斯托瓦兹 Linux之父 1. echo echo是向指定文件打印内容 ehco要打印的内容&#xff0c;不加任何操作就默认打印到显示器文件上。 知识点 在Linux下&#xff0c;一切皆文件。 打印到显示器&#xff0c;显示器也是文件。 2.重定向 >重定向操作&#xff0c;>指向的…

六 在WEB中应用MyBatis(使用MVC架构模式)

六、在WEB中应用MyBatis&#xff08;使用MVC架构模式&#xff09; 实现功能&#xff1a; 银行账户转账 使用技术&#xff1a; HTML Servlet MyBatis WEB应用的名称&#xff1a; bank 6.1 需求描述 6.2 数据库表的设计和准备数据 6.3 实现步骤 第一步&#xff1a;环境…

React + Vite + TypeScript + React router项目搭建教程

一、创建项目 运行项目 二、目录结构 项目目录&#xff1a; ├─node_modules //第三方依赖 ├─public //静态资源&#xff08;不参与打包&#xff09; └─src├─assets //静态资源├─components //组件├─config //配置├─http //请求方法封装├─layout //页面…

Java-I/O框架09:InputStreamReader、OutputStreamWriter使用

视频链接&#xff1a;16.24 转换流的使用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p24 1.InputStreamReader使用 package com.yundait.Demo05;import java…

一键AI换衣-可图AI试衣

我们的真的实现了穿衣自由了吗&#xff1f;上传一张人物图片和衣服的图片&#xff0c;就能实现一键换衣。 这就是可图AI试衣项目 魔塔地址&#xff1a;https://www.modelscope.cn/studio ... lors-Virtual-Try-On 参考&#xff1a; 一键AI换衣-可图AI试衣 https://www.jinsh…