Web与Nginx网站服务

Web与Nginx网站服务

  • Web与Nginx网站服务
    • [1、Web 概念](#1、Web 概念)
      • [1.1 Web 的基本概念](#1.1 Web 的基本概念)
      • [1.2 B/S 架构模型](#1.2 B/S 架构模型)
      • [1.3 Web 请求与响应过程(重点)](#1.3 Web 请求与响应过程(重点))
      • [1.4 静态资源与动态资源](#1.4 静态资源与动态资源)
      • [1.5 Web 的发展阶段](#1.5 Web 的发展阶段)
        • [1.6 实验:搭建最小 Web 服务](#1.6 实验:搭建最小 Web 服务)
    • [2、HTTP 与 HTTPS 协议](#2、HTTP 与 HTTPS 协议)
      • [2.1 http与https区别](#2.1 http与https区别)
      • [2.2 HTTPS 握手流程](#2.2 HTTPS 握手流程)
      • [2.3 HTTP状态码](#2.3 HTTP状态码)
        • [2.3.1 HTTP 状态码概览](#2.3.1 HTTP 状态码概览)
        • [2.3.2 常用状态码详解](#2.3.2 常用状态码详解)
      • [2xx 成功](#2xx 成功)
      • [3xx 重定向](#3xx 重定向)
      • [4xx 客户端错误](#4xx 客户端错误)
      • [5xx 服务器错误](#5xx 服务器错误)
      • [生活中的 HTTP 状态码类比](#生活中的 HTTP 状态码类比)
    • [3、Nginx 概念](#3、Nginx 概念)
      • [3.1 Nginx 介绍](#3.1 Nginx 介绍)
      • [3.2 简述Nginx和Apache的差异](#3.2 简述Nginx和Apache的差异)
      • [3.3 Nginx 进程结构](#3.3 Nginx 进程结构)
    • 4、Nginx安装
    • [5、Nginx 配置](#5、Nginx 配置)
      • [5.1 全局配置](#5.1 全局配置)
      • [5.2 I/O 事件配置](#5.2 I/O 事件配置)
      • [5.3 HTTP 配置](#5.3 HTTP 配置)
      • [5.3 Web 服务的监听配置](#5.3 Web 服务的监听配置)
      • [5.4 其他配置(扩展)](#5.4 其他配置(扩展))
    • [6、nginx 虚拟主机](#6、nginx 虚拟主机)
      • [6.1 访问状态统计配置](#6.1 访问状态统计配置)
        • [6.1.1 查看已安装的所有模块](#6.1.1 查看已安装的所有模块)
        • [6.1.2 修改 nginx.conf 配置文件](#6.1.2 修改 nginx.conf 配置文件)
        • [6.1.3 重启服务,访问测试](#6.1.3 重启服务,访问测试)
      • [6.2 基于授权的访问控制](#6.2 基于授权的访问控制)
        • [6.2.1 生成用户密码认证文件](#6.2.1 生成用户密码认证文件)
        • [6.2.2 修改主配置文件相对应目录,添加认证配置项](#6.2.2 修改主配置文件相对应目录,添加认证配置项)
        • [6.2.3 重启服务,访问测试](#6.2.3 重启服务,访问测试)
      • [6.3 基于客户端的访问控制](#6.3 基于客户端的访问控制)
      • [6.4 基于域名的 Nginx 虚拟主机](#6.4 基于域名的 Nginx 虚拟主机)
        • [6.4.1 为虚拟主机提供域名解析](#6.4.1 为虚拟主机提供域名解析)
        • [6.4.2 为虚拟主机准备网页文档](#6.4.2 为虚拟主机准备网页文档)
        • [6.4.3 修改nginx配置文件](#6.4.3 修改nginx配置文件)
      • [6.5 基于IP 的 Nginx 虚拟主机](#6.5 基于IP 的 Nginx 虚拟主机)
        • [6.5.1 配置server1](#6.5.1 配置server1)
        • [6.5.2 配置server 2](#6.5.2 配置server 2)
      • [6.6 基于端口的 Nginx 虚拟主机](#6.6 基于端口的 Nginx 虚拟主机)
        • [6.6.1 基于端口1](#6.6.1 基于端口1)
        • [6.6.2 基于端口2](#6.6.2 基于端口2)
        • [6.6.3 重启服务,测试访问](#6.6.3 重启服务,测试访问)
  • 总结

Web与Nginx网站服务


1、Web 概念


1.1 Web 的基本概念

Web(World Wide Web,万维网)是运行在互联网之上的一个 超文本信息系统 ,它依赖于 HTTP/HTTPS 协议 实现浏览器与服务器之间的交互。

特点

  • 分布式:资源分布在世界各地的服务器上。
  • 跨平台:只要有浏览器,就能访问资源。
  • 无状态:每次 HTTP 请求都是独立的,服务器不会记住客户端状态(除非使用 Cookie/Session)。

1.2 B/S 架构模型

Web 采用 B/S 架构(Browser/Server)

  • Browser(浏览器):用户的入口,发送请求、渲染页面。
  • Server(服务器):接收请求,返回所需资源或动态内容。

B/S 架构示意图

复制代码
用户浏览器 ──> Web服务器(Nginx/Apache)
                 │
                 └─> 应用服务器(PHP/Python/Java)
                          │
                          └─> 数据库(MySQL/Redis)

1.3 Web 请求与响应过程(重点)

一次完整的 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 请求-响应流程

复制代码
浏览器 ----> Web服务器 ----> 应用服务器 ----> 数据库
    <----       <----             <---- 

1.4 静态资源与动态资源

  • 静态资源:不需要服务器额外处理,直接返回即可。

    • HTML、CSS、图片、视频、JS 文件
    • 优点:速度快,压力小
  • 动态资源:需要服务器端代码计算生成,再返回客户端。

    • PHP 脚本、Python Flask/Django、Java Servlet、Ruby

    • 优点:个性化内容,支持交互

静态与动态资源对比图

复制代码
静态资源:用户请求 → Web服务器直接返回
动态资源:用户请求 → Web服务器 → 应用服务器运行代码 → 返回结果

1.5 Web 的发展阶段

  • Web 1.0(只读):静态页面为主,用户只能浏览。
  • Web 2.0(交互式):用户可生成内容,AJAX(前端) 技术普及。
  • Web 3.0(智能化):语义网、区块链、去中心化概念兴起。

1.6 实验:搭建最小 Web 服务

注意后面安装nginx之后再创建一个静态页面

实验目标:

体验一次最简单的 Web 请求与响应过程 Wireshark 并且抓包。

实验步骤:

  1. 创建一个静态页面:

    html 复制代码
    <!-- index.html -->
    <html>
    <head><title>My First Web</title></head>
    <body>
    <h1>Hello Web!</h1>
    <p>This is my first web page.</p>
    </body>
    </html>
    
    HTML 文档结构
    <!-- index.html -->
    <html(标签)> 
    <head(头部)><title>My First Web</title></head>    
    <body(主体)>
    <h1(一级标题)>Hello Web!</h1>
    <p(段落标签)>This is my first web page.</p>
    </body>
    </html>

2、HTTP 与 HTTPS 协议

2.1 http与https区别

  • HTTP:明文传输,不安全。
  • HTTPS:在 HTTP 上加入 SSL/TLS 加密,防止中间人攻击。

2.2 HTTPS 握手流程

TLS 握手过程 :客户端发起请求 → 服务端返回证书 → 双方协商加密算法 → 建立安全通道。

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

TLS 握手过程(建立安全通道)

流程

  1. 客户端 Hello
  • 浏览器发起请求,告诉服务器自己支持哪些加密算法。
  1. 服务端 Hello + 证书
  • 网站返回 SSL 证书(证明身份),选择一种加密算法。
  1. 客户端验证证书
  • 浏览器检查证书是否可信(CA 颁发、没过期、域名匹配)。
  1. 协商密钥
  • 双方生成一个临时密钥,用于对称加密后续通信。
  1. 加密通信开始
  • 后续 HTTP 数据都通过加密通道传输。

2.3 HTTP状态码


2.3.1 HTTP 状态码概览

HTTP 状态码都是 三位数字,按首位分为五类:(f12,网络查看)

类型 范围 含义 大白话理解
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 "服务器出问题了"

HTTP 状态码就是服务器对你请求的"回话信息",告诉你请求成功没、东西搬没搬、你有没有权限、或者服务器出问题了。

3、Nginx 概念

3.1 Nginx 介绍

​ Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器。Nginx 是由 Igor Sysoev 为俄罗斯访问点开量第二的Rambler.ru 站发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011 年 6 月 1 日,Nginx 1.0.4 发布。

​ Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,单台物理服务器可支持30 000~50 000个并发请求。并在一个 BSD-like 协议下发行。由俄罗斯的程序设计师 Igor Sysoev 所开发,供俄国大型的入口网站及搜索引擎 Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 Nginx 网站用户有:百度 BWS、新浪、网易、腾讯等。

Nginx 是一个 高性能 Web 服务器,它可以做很多事情:

  • 静态资源服务:可以直接把网页、图片、视频这些文件发给用户。
  • 反向代理:用户访问你的服务器,Nginx 可以帮你把请求转发到后端真正处理请求的服务器。
  • 负载均衡:当有很多后端服务器时,Nginx 可以智能分配流量,让每台服务器都不忙不过来。
  • 高并发处理:用事件驱动的方式处理请求,能同时处理成千上万的用户请求,而不会占用太多资源。

优势

  • 轻量级,占用内存小
  • 支持百万级并发访问
  • 稳定可靠,开源且社区活跃

nginx 官网:

复制代码
RamBler:http://www.rambler.ru/ 
nginx: http://nginx.org/

Mainline version 主线版本
Stable version

稳定版本
Legacy versions 老版本,遗产版本
旧版本下载:http://mirrors.sohu.com/nginx/
Nginx 中文参考地址: http://www.nginx.cn/doc/

3.2 简述Nginx和Apache的差异

  • Nginx是一个甚于事件的Web服务器,Apache是一个基于流程的服务器;
  • Nginx避免子进程的概念,Apache是基于子进程的;
  • Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般;
  • Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;
  • Nginx支持热部署,Apache不支持热部署;
  • Nginx对于静态文件处理具有更高效率,Apache相对一般;
  • Nginx在反向代理场景具有明显优势,Apache相对一般。

3.3 Nginx 进程结构

web请求处理机制

  • 多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求。

  • 多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来个客户方进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定。

工作进程(worker process)的功能:

复制代码
所有 Worker 进程都是平等的
实际处理:网络请求,由 Worker 进程处理
Worker进程数量:一般设置为核心数,充分利用CPU资源,同时避免进程数量过多,导致进程竞争CPU资源,
增加上下文切换的损耗
接受处理客户的请求
将请求依次送入各个功能模块进行处理
I/O调用,获取响应数据
与后端服务器通信,接收后端服务器的处理结果
缓存数据,访问缓存索引,查询和调用缓存数据
发送请求结果,响应客户的请求
接收主程序指令,比如重启、升级和退出等

4、Nginx安装

使用脚本安装 方便 复制粘贴

1.关闭防火墙,将安装nginx所需软件包传到/opt目录下

2.安装依赖包

3.创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)

4.编译安装Nginx




5.检查、启动、重启、停止 nginx服务


5、Nginx 配置

认识Nginx服务的主配置文件 nginx.conf

复制代码
vim /usr/local/nginx/conf/nginx.conf 进行

5.1 全局配置

复制代码
#user nobody; 					#运行用户,若编译时未指定则默认为 nobody
worker_processes 4; 			#工作进程数量,可配置成服务器内核数 * 2,如果网站访问量不大,一般设为1就够用了
#error_log logs/error.log; 		#错误日志文件的位置
#pid logs/nginx.pid; 			#PID 文件的位置

5.2 I/O 事件配置

复制代码
events {
    use epoll; 					#使用 epoll 模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
    worker_connections 4096; 	#每个进程处理 4096 个连接
}
#如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。
#在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。

#可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
/etc/security/limits.conf

#epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
若工作进程数为 8,每个进程处理 4 096 个连接,则允许 Nginx 正常提供服务的连接数已超过 3 万个(4 096×8=32 768),当然具体还要看服务器硬件、网络带宽等物理条件的性能表现。

5.3 HTTP 配置

使用"http { }"界定标记,包括访问日志、HTTP 端口、网页目录、默认字符集、连接保持,以及后面要讲到的虚拟 Web 主机、PHP 解析等一系列设置,其中大部分配置语句都包含在子界定标记"server { }"内

复制代码
http {
	##文件扩展名与文件类型映射表
    include       mime.types;
	##默认文件类型
    default_type  application/octet-stream;
	##日志格式设定
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
	##访问日志位置
    #access_log  logs/access.log  main;
	##支持文件发送(下载)
    sendfile        on;
	##此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
    #tcp_nopush     on;
	##连接保持超时时间,单位是秒
    #keepalive_timeout  0;
    keepalive_timeout  65;
	##gzip模块设置,设置是否开启gzip压缩输出
    #gzip  on;

5.3 Web 服务的监听配置

复制代码
##Web 服务的监听配置
server {
	##监听地址及端口
	listen 80; 
	##站点域名,可以有多个,用空格隔开
	server_name www.kgc.com;
	##网页的默认字符集
	charset utf-8;
	##根目录配置
	location / {
		##网站根目录的位置/usr/local/nginx/html
		root html;
		##默认首页文件名
		index index.html index.php;
	}
	##内部错误的反馈页面
	error_page 500 502 503 504 /50x.html;
	##错误页面配置
	location = /50x.html {
		root html;
	}
}
}

5.4 其他配置(扩展)

复制代码
 日志格式设定
$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
====================================================================================
location常见配置指令,root、alias、proxy_pass
root(根路径配置):root /var/www/html
请求www.benet.com/test/1.html,会返回文件/var/www/html/test/1.html

alias(别名配置):alias /var/www/html
请求www.benet.com/test/1.html,会返回文件/var/www/html/1.html

proxy_pass(反向代理配置)

6、nginx 虚拟主机

6.1 访问状态统计配置

6.1.1 查看已安装的所有模块

先使用命令/usr/local/nginx/sbin/nginx -V 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块
cat /opt/nginx-1.20.2/auto/options | grep YES #可查看 nginx 已安装的所有模块

6.1.2 修改 nginx.conf 配置文件

修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置

复制代码
cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
	server {
		listen 80;
		server_name www.benet.com;
		charset utf-8;
		location / {
			root html;
			index index.html index.php;
		}
		##添加 stub_status 配置##
		location /status { 					#访问位置为/status
			stub_status on; 				#打开状态统计功能
			access_log off; 				#关闭此位置的日志记录
		}
	}
}






6.1.3 重启服务,访问测试
复制代码
systemctl restart nginx

浏览器访问 http://192.168.10.21/status
Active connections :表示当前的活动连接数;
server accepts handled requests :表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数、 已处理的请求数。

可 curl -s http://192.168.10.21/status 结合 awk与if 语句进行性能监控。

6.2 基于授权的访问控制

6.2.1 生成用户密码认证文件
复制代码
yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd.db zhangsan
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db




6.2.2 修改主配置文件相对应目录,添加认证配置项
复制代码
vim /usr/local/nginx/conf/nginx.conf
......
	server {
		location / {
			......
			##添加认证配置##
			auth_basic "secret";				#设置密码提示框文字信息
			auth_basic_user_file /usr/local/nginx/passwd.db;
		}
	}
6.2.3 重启服务,访问测试
复制代码
nginx -t
systemctl restart nginx

浏览器访问 http://192.168.10.21


6.3 基于客户端的访问控制

复制代码
访问控制规则如下:
deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
规则从上往下执行,如匹配则停止,不再往下匹配。

vim /usr/local/nginx/conf/nginx.conf
......
	server {
		location / {
			......
			##添加控制规则##
			allow 192.168.10.20; 					#允许访问的客户端 IP
			deny all;								#拒绝其它IP客户端访问
		}
	}

systemctl restart nginx

其他机器:(无法访问)

192.168.10.129电脑:(可以访问)

6.4 基于域名的 Nginx 虚拟主机

6.4.1 为虚拟主机提供域名解析
复制代码
echo "192.168.10.21 www.yjs.com www.benet.com" >> /etc/hosts
6.4.2 为虚拟主机准备网页文档
复制代码
mkdir -p /var/www/html/benet
mkdir -p /var/www/html/yjs
echo "<h1>www.yjs.com</h1>" > /var/www/html/yjs/index.html
echo "<h1>www.benet.com</h1>" > /var/www/html/benet/index.html
6.4.3 修改nginx配置文件
复制代码
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
	server {
		listen 80;
		server_name www.yjs.com;					#设置域名www.yjs.com
		charset utf-8;
		access_log logs/www.yjs.access.log; 		#设置日志名
		location / {
			root /var/www/html/yjs;					#设置www.yjs.com 的工作目录
			index index.html index.php;
		}
		error_page 500 502 503 504 /50x.html;
		location = 50x.html{
			root html;
		}
	}

	
	server {
		listen 80;
		server_name www.benet.com;					#设置域名www.benet.com
		charset utf-8;
		access_log logs/www.benet.access.log; 
		location / {
			root /var/www/html/benet;
			index index.html index.php;
		}
		error_page 500 502 503 504 /50x.html;
		location = 50x.html{
			root html;
		}
	}	
}


4.重启服务,访问测试

复制代码
systemctl restart nginx

浏览器访问
http://www.yjs.com
http://www.benet.com


6.5 基于IP 的 Nginx 虚拟主机

6.5.1 配置server1
复制代码
ifconfig ens33:0 192.168.10.40 netmask 255.255.255.0 

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
	server {
		listen 192.168.10.21:80;					#设置监听地址192.168.10.21
		server_name www.YJS.com;
		charset utf-8;
		access_log logs/www.YJS.access.log; 
		location / {
			root /var/www/html/kgc;
			index index.html index.php;
		}
		error_page 500 502 503 504 /50x.html;
		location = 50x.html{
			root html;
		}1
	}
6.5.2 配置server 2
复制代码
server {
	listen 192.168.10.40:80;					#设置监听地址192.168.10.40
	server_name www.benet.com;
	charset utf-8;
	access_log logs/www.benet.access.log; 
	location / {
		root /var/www/html/benet;
		index index.html index.php;
	}
	error_page 500 502 503 504 /50x.html;
	location = 50x.html{
		root html;
	}
}	
}
systemctl restart nginx

浏览器访问
http://192.168.10.21
http://192.168.10.40

6.6 基于端口的 Nginx 虚拟主机

6.6.1 基于端口1
复制代码
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
	server {
		listen 192.168.10.21:8080;					#设置监听 8080 端口
		server_name www.yjs.com;
		charset utf-8;
		access_log logs/www.yjs.access.log; 
		location / {
			root /var/www/html/yjs;
			index index.html index.php;
		}
		error_page 500 502 503 504 /50x.html;
		location = 50x.html{
			root html;
		}
	}
6.6.2 基于端口2
复制代码
server {
	listen 192.168.10.21:8888;					#设置监听 8888 端口
	server_name www.benet.com;
	charset utf-8;
	access_log logs/www.benet.access.log; 
	location / {
		root /var/www/html/benet;
		index index.html index.php;
	}
	error_page 500 502 503 504 /50x.html;
	location = 50x.html{
		root html;
	}
}	
6.6.3 重启服务,测试访问
复制代码
systemctl restart nginx

浏览器访问
http://192.168.10.21:8080
http://192.168.10.21:8888


总结

本文全面且深入地讲解了 Web 与 Nginx 网站服务的相关知识,涵盖概念、协议、工具及配置实践。

Web 基础部分,明确 Web 是依赖 HTTP/HTTPS 协议的超文本信息系统,具备分布式、跨平台、无状态特性,采用 B/S 架构,浏览器与服务器分工协作。详细描述了从用户输入 URL 到页面渲染的完整请求响应流程:DNS 解析域名获取 IP、建立 TCP 连接、发送 HTTP 请求、服务器处理(静态资源直接返回,动态资源经应用服务器和数据库处理)、返回响应、浏览器渲染。区分了静态资源(无需额外处理)与动态资源(需服务器计算生成),并简述 Web 1.0(只读)、2.0(交互式)、3.0(智能化)的发展阶段。

协议层面,对比 HTTP(明文传输,不安全)与 HTTPS(SSL/TLS 加密,安全)的差异,解析 HTTPS 的 TLS 握手流程(客户端 Hello、服务端 Hello + 证书、客户端验证、协商密钥、加密通信)。重点列举 HTTP 状态码,按 1xx 到 5xx 分类,详解常用状态码如 200(成功)、301(永久重定向)、404(未找到)、500(服务器错误)等的含义。

Nginx 部分,介绍其作为高性能 Web 服务器的特点,支持数万并发,轻量且稳定,对比 Apache 在处理机制、资源占用、并发能力等方面的优势。解析其进程结构(主进程管理、工作进程处理请求),工作进程数通常设为 CPU 核心数以优化性能。安装步骤包括关闭防火墙、安装依赖包、创建专用用户、编译安装等。配置文件解析涵盖全局配置(工作进程数、错误日志)、I/O 事件(epoll 模型、连接数)、HTTP 配置(监听端口、服务器域名、根目录等)。还详细讲解了访问状态统计配置、基于授权(密码认证)和客户端(IP 限制)的访问控制,以及基于域名、IP、端口的虚拟主机配置方法,全面展示了 Nginx 在静态资源服务、负载均衡、反向代理等场景的强大功能与实际应用。

相关推荐
proware4 小时前
昇腾310i Pro固件说明
linux·运维·服务器
java水泥工4 小时前
校园管理系统|基于SpringBoot和Vue的校园管理系统(源码+数据库+文档)
数据库·vue.js·spring boot
星秋Eliot4 小时前
Flutter的三棵树
前端·flutter
正义的大古4 小时前
OpenLayers常用控件 -- 章节六:全屏控件教程
前端·javascript·html·openlayers
lypzcgf4 小时前
Coze源码分析-资源库-删除插件-前端源码-核心组件实现
前端·typescript·前端框架·react·coze·coze插件·智能体平台
烟雨书信4 小时前
安全运维和系统安全
运维·安全
高山有多高4 小时前
详解文件操作
c语言·开发语言·数据库·c++·算法
盒马coding4 小时前
PostgreSQL与Greenplum常见连接客户端
数据库·postgresql
言之。4 小时前
Django get_or_create 方法详解
数据库·django·sqlite