Web与Nginx网站服务

一、Web 基础概念

1.1 Web 概述

  • 定义:World Wide Web(万维网),基于 HTTP/HTTPS 的超文本信息系统。

  • 特点

    • 分布式:资源分布在全球服务器。

    • 跨平台:只要有浏览器即可访问。

    • 无状态:每次 HTTP 请求都是独立的,服务器不会记住客户端状态(除非使用 Cookie/Session)

1.2 B/S 架构

  • Browser/Server 模型:

    • 浏览器:用户的入口、发送请求、渲染页面。

    • 服务器:接收请求、返回资源。

    • 用户浏览器 ──> Web服务器(Nginx/Apache)

│ └─> 应用服务器(PHP/Python/Java)

│ └─> 数据库(MySQL/Redis)

1.3 Web 请求响应流程

  1. 输入 URL :用户在浏览器输入 http://www.example.com

  2. DNS 解析:浏览器将域名解析为 IP 地址。

  3. 建立连接:浏览器与 Web 服务器建立 TCP 连接(3 次握手)。

  4. 发送请求:浏览器发起 HTTP 请求(GET/POST)。

  5. 服务器处理

    • Web 服务器处理静态资源请求

    • 动态请求转发到应用服务器(如 Tomcat、Django)

    • 应用服务器可能再查询数据库

  6. 返回响应:Web 服务器将结果打包成 HTTP 响应报文返回浏览器。

  7. 渲染页面:浏览器解析 HTML、加载 CSS/JS、渲染最终页面。

浏览器 <----> Web服务器 <----> 应用服务器 <----> 数据库

1.4 静态资源 vs 动态资源

类型 特点 示例
静态资源 直接返回,速度快 HTML/CSS/图片/JS
动态资源 服务器端生成,支持交互 PHP/Python/Java/Ruby 脚本

1.5 Web 发展阶段

  • Web 1.0:只读,静态页面。

  • Web 2.0:交互式,用户生成内容(AJAX)。

  • Web 3.0:智能化,语义网/区块链/去中心化。


二、HTTP/HTTPS 协议

2.1 HTTP vs HTTPS

  • HTTP:明文传输,不安全。

  • HTTPS:HTTP + SSL/TLS 加密,防中间人攻击。

2.2 TLS 握手流程

  1. 客户端发起请求 → 服务端返回证书 → 双方协商加密算法 → 建立安全通道。

  2. 客户端 Hello → 服务端 Hello + 证书 → 客户端验证 → 加密通信

流程

  1. 客户端 Hello
  • 浏览器发起请求,告诉服务器自己支持哪些加密算法。
  1. 服务端 Hello + 证书

    • 网站返回 SSL 证书(证明身份),选择一种加密算法。
  2. 客户端验证证书

    • 浏览器检查证书是否可信(CA 颁发、没过期、域名匹配)。
  3. 协商密钥

    • 双方生成一个临时密钥,用于对称加密后续通信。
  4. 加密通信开始

    • 后续 HTTP 数据都通过加密通道传输。

2.3 HTTP 状态码

HTTP 状态码都是 三位数字,按首位分为五类:

类型 范围 含义 大白话理解
1xx 100--199 信息性状态码 "我收到了请求,还在处理中"
2xx 200--299 成功 "请求成功,服务器给你东西了"
3xx 300--399 重定向 "你要的东西搬家了,去新地址找"
4xx 400--499 客户端错误 "你请求有问题(URL错、权限不够)"
5xx 500--599 服务器错误 "服务器出问题,暂时拿不到东西"
2.3.2 常用状态码详解

2xx 成功

状态码 含义 类比
200 OK 请求成功 "东西拿到了"
201 Created 创建成功 "你提交的表单/资源已创建"
204 No Content 成功,但没有内容 "操作成功,但没有额外东西返回"

3xx 重定向

状态码 含义 类比
301 Moved Permanently 永久搬家 "这个页面永久换地址了"
302 Found 临时搬家 "暂时换地址,下一次还用旧地址"
304 Not Modified 内容未改 "东西没变,你可以用缓存"

4xx 客户端错误

状态码 含义 类比
400 Bad Request 请求格式错 "你写的请求我看不懂"
401 Unauthorized 未认证 "先登录,再访问"
403 Forbidden 禁止访问 "你没权限"
404 Not Found 找不到页面 "东西搬走或根本没这东西"

5xx 服务器错误

状态码 含义 类比
500 Internal Server Error 服务器内部出错 "服务器崩了"
502 Bad Gateway 网关错误 "我去找别的服务器,结果那边挂了"
503 Service Unavailable 服务不可用 "服务器忙不过来了,稍后再试"
504 Gateway Timeout 网关超时 "找别的服务器太慢,超时了"

生活中的 HTTP 状态码类比

场景 状态码 对应情况
打开网页正常 200 成功拿到网页
点链接页面搬家 301/302 浏览器自动跳到新地址
输入错网址 404 "没找到这个页面"
登录需要权限 401 "先登录才能看"
网站挂了 500 "服务器出问题了"

三、Nginx 介绍与配置

3.1 Nginx 简介

  • 高性能 HTTP/反向代理服务器,支持高并发(3w~5w/台)。

  • 用途:

  • 静态资源服务:可以直接把网页、图片、视频这些文件发给用户。

  • 反向代理:用户访问你的服务器,Nginx 可以帮你把请求转发到后端真正处理请求的服务器。

  • 负载均衡:当有很多后端服务器时,Nginx 可以智能分配流量,让每台服务器都不忙不过来。

  • 高并发处理:用事件驱动的方式处理请求,能同时处理成千上万的用户请求,而不会占用太多资源。

  • 优势

  • 轻量级,占用内存小

  • 支持百万级并发访问

  • 稳定可靠,开源且社区活跃

3.2 Nginx vs Apache

特性 Nginx Apache
架构 事件驱动 进程/线程驱动
并发能力 一般
热部署 支持 不支持
静态文件处理 高效 一般
反向代理 优势明显 一般
  • Nginx是一个甚于事件的Web服务器,Apache是一个基于流程的服务器;

  • Nginx避免子进程的概念,Apache是基于子进程的;

  • Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般;

  • Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;

  • Nginx支持热部署,Apache不支持热部署;

  • Nginx对于静态文件处理具有更高效率,Apache相对一般;

  • Nginx在反向代理场景具有明显优势,Apache相对一般。

3.3 Nginx 进程结构

  • 多进程模型,Master检查控制 Worker 进程处理请求。

  • Worker 数量建议 = CPU 核心数,避免过多竞争。


四、Nginx 配置详解

4.1 主配置文件:nginx.conf

全局配置

nginx

复制代码
user nobody;
worker_processes 4;
error_log logs/error.log;
pid logs/nginx.pid;
I/O 事件配置

nginx

复制代码
events {
    use epoll;
    worker_connections 4096;
}
HTTP 配置

nginx

复制代码
http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
    
    server {
        listen 80;
        server_name www.kgc.com;
        charset utf-8;
        root html;
        index index.html index.php;
        
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
}

五、Nginx 虚拟主机

5.1 基于域名

nginx

复制代码
server {
    listen 80;
    server_name www.yjs.com;
    root /var/www/html/yjs;
}

server {
    listen 80;
    server_name www.benet.com;
    root /var/www/html/benet;
}

5.2 基于 IP

nginx

复制代码
server {
    listen 192.168.10.21:80;
    server_name www.yjs.com;
    root /var/www/html/yjs;
}

server {
    listen 192.168.10.40:80;
    server_name www.benet.com;
    root /var/www/html/benet;
}

5.3 基于端口

nginx

复制代码
server {
    listen 8080;
    server_name www.yjs.com;
    root /var/www/html/yjs;
}

server {
    listen 8888;
    server_name www.benet.com;
    root /var/www/html/benet;
}

六、访问控制与状态统计

6.1 状态统计

nginx

复制代码
location /status {
    stub_status on;
    access_log off;
}

6.2 基于密码认证

nginx

复制代码
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;

6.3 基于 IP 控制

nginx

复制代码
allow 192.168.10.20;
deny all;

总结

  • Web 基础:B/S 架构、请求响应流程、动静资源区别。

  • HTTP/HTTPS:加密、状态码、握手流程。

  • Nginx:高性能、多进程、配置灵活。

  • 虚拟主机:域名/IP/端口三种方式。

  • 安全控制:状态监控、密码认证、IP 黑白名单。

相关推荐
wheeldown3 小时前
【Linux】环境变量与程序地址空间详解
linux·运维·服务器·c++·vim·unix
C-20023 小时前
CICD 持续集成与持续交付
运维·ci/cd
JarvanMo3 小时前
Flutter 应用程序中的无声杀手:为什么每个开发者都害怕这个文件
前端
钮钴禄·爱因斯晨3 小时前
Linux 常用命令全解析:从入门到实战的必备指南
linux·运维·服务器
小桥风满袖3 小时前
极简三分钟ES6 - 数组遍历
前端·javascript
艾小码3 小时前
彻底搞懂 Vue 生命周期:从 created 到 unmounted 的完整指南
前端·javascript·vue.js
GHOME3 小时前
复习-网络协议
前端·网络协议·面试
秦清3 小时前
组态可视化软件【导入属性】
前端·javascript·后端
小桥风满袖3 小时前
极简三分钟ES6 - 函数的参数
前端·javascript