我的网站是如何通过 Nginx 部署的?

我的网站是如何通过 Nginx 部署的?

你好,我是悟空。

我的网站 passjava.cn 已经稳定运行两年多了,购买的服务器是很便宜的那种,1个 CPU,1G 内存,1MB 带宽。我在这个服务器上部署了我的个人网站。

部署方式

项目是纯静态页面,部署在了一台服务器上。如下图所示,当我在浏览器访问这个域名时,请求会先经过 DNS 域名解析,拿到域名绑定的 IP 地址,而这个 IP 地址又是我购买的云服务器地址,在这个服务器上有网站的静态页面。

DNS 原理

当需要访问passjava.cn这个站点时,会在浏览器地址栏里输入www.passjava.cn这样一个URL。实际上我们想要浏览的网页内容都存放在互联网中的某台服务器上,而浏览器的任务就是找到我们想要访问的这台服务器的IP地址,然后向它请求内容。从这一刻起,DNS就开始工作了。其工作流程如图所示。

  • 用户在浏览器地址栏中输入想要访问的网站URL;
  • 该浏览器从上述URL中抽取出主机名 passjava.cn,并将这个主机名传给本机DNS应用的客户端;
  • DNS客户端向本地DNS服务器发送一个包含主机名的请求;
  • DNS客户端会收到来自本地DNS服务器的应答报文,其中含有对应于该主机的IP地址;
  • 一旦该浏览器接收到来自DNS的IP地址,它就可以向由该IP地址定位的服务器发起一个TCP连接,请求相应的内容;

Nginx 配置

以下是 Nginx 的配置:

ini 复制代码
server {
    listen       80;
    server_name  www.passjava.cn;
​
    location / {
        root   /home/ubuntu/docs;
        index  index.html;
    }
}

我开始以为这是一个正向代理的配置,其实并不是,这个配置只是一个简单的虚拟主机配置,用于托管静态网站。这个配置定义了一个 Nginx 虚拟主机,用于处理来自 www.passjava.cn 域名的 HTTP 请求,并提供静态网页。

配置说明

解释下这些配置项含义:

  1. server { ... }:这是一个 server 块,用于定义一个虚拟主机。每个 server 块通常用于配置一个不同的虚拟主机,以处理特定域名或 IP 地址的请求。
  2. listen 80;:这一行指定了监听的端口号,这里是 80,表示该虚拟主机将处理来自客户端的 HTTP 请求,这是 HTTP 的标准端口号。
  3. server_name www.passjava.cn;:这一行定义了虚拟主机所处理的域名。在这个例子中,虚拟主机将处理来自 www.passjava.cn 域名的请求。当客户端发送请求到这个域名时,Nginx 将使用这个 server 块中的配置来响应请求。
  4. location / { ... }:这是一个 location 块,它定义了如何处理特定 URI(统一资源标识符)路径的请求。在这里,location / 匹配所有请求的根路径。
  5. root /home/ubuntu/docs;:这一行指定了 Nginx 服务器上要提供的文件的根目录。当客户端请求根路径时,Nginx 将在 /home/ubuntu/docs 目录中查找文件来提供给客户端。
  6. index index.html;:这一行指定了默认的索引文件,当客户端请求的路径是一个目录时,Nginx 将尝试提供 index.html 文件作为默认文档。如果 /home/ubuntu/docs 目录中存在 index.html 文件,它将作为默认文档提供给客户端。

注意:正向代理配置通常涉及将客户端的请求代理到其他服务器,而不是提供自己的网页内容。正向代理的配置会包括一些额外的代理设置,用于将请求转发到目标服务器,而不是提供本地静态文件。

相关推荐
掘金者阿豪13 分钟前
把业务数据变成共享仪表盘:Metabase可视化与远程访问实践
前端·后端
kyriewen33 分钟前
折腾了半年 AI 编程工作流,最后发现效率瓶颈是桌上那块屏幕
前端·javascript·ai编程
蜗牛前端1 小时前
codex 全流程开发上线的高颜值礼簿小程序
前端·微信小程序
大龄秃头程序员2 小时前
我在图文流 App 里落地双层缓存、弱网降级与 OOM 治理
前端
老王以为2 小时前
React Renderer 分离的多平台架构
前端·react native·react.js
hunterandroid2 小时前
Kotlin Coroutines 与 Flow:让异步任务更清晰
前端
Bigger2 小时前
从零搭建 AI 代码审查服务:一份前端也能看懂的 Python 学习笔记
前端·ci/cd·ai编程
lichenyang4533 小时前
JSAPI、NAPI、Biz、Imp:ASCF Demo 如何真正调用系统能力和 C++ 能力
前端
lichenyang4533 小时前
IPC、JSVM、UIThread、libuv:ASCF 架构图里最容易混的几个词
前端
用户059540174463 小时前
Redis记忆存储故障恢复测试踩坑实录:手动测试让我漏掉了2个一致性Bug
前端·css