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

相关推荐
Dxy12393102162 分钟前
HTML中的伪类详解:从基础到高级应用的全面指南
前端·html
Dxy12393102163 分钟前
HTML中如何设置元素样式:从基础到进阶的完整指南
前端·html
村头的猫7 分钟前
JWT 令牌的工作原理,结构和签名验证
前端·数据库·经验分享·微服务
pe7er4 小时前
window管理开发环境篇 - 持续更新
前端·后端
We་ct5 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
陈随易9 小时前
有生之年系列,Nodejs进程管理pm2 v7.0发布
前端·后端·程序员
冰暮流星9 小时前
javascript之事件代理/事件委托
前端
星马梦缘10 小时前
如何切换window-ubuntu双系统【方案二】
linux·运维·ubuntu
陈随易10 小时前
AI时代,你还在坚持手搓文章吗
前端·后端·程序员
里欧跑得慢12 小时前
17. Flutter Hero动画实现:让界面过渡更加优雅
前端·css·flutter·web