news 2026/1/7 14:47:30

61、【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(五)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
61、【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(五)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(四)
分析了external_url配置项在 Gitlab 中的作用,并开始分析 Gitlab 自带 Nginx 的server_name的作用,里面提到了 Host 字段的作用,下面继续分析

Nginx 配置审视

上篇 blog 提到了,Host 是 HTTP/1.1 协议中强制要求的请求头字段,用来告诉服务器,用户想访问的是机器上的哪个域名,使用浏览器访问 Web 服务,比如在发起HTTP/1.1请求时都会自动添加 Host 头,Host 值就是用户在地址栏输入的域名(或 IP + 端口),比如

  • http://www.example.com对应 Host 为www.example.com
  • https://api.myapp.com/v1/users对应 Host 为api.myapp.com
  • http://192.168.1.100:8080/test对应 Host 为192.168.1.100:8080

注意,如果 URL 中包含端口(不是默认的的80/443),Host 就会包含端口号,就像上面第三点一样,而默认端口号不会写到 Host 里(即使 URL 里显式写了,浏览器在构造 Host 头时,也会省略掉默认端口)

从上面举例可以看出来,Host 请求头的值,就是 URL 中://之后,到第一个/之前的部分,这部分内容包括域名(比如www.example.com),或 IP 地址(比如192.168.1.100),如果不是端口不是默认值(HTTP80,HTTPS443,之前 blog 【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(三) 介绍过),还要带上显式端口号,比如上面的192.168.1.100:8080

这一点在官方文档HTTP/1.1规范 RFC 7230, Section 5.4 也能看到相关描述

可以看到,里面传达出几个关键信息:

  • 请求中的 Host 头字段,提供了目标 URI 中的主机名和端口信息(体现了用户想访问的网站名字,这个网站名字可以包含具体端口信息)
  • Host 头字段可以让 Web 服务器能够区分开不同的资源,比如同一台服务器上可能有成千上万个文件,页面和 API,但光靠路径,比如/index.html还远远不够,因为不同网站可能有同名路径,比如网站 A 有siteA.com/index.html,网站 B 有siteB.org/index.html,所以必须结合host/path,也就是 Host + 路径才能唯一确定用户想要什么,而这里的 Host,就是告诉服务器,这个index/html路径到底是哪个站点的
  • Host 作用尤其体现在一台 Web 服务器(同一个 IP 地址)上,同时为多个域名提供服务时,这就是虚拟主机的核心场景,如果两个域名都指向同一个 IP,请求都发到这台 Web 服务器,服务器就可以靠 Host 头区分开,该返回那个站点的内容,可以说,没有 Host,就无法实现一机多站的功能,这正是现代 Web 能以低成本运行海量网站的基础技术之一

OK,理解了 Host 头,再看访问请求和 Nginx 配置块中的server_name是怎么互动的


可以看到,server_name配置项和 Host 头就是匹配的,这意味着在写server_name时,和 Host 基本规则一样:

  • 首先,不需要也不应该默认端口,比如
server{listen *:80;server_name"example.com:80";# 有问题,不要写默认端口# 其他配置...}

这样就是错的,Nginx 不会匹配上example.com的域名,要把默认端口去掉

server{listen *:80;server_name"example.com";# 这样 OK# 其他配置...}
  • 另外,如果 Web 服务正在监听非标准端口(比如8080),并且用户通过http://example.com:8080进行访问,那么 Host 头是example.com:8080,这时可以用listen+server_name分离实现
server{listen *:8080;server_name"example.com";# 其他配置...}

最后再总结下,Host 字段为 URL 中://和第一个/之间,去掉协议默认端口后的内容,浏览器会自动设置 Host 字段,然后 Web 服务中 Nginx 会用这个 Host 字段去匹配server_name配置项,从而实现一台服务器托管多个网站的功能


OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/6 3:00:23

shell脚本发邮件

qq邮箱获取授权码 如图1所示登陆qq邮箱,点击上方设置,点击账号,向下滑动,找到 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 点击开启授权码 网易邮箱获取授权码 登陆到网易邮箱中,点击上方设置,选择POP3/S…

作者头像 李华
网站建设 2026/1/4 12:12:06

关系型数据库和非关系型数据库的区别

好的,我们来详细比较一下关系型数据库和非关系型数据库的主要区别: 数据模型 关系型数据库 (RDBMS): 使用表(二维表格)作为核心数据结构。 数据以行(记录)和列(字段)的形式组织。 不同表之间通过外键建立关系(如一对一、一对多、多对多)。 要求数据遵循严格的模式(…

作者头像 李华
网站建设 2026/1/5 0:37:35

网络安全中对称算法和非对称算法的作用和区别

对称算法与非对称算法的作用与区别对称算法作用: 对称算法使用相同的密钥进行加密和解密,主要用于高效加密大量数据。其核心公式为: $$ E_k(P) C \quad \text{和} \quad D_k(C) P $$ 其中 $P$ 为明文, $C$ 为密文, $…

作者头像 李华
网站建设 2026/1/7 11:42:11

Whisper-Tiny.en:5大商业场景揭秘2025智能语音市场新格局

Whisper-Tiny.en:5大商业场景揭秘2025智能语音市场新格局 【免费下载链接】whisper-tiny.en 项目地址: https://ai.gitcode.com/hf_mirrors/openai/whisper-tiny.en 在智能语音技术快速发展的2025年,OpenAI推出的Whisper-Tiny.en模型以仅3900万参…

作者头像 李华
网站建设 2026/1/3 16:01:36

当工控老炮儿遇上上位机:手把手教你驯服大地控制器

大地和控制器上位机,带使用说明 can车间里那台老旧的PLC突然罢工,仪表数据像脱缰野马般收不上来——这种场景工控人都懂。今天咱们就拿大地控制器开刀,用Python和Modbus协议,手把手教你怎么让上位机和控制器"对上暗号"。…

作者头像 李华
网站建设 2026/1/7 9:40:52

18. 有理函数和渐近线

1.有理函数 2.渐近线1.有理函数 有理函数是两个多项式函数相除得到的函数, 其一般形式为:P(x)和Q(x)是多项式, 且Q(x)不等于02.渐近线 渐近线描述的是当函数图像上的点沿着曲线无限远离原点时, 它与某条固定直接无限接近的现象对于有理函数, 主要有三种渐近线: 垂直渐近线, 水平…

作者头像 李华