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

相关推荐
逝川长叹8 分钟前
利用 SSI-COV 算法自动识别线状结构在环境振动下的模态参数研究(Matlab代码实现)
前端·算法·支持向量机·matlab
xkxnq12 分钟前
第一阶段:Vue 基础入门(第 13天)
前端·javascript·vue.js
qq_4198540514 分钟前
Excel预览
前端
Levin__NLP_CV_AIGC21 分钟前
Ubuntu部署Dufs
linux·运维·服务器·ubuntu·ssh
PieroPc24 分钟前
用FastAPI 后端 和 Vue3 前端写一个博客系统 例
前端·vue·fastapi
xiaoyustudiowww33 分钟前
fetch异步简单版本(Tomcat 9)
java·前端·tomcat
TOPGUS33 分钟前
谷歌Chrome浏览器即将对HTTP网站设卡:突出展示“始终使用安全连接”功能
前端·网络·chrome·http·搜索引擎·seo·数字营销
C_心欲无痕40 分钟前
ts - 模板字面量类型与 `keyof` 的魔法组合:`keyof T & `on${string}`使用
linux·运维·开发语言·前端·ubuntu·typescript
一勺菠萝丶1 小时前
Java 后端想学 Vue,又想写浏览器插件?
java·前端·vue.js
@PHARAOH1 小时前
HOW - 如何禁用 localstorage
前端·状态模式