用户访问域名地址到服务器得过程
一、先厘清:用户访问域名的完整流程(从浏览器到FastAPI服务)
首先纠正一个小误区:Nginx只负责转发HTTP请求到指定的「IP:端口」,systemd服务的作用是保障FastAPI服务持续在该端口监听运行。完整访问流程分为6步,每一步都对应你的配置:
步骤1:用户发起访问请求
用户在浏览器输入 https://gi.dbba.cc(或 http://gi.dbba.cc),浏览器先通过DNS解析,将域名 gi.dbba.cc 转换为你的服务器公网IP(这一步在服务器外部完成,由域名服务商提供解析服务)。
步骤2:请求到达服务器(防火墙/安全组放行)
请求通过互联网发送到你的服务器,首先经过服务器防火墙(如ufw)和云服务器安全组(如阿里云/腾讯云安全组),只有80端口(HTTP)和443端口(HTTPS)被放行(你已配置对应端口,请求才能进入服务器内部)。
步骤3:Nginx 80端口拦截,自动跳转HTTPS
你的第二个Nginx server块监听80端口,配置了「HTTP转HTTPS」逻辑:
1 | if ($host = gi.dbba.cc) { |
此时,若用户访问 http://gi.dbba.cc(80端口),会被Nginx自动重定向到 https://gi.dbba.cc(443端口),确保请求使用加密连接。
步骤4:Nginx 443端口接收请求,匹配反向代理规则
你的第一个Nginx server块监听443端口(SSL加密端口),且server_name gi.dbba.cc与请求域名匹配,因此Nginx会处理该请求:
1 | location / { |
Nginx作为「反向代理服务器」,会将用户的HTTPS请求,原样转发到 http://127.0.0.1:8000(服务器本地的8000端口,即FastAPI服务监听端口),同时携带必要的请求头信息。
步骤5:FastAPI服务接收并处理请求(由systemd保障运行)
你的systemd服务配置,已经将FastAPI注册为系统服务,核心作用是:
确保FastAPI服务持续在
0.0.0.0:8000端口监听(ExecStart中的--host 0.0.0.0 --port 8000);异常自动重启(
Restart=always)、开机自启,保障8000端口始终有服务响应请求。
当Nginx将请求转发到8000端口后,FastAPI服务(uvicorn运行的main:app)会接收请求,处理业务逻辑(如接口查询、数据返回等),然后生成响应结果。
步骤6:响应原路返回给用户
FastAPI将响应结果返回给Nginx(通过8000端口);
Nginx接收响应后,将其封装为HTTPS响应,发送给用户浏览器;
用户浏览器渲染响应内容,完成整个访问流程。
流程总结(通俗版):
用户 → 域名解析 → 服务器80/443端口 → Nginx(80转443 + 反向代理) → 8000端口FastAPI服务(systemd保障运行) → 响应原路返回用户
Nginx = 前台接待员(接收用户请求,转发给后台);FastAPI = 后台工作人员(处理业务);systemd = 后勤保障(确保后台工作人员始终在岗)