大家还记得第一次启动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,这里咱们只讨论域名解析。
了解域名请求之前,咱们要先科普几个知识点:
- http请求的默认端口为80,https的默认端口为443。
- 域名分为多级域名,域名之间用点隔开,从右至左开始依次递增:
- 格式:xxx.三级域名.二级域名.顶级域名
- 例子: https://www.csdn.net/ , www即三级域名,csdn即二级域名,net即为顶级域名
- 根域名服务器、顶级域名服务器、主域名服务器总的来说就是域名解析服务器不同等级的不同叫法,本质上就是域名解析服务器,类似Java的类加载机制,先自己解析,如果自己解析不了,就逐级向上询问。
整个域名解析的流程图如下:
nginx实践
有了基础理论知识之后,那我们具体怎么使用nginx在本地搭建一个系统可以通过域名访问呢?
刚才我们了解了DNS的解析流程,因为我们是本地搭建,不会去运营商注册域名,更不会去根服务器以及更高级的DNS解析服务器,所以我们配置本地hosts解析即可。
配置hosts
- 配置本地DNS解析,例如我们想搭建一个自己的个人博客,我们取名为:http://www.coffeengineeralex.com/
- 那我们需要在本地hosts文件(如何找到,自行查阅资料)末尾添加一行配置:
-
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,立马删除。