文章目录
- 前言
- 1、Web 概念
- 1.1 Web 的特点
- 1.2 B/S 架构模型
- 1.3 Web 请求与响应过程
- 1.4 静态资源与动态资源
- 1.5 Web 的发展阶段
- 1.6 小结
- 2、HTTP 与 HTTPS 协议
- 2.1 http与https区别
- 2.2 HTTPS 握手流程
- 2.3 HTTP状态码
- 2.3.1 HTTP 状态码概览
- 2.3.2 常用状态码详解
- 3、Nginx 概念
- 3.1 Nginx 介绍
- 3.2 简述Nginx和Apache的差异
- 3.3 Nginx 进程结构
- 4、Nginx安装
- 4.1 Nginx 编译安装步骤
- 4.1.1 环境准备
- 4.1.2 安装依赖包
- 4.1.3 创建运行用户和组
- 4.1.4 解压并编译安装
- 4.1.5 创建软链接以便系统识别命令
- 4.2 企业级编译选项示例
- 4.3 服务管理命令
- 4.3.1 检查配置
- 4.3.2 启动/停止/重载
- 4.4 平滑升级步骤
- 4.5 添加系统服务(Systemd 方式)
- 4.6 信号说明
- 5、Nginx 配置
- 5.1 全局配置
- 5.2 I/O 事件配置
- 5.3 HTTP 配置
- 5.3 Web 服务的监听配置
- 5.4 其他配置(扩展)
- 6、nginx 虚拟主机
- 6.1 访问状态统计配置
- 6.1.1 查看已安装的所有模块
- 6.1.2 修改 nginx.conf 配置文件
- 6.1.3 重启服务,访问测试
- 6.2 基于授权的访问控制
- 6.2.1 生成用户密码认证文件
- 6.2.2 修改主配置文件相对应目录,添加认证配置项
- 6.2.3 重启服务,访问测试
- 6.3 基于客户端的访问控制
- 6.4 基于域名的 Nginx 虚拟主机
- 6.4.1 为虚拟主机提供域名解析
- 6.4.2 为虚拟主机准备网页文档
- 6.4.3 修改nginx配置文件
- 6.5 基于IP 的 Nginx 虚拟主机
- 6.5.1 配置server1
- 6.5.2 配置server 2
- 6.6 基于端口的 Nginx 虚拟主机
- 6.6.1 基于端口1
- 6.6.2 基于端口2
- 6.6.3 重启服务,测试访问
- 6.6.2 基于端口2
- 6.6.3 重启服务,测试访问
- 总结
前言
随着互联网技术的飞速发展,Web 服务已成为信息传递与交互的核心载体。无论是静态页面的展示,还是动态内容的处理,都离不开高效、稳定的 Web 服务器支持。Nginx 作为一款高性能的 HTTP 和反向代理服务器,凭借其出色的并发处理能力、灵活的配置方式和丰富的功能模块,在全球范围内得到了广泛应用。
本章将从 Web 的基本概念入手,逐步介绍 HTTP/HTTPS 协议、Web 请求响应流程、静态与动态资源的区别,并重点讲解 Nginx 的安装、配置与虚拟主机搭建。通过理论与实践相结合的方式,帮助读者建立起对 Web 服务与 Nginx 服务器的系统认识,为后续深入学习与应用打下坚实基础。
1、Web 概念
Web(World Wide Web,万维网)是运行在互联网之上的一个 超文本信息系统,它依赖于 HTTP/HTTPS 协议 实现浏览器与服务器之间的交互。
1.1 Web 的特点
- 分布式:资源分布在世界各地的服务器上。
- 跨平台:只要有浏览器,就能访问资源。
- 无状态:每次 HTTP 请求都是独立的,服务器不会记住客户端状态(除非使用 Cookie/Session)。
1.2 B/S 架构模型
Web 采用 B/S 架构(Browser/Server):
- Browser(浏览器):用户的入口,发送请求、渲染页面。
- Server(服务器):接收请求,返回所需资源或动态内容。
用户浏览器 ──> Web服务器(Nginx/Apache)│└─> 应用服务器(PHP/Python/Java)│└─> 数据库(MySQL/Redis)
1.3 Web 请求与响应过程
一次完整的 Web 访问过程包括以下步骤:
- 输入 URL:用户在浏览器输入
http://www.example.com
。 - DNS 解析:浏览器将域名解析为 IP 地址。
- 建立连接:浏览器与 Web 服务器建立 TCP 连接(3 次握手)。
- 发送请求:浏览器发起 HTTP 请求(GET/POST)。
- 服务器处理:
- Web 服务器处理静态资源请求
- 动态请求转发到应用服务器(如 Tomcat、Django)
- 应用服务器可能再查询数据库
- 返回响应:Web 服务器将结果打包成 HTTP 响应报文返回浏览器。
- 渲染页面:浏览器解析 HTML、加载 CSS/JS、渲染最终页面。
浏览器 ----> Web服务器 ----> 应用服务器 ----> 数据库<---- <---- <----
1.4 静态资源与动态资源
-
静态资源:不需要服务器额外处理,直接返回即可。
- HTML、CSS、图片、视频、JS 文件
- 优点:速度快,压力小
-
动态资源:需要服务器端代码计算生成,再返回客户端。
- PHP 脚本、Python Flask/Django、Java Servlet、Ruby
- 优点:个性化内容,支持交互
- PHP 脚本、Python Flask/Django、Java Servlet、Ruby
图 1-3 静态与动态资源对比图
静态资源:用户请求 → Web服务器直接返回
动态资源:用户请求 → Web服务器 → 应用服务器运行代码 → 返回结果
1.5 Web 的发展阶段
- Web 1.0(只读):静态页面为主,用户只能浏览。
- Web 2.0(交互式):用户可生成内容,AJAX(前端) 技术普及。
- Web 3.0(智能化):语义网、区块链、去中心化概念兴起。
1.6 小结
- Web 是基于 B/S 架构 的信息交互方式。
- 核心是 请求-响应模型,通过 HTTP/HTTPS 协议传输数据。
- Web 可提供 静态资源 和 动态资源。
2、HTTP 与 HTTPS 协议
2.1 http与https区别
- HTTP:明文传输,不安全。
- HTTPS:在 HTTP 上加入 SSL/TLS 加密,防止中间人攻击。
2.2 HTTPS 握手流程
TLS 握手过程:客户端发起请求 → 服务端返回证书 → 双方协商加密算法 → 建立安全通道。
客户端 Hello → 服务端 Hello + 证书 → 客户端验证 → 加密通信
TLS 握手过程(建立安全通道)
流程:
- 客户端 Hello
- 浏览器发起请求,告诉服务器自己支持哪些加密算法。
-
服务端 Hello + 证书
- 网站返回 SSL 证书(证明身份),选择一种加密算法。
-
客户端验证证书
- 浏览器检查证书是否可信(CA 颁发、没过期、域名匹配)。
-
协商密钥
- 双方生成一个临时密钥,用于对称加密后续通信。
-
加密通信开始
- 后续 HTTP 数据都通过加密通道传输。
2.3 HTTP状态码
2.3.1 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 | “服务器出问题了” |
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安装
4.1 Nginx 编译安装步骤
官方下载 https://nginx.org/download/nginx-1.20.2.tar.gz
4.1.1 环境准备
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #禁用防火墙开机自启
setenforce 0 #临时关闭SELinux
4.1.2 安装依赖包
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
4.1.3 创建运行用户和组
useradd -M -s /sbin/nologin nginx
4.1.4 解压并编译安装
cd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/
cd nginx-1.20.2/./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_modulemake && make install
4.1.5 创建软链接以便系统识别命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
4.2 企业级编译选项示例
./configure \--prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with-http_ssl_module \--with-http_v2_module \--with-http_gzip_static_module \--with-http_stub_status_module \--with-pcre \--with-stream \--with-stream_ssl_module \--http-log-path=/var/log/nginx/access.log \--error-log-path=/var/log/nginx/error.log \--pid-path=/var/run/nginx/nginx.pid \--lock-path=/var/lock/nginx.lock
4.3 服务管理命令
4.3.1 检查配置
nginx -t
4.3.2 启动/停止/重载
nginx # 启动
kill -QUIT <PID> # 停止
kill -HUP <PID> # 重载配置
kill -USR1 <PID> # 重新打开日志文件
4.4 平滑升级步骤
tar -zxvf nginx-新版本.tar.gz
cd nginx-新版本
./configure ...(与原配置相同)
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade # 或手动重启
4.5 添加系统服务(Systemd 方式)
创建文件:/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
设置权限并启用:
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx
systemctl enable nginx
4.6 信号说明
信号编号 | 信号名 | 含义 |
---|---|---|
0 | EXIT | 程序退出时收到该信息。 |
1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。 |
2 | INT | 表示结束进程,但并不是强制性的,常用的 “Ctrl+C” 组合键发出就是一个 kill -2 的信号。 |
3 | QUIT | 退出。 |
9 | KILL | 杀死进程,即强制结束进程。 |
11 | SEGV | 段错误。 |
15 | TERM | 正常结束进程,是 kill 命令的默认信号 |
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/htmlroot 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.htmlalias(别名配置):alias /var/www/html
请求www.benet.com/test/1.html,会返回文件/var/www/html/1.htmlproxy_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 { #访问位置为/statusstub_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; #允许访问的客户端 IPdeny all; #拒绝其它IP客户端访问}}systemctl restart nginx
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.comcharset 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.comcharset 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.21server_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.40server_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
ame 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 服务的基本概念、HTTP/HTTPS 协议的工作机制,以及 Nginx 服务器的核心功能与配置方法。通过学习,我们了解到:
-
Web 服务基于 B/S 架构,通过 HTTP/HTTPS 协议实现浏览器与服务器之间的通信;
-
静态资源与动态资源在处理方式上有本质区别,Nginx 能高效处理两者;
-
Nginx 不仅可作为静态资源服务器,还支持反向代理、负载均衡、高并发处理等高级功能;
-
通过配置虚拟主机,可以实现基于域名、IP 和端口的多种网站托管方式;
-
Nginx 的模块化设计和灵活的配置语法,使其成为构建现代 Web 架构的重要工具。
掌握这些内容,不仅有助于理解 Web 服务的工作原理,也能为后续搭建、优化和维护 Web 服务器提供坚实的理论与实践基础。