nginx作业
一、Nginx简介
Nginx 是一个高性能的、开源的 HTTP 和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。它由俄罗斯程序员伊戈尔·赛索耶夫开发,并于2004年首次公开发布。
Nginx 的突出特点是其高并发处理能力、低内存消耗、高稳定性和丰富的功能集。如今,它已成为全球最受欢迎的 Web 服务器之一,被许多高流量网站如百度、京东、新浪、网易、腾讯等所使用。
二、 Nginx 的核心特点与优势
1.高并发、高性能:
事件驱动架构:Nginx 采用异步非阻塞的事件驱动模型。与 Apache 的多线程或多进程模型(一个连接对应一个线程)不同,Nginx 使用一个或几个工作进程来处理成千上万的网络连接。这使得它在资源消耗(特别是 CPU 和内存)方面极具效率,尤其在处理大量并发连接时表现卓越。
2.低内存消耗:
由于其高效的设计,Nginx 在处理静态内容时,每个连接的内存占用非常少。
3.高可靠性:
Nginx 以其稳定性著称,可以长时间不间断运行,许多网站都报告了其数百天甚至更长的无故障运行时间。
4.模块化设计:
Nginx 具有高度模块化的结构。除了核心功能外,大部分功能都以模块的形式存在。用户可以根据需要自行编译和添加模块,这使得 Nginx 非常灵活和可扩展。
5.正向代理:
代理客户端向服务器发起请求,典型场景如客户端需间接访问目标服务器(如科学上网)。nginx 接收客户端请求后,转发至目标服务器并返回响应。
6.反向代理:
代理服务器端向客户端提供服务,客户端不知晓实际处理请求的后端服务器。nginx 可实现请求分发、隐藏后端信息、SSL 卸载、缓存等功能,是服务架构中 “流量入口” 的常见选择。
7.作为负载均衡器:
作为反向代理的自然延伸,Nginx 可以将流量分发到后端的多台服务器上,以避免单一服务器压力过大,从而提高系统的整体处理能力和可用性。
三、 Nginx 的主要应用场景
1.静态内容服务:
Nginx 在处理静态文件(如 HTML、CSS、JavaScript、图片、视频)方面效率极高,通常被用作静态内容的服务器。
2.反向代理和负载均衡:
反向代理:隐藏后端服务器的真实信息,提高安全性。所有客户端请求都发往 Nginx,由 Nginx 与后端应用服务器(如 Tomcat, Node.js, Python, PHP-FPM 等)通信。
负载均衡:通过 upstream 模块,可以使用多种策略(如轮询、权重、IP哈希等)将请求分发到后端服务器集群。
3.API 网关:
在现代微服务架构中,Nginx 常被用作 API 网关,统一处理认证、限流、日志、SSL 终端等通用任务。
4.SSL 终端:
Nginx 可以处理 HTTPS 协议的加解密工作,减轻后端服务器的计算负担。
5.虚拟主机:
支持基于域名或 IP 的虚拟主机,可以在单台服务器上运行多个网站。
6.URL 重写与重定向:
强大的 rewrite 模块可以灵活地修改请求的 URL,实现 SEO 优化、域名迁移等功能。
四、 Nginx 工作原理:事件驱动模型
Nginx 之所以能高效处理并发,关键在于其主从多进程模型和事件驱动架构。
1.主进程:
以 root 身份运行,负责管理工作进程(读取配置、绑定端口、平滑重启等)。它不处理具体的网络请求。
2.工作进程:
由主进程创建,以非特权用户运行,负责处理实际的网络连接(HTTP 请求)。多个工作进程可以充分利用多核 CPU。
当一个工作进程启动后,它会开始监听共享的套接字,并在一个事件循环中等待事件(如新的连接、可读的数据、可写的缓冲区等)。一旦事件发生,工作进程会迅速处理它,然后立即返回事件循环等待下一个事件。这种非阻塞的方式避免了为每个连接创建线程或进程的开销。
五、部署nginx
[root@server ~]# setenforce 0 [root@server ~]# systemctl stop firewalld[root@server ~]# systemctl disable firewalld[root@server ~]# yum install nginx -y[root@server ~]# nginx -V # 查看版本,编译器、配置参数等信息[root@server ~]# systemctl start nginx # 启动httpd[root@server ~]# systemctl enable nginx # 设置开机启动
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.[root@server ~]# systemctl status nginx # 查看状态,q键退出查看[root@server ~]# ps -ef | grep nginx # 查看进程
root 1690 1 0 13:57 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 1691 1690 0 13:57 ? 00:00:00 nginx: worker process
nginx 1692 1690 0 13:57 ? 00:00:00 nginx: worker process
root 1726 1510 0 14:00 pts/0 00:00:00 grep --color=auto nginx# 测试,Windows中打开浏览器输入服务器IP地址
六、 Nginx 的核心管理命令
安装Nginx
# 安装 Nginx
sudo dnf install -y nginx
启动 Nginx
systemctl start nginx
停止 Nginx
systemctl stop nginx
重启 Nginx
systemctl restart nginx
重新加载配置
systemctl reload nginx
# 或者使用 Nginx 自带的信号控制
nginx -s reload
检查服务状态
systemctl status nginx
测试配置文件语法
sudo nginx -t
七、防火墙配置
# 检查防火墙状态
sudo systemctl status firewalld# 如果防火墙未运行,启动并启用
sudo systemctl start firewalld
sudo systemctl enable firewalld# 配置防火墙规则
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
八、 Nginx 的重要文件和目录结构
| 路径 | 说明 |
|---|---|
| /etc/nginx/ | 主配置目录,所有 Nginx 配置文件都存放在这里 |
| /etc/nginx/nginx.conf | 主配置文件,这是 Nginx 启动时读取的第一个文件 |
| /etc/nginx/default.d/ | 另一个可以存放配置片段的目录 |
| /etc/nginx/conf.d/ | 默认服务器块配置目录,你创建的以 .conf 结尾的文件会被自动包含。这是配置虚拟主机的推荐位置 |
| /usr/share/nginx/html/ | 默认的 Web 根目录,存放你的网站静态文件(HTML, CSS, JS, 图片等) |
| /var/log/nginx/ | 日志文件目录 |
| access.log | 访问日志,记录所有客户端请求 |
| /usr/sbin/nginx | Nginx 可执行主程序文件 |
| /var/lib/nginx/ | Nginx 运行时的数据文件目录 |
九、虚拟主机
基于 IP 地址的虚拟主机
原理
如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,当用户请求的IP地址不同,则会访问到不同网页,且每个网站都有一个独立的IP地址。(常用)
注意:主机必须有多个IP地址
#1.初始配置
setenforce 0 # 恢复快照
systemctl stop firewalld
systemctl disable firewalld
yum install nginx -y
systemctl start nginx # 启动httpd
systemctl enable nginx # 设置开机启动
#2.增加IP地址
nmcli c modify ens160 +ipv4.addresses 192.168.145.150/24
nmcli c modify ens160 +ipv4.addresses 192.168.145.151/24
#重新加载网卡,连接激活
nmcli c reload
nmcli c up ens160
#3.创建目录写入文件方便验证
#4.修改配置文件
vim /etc/nginx/conf.d/vshost.conf # 添加内容
server {listen 80; #端口号默认80server_name 192.168.145.150;root /www/ip150;}
server {listen 80;server_name 192.168.145.151;root /www/ip151;}
#5.重启服务,测试
基于端口号的虚拟主机
vim /etc/nginx/nginx.conf #添加内容
server {listen 5111; #端口号修改server_name _;root /www/port5111;error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}server {listen 5222; #端口号修改server_name _;root /www/port5222;error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
基于域名的虚拟主机
# Linux端
# vim /etc/hosts
# 添加如下内容:
192.168.145.130 www.zy.com
192.168.145.130 www.sxhkt.com# windows端,打开:
C:\Windows\System32\drivers\etc\hosts文件,添加如下内容:#运行cmd然后notepad hosts以管理员身份打开记事本才能修改保存
192.168.145.130 www.zy.com
192.168.145.130 www.sxhkt.com
vim /etc/nginx/nginx.conf
# 定位第1行,添加:server {listen 80;server_name www.zy.com; # 写域名root /www/zy;error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}server {listen 80;server_name www.sxhkt.com;root /www/sxhkt;error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
十、基于https协议的静态网站
概念:
1.超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。
2.HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。
3.HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext TransferProtocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道。
4.HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间

5.SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。它是在上世纪90年代中期,由网景公司设计的。到了1999年,SSL 应用广泛,已经成为互联网上的事实标准。IETF 就把SSL 标准化。标准化之后SSL被改为 TLS(Transport Layer Security传输层安全协议)
SSL协议分为两层:
SSL记录协议 (SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等
SSL协议提供的服务:
认证用户和服务器,确保数据发送到正确的客户机和服务器
加密数据以防止数据中途被窃取
维护数据的完整性,确保数据在传输过程中不被改变
HTTPS通信机制
- 握手阶段(Handshake)
客户端发起请求:浏览器发送ClientHello消息,包含支持的加密算法列表和随机数
服务器响应:返回ServerHello消息,选定加密算法并发送服务器随机数+数字证书(包含公钥)
证书验证:客户端验证证书有效性(CA机构、有效期等)
密钥交换:客户端生成预主密钥(Pre-Master Secret),用服务器公钥加密后传输
会话密钥生成:双方通过随机数和预主密钥计算得到对称加密所需的会话密钥 - 加密通信阶段
对称加密传输:使用协商好的会话密钥加密HTTP报文
数据完整性校验:通过MAC(消息认证码)防篡改
会话恢复:支持Session ID或Session Ticket机制复用已建立的加密参数
使用LNMP搭建私有云存储
搭建LNMP环境
[root@server ~]# yum install nginx mariadb-server php* -y
上传软件
使用xftp将nextcloud-25.0.1.zip软件压缩包上传到Linux的根目录,并解压缩
[root@server ~]# cd /[root@server /]# unzip /nextcloud-25.0.1.zip
设置nextcloud安装命令权限
[root@server /]# chmod -Rf 777 /nextcloud
设置数据库
[root@server /]# systemctl start mariadb # 启动数据库[root@server /]# mysql# 数据库设置
MariaDB [(none)]> create database nextcloud; # 创建数据库MariaDB [(none)]> create user 'nextcloud'@'localhost' identified by '123456'; # 创建用户及密码MariaDB [(none)]> grant all on nextcloud.* to 'nextcloud'@'localhost';
# 设置权限MariaDB [(none)]> exit # 退出
配置nginx
[root@server /]# vim /etc/nginx/nginx.conf server {listen 80;server_name 192.168.48.130;root /nextcloud;}
安装
打开浏览器后输入服务器IP地址,进入nextcloud安装向导
管理员的用户名即密码自定
存储与数据库:选择MySQL/MariaDB,设置数据库用户为nextcloud,密码:123456,数据库名:nextcloud,主机名:localhost
最后访问测试
