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

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

背景

上篇 blog
【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(五)

分析了 Host 字段在 HTTP 请求中的定义,作用,以及如何与 Nginx 的 server_name 配置项互动的,下面继续

Nginx 配置审视

OK,下面实践看下,首先修改本地 hosts 文件,模拟 DNS 行为(解析域名)

当前客户端用的是 Windows 系统,编辑文件 C:\Windows\System32\drivers\etc\hosts,在最后添加一行 127.0.0.1 hitweston.gitlab(这里可以随意替换成自己喜欢的名字),hitweston.gitlab 这个是公网域名,所以如果直接在浏览器输入,是找不到这个服务器的,也无法直接修改公共 DNS,让其指向远程服务器,但是可以在本机强制这个域名指向 127.0.0.1(也就是本机的回环地址)

OK,接着在 VSCode 中进行端口映射,这里涉及到内网穿透 + 端口映射,两个知识点,这里不熟悉的先回顾之前系列 blog
【OS】【Nuttx】【周边】效果呈现方案解析:端口映射(一)
【Ubuntu】【远程开发】内网穿透:反向隧道建立(一)

OK,然后在浏览器输入 http://hitweston.gitlab,注意,前面要加 http,因为当前 Web 服务器的配置只能支撑 http 的,而在现代浏览器中,如果在地址栏只输入域名,不加 http://,浏览器通常会默认尝试用 https://,而远程服务器只支持 http,就会导致访问失败

显式指定 http:// 后,就能正常打开远程 Web 页面,地址栏上提示的不安全,正式 http:// 协议的标志,但是没关系,因为这个通道只供个人使用,并且 HTTP 流量被封装在 SSH 加密通道里

其整个请求过程大致如下

OK,下面用浏览器简单察看下 HTTP 请求中的 Host 请求头,首先打开 Windows 下的 Edge 浏览器,按下 F12 打开开发者工具

选择网络选项卡,筛选器里选择全部,可以查看该页面下全部请求和响应

然后在地址栏访问 http://hitweston.gitlab,可以在网络下找到第一个请求 hitweston.gitlab

点击该请求,往下滑,可以看到 Host 请求头字段为 hitweston.gitlab

解读一下,这里的 Host: hitwyh.gitlab 表示客户端浏览器告诉远程 Web 服务器:我想要访问你这台机器上名为 hitwyh.gitlab 的站点,可以看到,虽然用户的请求实际是发到了 127.0.0.1:80(通过本地 hosts 文件解析),但 Host 头保留了原始域名,而不是 IP,然后 Nginx 就可以拿着这个值去匹配配置中的 server 块

bash 复制代码
server {
	listen *:80;
    server_name hitwyh.gitlab;
    ...
}

然后再说一个点,即使不配置 server_name,也可以访问到远程上的 Gitlab 服务?这里涉及到 Nginx 的匹配规则,在官方文档 How nginx processes a request 可以找到如下描述

这里面有几个点:

  • 首先,Nginx 只看 HTTP 请求头里的 Host 字段 ,通过 Host 字段去匹配所有 server 块中的 server_name,来判断这个请求应该交给哪个 server 块处理
  • 如果 Host 字段没有匹配到任何一个 server_name,或者请求里根本没有 Host 头,比如老式的 HTTP/1.0 客户端,那么 Nginx 就会把这个请求交给监听该端口的 default_server 默认服务器处理

OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(七)

相关推荐
Refly1 天前
【微信接入 OpenClaw 龙虾🦞】10分钟手把手教程完成接入,Claude 模型无限使用
前端·微信·github
恋猫de小郭1 天前
为什么中转渠道的顶级模型会不好用?这是一个技术问题
前端·人工智能·ai编程
发现一只大呆瓜1 天前
React-深度拆解 React路由:从实战进阶到底层原理
前端·react.js·面试
不甜情歌1 天前
搞懂 Promise:告别回调嵌套,再也不怕异步代码乱成麻
前端·javascript
野草arthas1 天前
什么是视觉层次?为什么需要它?
前端
发现一只大呆瓜1 天前
React-手把手带你实现 Keep-Alive 效果
前端·react.js·面试
酉鬼女又兒1 天前
入门前端CSS 媒体查询全解析:从入门到精通,打造完美响应式布局(可用于备赛蓝桥杯Web应用开发)
前端·css·职场和发展·蓝桥杯·前端框架·html5·媒体
Dxy12393102161 天前
HTML常用标签详解
前端·html
毛骗导演1 天前
@tencent-weixin/openclaw-weixin 插件深度解析(一):认证与会话管理机制
前端·架构
wefly20171 天前
告别本地环境!m3u8live.cn一键实现 M3U8 链接预览与调试
前端·后端·python·音视频·m3u8·前端开发工具