使用Nginx搭建web网站
4.2.1nginx简介
1.概念
nginx 是一款高性能的 HTTP 和反向代理 Web 服务器,同时具备电子邮件代理功能,以轻量级、高并发处理能力为核心优势。
2.特点
- 高并发:可处理数万甚至十万级并发连接,适配高访问量场景。
- 低内存消耗:相比同类 Web 服务器,内存占用更高效。
- 高可靠性:采用 “主进程 + 工作进程” 架构,单个进程异常不影响整体服务。
- 功能丰富:支持反向代理、负载均衡、静态资源服务等多种场景。
3.架构
采用 主进程(Master Process)+ 工作进程(Worker Process)模式:
- 主进程:负责管理工作进程(启动、停止、监控等)。
- 工作进程:负责处理客户端请求,通过异步非阻塞机制高效处理大量连接。
4.关键工作机制
基于事件驱动的异步非阻塞模型,借助 epoll(Linux)、kqueue(BSD)等高效事件通知机制,避免传统阻塞模型的资源浪费,实现对多连接的高效处理。
5.正向代理
代理客户端向服务器发起请求,典型场景如客户端需间接访问目标服务器(如科学上网)。nginx 接收客户端请求后,转发至目标服务器并返回响应。
6.反向代理
代理服务器端向客户端提供服务,客户端不知晓实际处理请求的后端服务器。nginx 可实现请求分发、隐藏后端信息、SSL 卸载、缓存等功能,是服务架构中 “流量入口” 的常见选择。
7.负载均衡
当存在多台后端服务器时,nginx 通过轮询、权重、IP 哈希、最少连接等策略,将客户端请求合理分配至不同后端,提升服务吞吐量与可靠性,避免单服务器过载。
4.2.2部署Nginx
setenforce 0 #设置SELinux为宽容模式
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #禁用防火墙开机自启
yum install nginx -y #下载Nginx包
nginx -V # 查看版本,编译器、配置参数等信息
systemctl start nginx # 启动httpd
systemctl enable nginx # 设置开机启动Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service. #成功启动systemctl status nginx # 查看状态,q键退出查看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地址
4.2.3常用命令
systemctl系列
systemctl start nginx # 启动服务
systemcctl restart nginx # 重启服务
systemctl enable nginx # 开机启动
systemctl stop nginx # 停止服务
systemctl disable nginx # 取消开机启动
systemctl status nginx # 查看状态
nginx自带命令
nginx # 启动nginx
nginx restart # 重启服务
nginx -s reload # 重新加载配置文件
nginx -s stop # 强行停止服务
nginx -s quit # 优雅停止服务,即所有请求处理完后退出服务
nginx -v # 查看版本号
nginx -t # 检查配置文件的语法错误,无错返回ok
4.3虚拟主机
4.3.1基于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.重启服务,测试
4.3.2基于端口号的虚拟主机
基于上面不同只是对端口号进行修改
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 {}}
4.3.3基于域名的虚拟主机
1.手动配置IP与域名的映射关系
# 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
2.修改配置文件
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 {}}
4.4基于https协议的静态网站
4.4.1原理
1.ssl协议分层:
-
SSL记录协议 (SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能
-
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等
2.ssl协议提供的服务:
-
认证用户和服务器,确保数据发送到正确的客户机和服务器
-
加密数据以防止数据中途被窃取
-
维护数据的完整性,确保数据在传输过程中不被改变
4.4.2HTTPS通信机制
1. 握手阶段(Handshake)
-
客户端发起请求:浏览器发送ClientHello消息,包含支持的加密算法列表和随机数
- 服务器响应:返回ServerHello消息,选定加密算法并发送服务器随机数+数字证书(包含公钥)
- 证书验证:客户端验证证书有效性(CA机构、有效期等)
- 密钥交换:客户端生成预主密钥(Pre-Master Secret),用服务器公钥加密后传输
- 会话密钥生成:双方通过随机数和预主密钥计算得到对称加密所需的会话密钥
2. 加密通信阶段
- 对称加密传输:使用协商好的会话密钥加密HTTP报文
- 数据完整性校验:通过MAC(消息认证码)防篡改
- 会话恢复:支持Session ID或Session Ticket机制复用已建立的加密参数
4.4.3建立加密认证网站
#先做初始配置再新建存储网站数据文件的目录#制作证书所用的私钥文件
openssl genrsa -aes128 2048 > /etc/nginx/zy.key
#Enter pass phrase: #这是需要你输入密码#制作证书
openssl req -utf8 -new -key /etc/nginx/zy.key -x509 -days 365 -out /etc/nginx/zy.crt#在加载SSL支持的Nginx并使用上述私钥时除去必须的口令
cd /etc/nginx
cp zy.key zy.key.org #备份文件,防止损坏
openssl rsa -in zy.key.org -out zy.key #提取私钥#修改配置文件
vim /etc/nginx/nginx.confserver {listen 443 ssl http2;server_name 192.168.145.130;root /www/zy;ssl_certificate /etc/nginx/zy.crt;ssl_certificate_key /etc/nginx/zy.key;}
server { # 输入http跳转到httpslisten 80;server_name 192.168.145.130;return 301 https://192.168.145.130;}#实验做完后都需要重启服务测试结果
4.5使用LNMP搭建私有云存储
搭建环境
1.准备工作:做好初始配置
2.搭建环境
yum install nginx mariadb-server php* -y #下载数据库包#解压缩到根目录
cd /
unzip /nextcloud-25.0.1.zip #修改权限,方便安装
chmod -Rf 777 /nextcloud#配置数据库
systemctl start mariadb # 启动数据库
mysql # 进入数据库
create database nextcloud; # 创建数据库(“;”不可省略)
create user 'nextcloud'@'localhost' identified by '123456'; # 创建用户及密码
grant all on nextcloud.* to 'nextcloud'@'localhost'; # 设置权限
exit # 退出#配置完后重启数据库
3.配置nginx
vim /etc/nginx/nginx.conf server {listen 80;server_name 192.168.145.130;root /nextcloud;}#重启httpd服务
systemctl start nginx
4.安装
-
打开浏览器后输入服务器IP地址,进入nextcloud安装向导
-
管理员的用户名即密码自定
-
存储与数据库:选择MySQL/MariaDB,设置数据库用户为nextcloud,密码:123456,数据库名:nextcloud,主机名:localhost
5.域名信任
#修改配置文件vim /nextcloud/config/config.php
# 按照下面的内容对源文件进行修改
<?php
$CONFIG = array ('instanceid' => 'ocvy7jm0iqom','passwordsalt' => 'jLg0GXwJtlj8vowMsLpN5MbBSRsoiC','secret' => 'ayTVaC6dsHrSKgXazVP6llFMWdNVxjF582v5pAPKuyEecdTU','trusted_domains' =>array (0 => '192.168.145.130',1 => '2dc0afad.r17.cpolar.top', # 需添加),'datadirectory' => '/nextcloud/data','dbtype' => 'mysql','version' => '25.0.1.1','overwrite.cli.url' => 'http://192.168.145.130','dbname' => 'nextcloud','dbhost' => 'localhost','dbport' => '','dbtableprefix' => 'oc_','mysql.utf8mb4' => true,'dbuser' => 'nextcloud','dbpassword' => '123456','installed' => true,
);# 保存退出后重试
6.依旧访问测试
