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 配置审视(七)

相关推荐
刘发财1 小时前
弃用html2pdf.js,这个html转pdf方案能力是它的几十倍
前端·javascript·github
牛奶4 小时前
2026年大模型怎么选?前端人实用对比
前端·人工智能·ai编程
牛奶4 小时前
前端人为什么要学AI?
前端·人工智能·ai编程
Kagol6 小时前
🎉OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用!
前端·开源·agent
GIS之路7 小时前
ArcGIS Pro 中的 notebook 初识
前端
JavaGuide7 小时前
7 道 RAG 基础概念知识点/面试题总结
前端·后端
ssshooter8 小时前
看完就懂 useSyncExternalStore
前端·javascript·react.js
格砸8 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
Live000009 小时前
在鸿蒙中使用 Repeat 渲染嵌套列表,修改内层列表的一个元素,页面不会更新
前端·javascript·react native
柳杉9 小时前
使用Ai从零开发智慧水利态势感知大屏(开源)
前端·javascript·数据可视化