尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

一个 Nginx 搞定多个网站!虚拟主机部署实战教程

一个 Nginx 搞定多个网站!虚拟主机部署实战教程 文章目录Nignx服务器介绍核心特点Nginx架构常用命令LinuxNginx 部署节点规划安装步骤Nginx 配置配置结构1.全局配置块2.核心模块 块3. 业务模块 块虚拟主机根据名称根据 portNignx服务器介绍Nginx发音engine‐x是一款高性能、事件驱动的开源 Web 服务器同时也可做反向代理、负载均 衡、HTTP 缓存、静态资源服务器。由俄罗斯工程师 Igor Sysoev 开发现在是互联网主流服务组件。在 高连接并发的情况下能够支持高达5万个并发连接数的响应而内存、CPU等系统资源消耗却非常低 运行非常稳定。核心特点事件驱动模型epoll/kqueue采用异步非阻塞 IO单进程可以处理大量并发连接高并发消耗资源少万级并发很轻松远优于传统 Apache 多进程模型。传统 Apache一连接一进程 / 线程1 万并发就要 1 万个进程内存暴涨上下文切换开销巨大。 Nginx少量 worker 进程依靠操作系统 IO 多路复用一个 worker 可以同时成千上万个连接大部 分连接处于空闲等待几乎不消耗 CPU。优势万级并发内存占用很低。轻量占用内存、CPU 低部署简单配置文件简洁。多角色能力Web 服务器直接托管静态文件 (html/js/css/ 图片)反向代理把客户端请求转发给后端服务Tomcat、SpringBoot、Node、PHP‐FPM负载均衡多台后端服务器分发流量做集群HTTP 缓存缓存后端响应减轻后端压力SSL/TLS 终端处理 https 证书解密加密限流、防盗链、gzip 压缩、静态资源压缩、访问控制虚拟主机一台服务器跑多个网站Nginx架构Nginx 是多进程模型master-worker 架构master 主进程 (root权限运行)读取、解析配置文件管理所有 worker 子进程接收系统信号启动、停止、reload、重新打开日志不处理业务请求只做管理。worker 工作进程 (业务处理)真正处理网络请求执行 TCP 连接、http 解析、转发、读写文件。每个 worker 是单线程异步非阻塞 IO 模型。建议配置worker_processes auto;自动等于 CPU 物理核心数。worker 之间互相独立不共享内存。cache loader /cache manager缓存进程可选cache manager管理磁盘缓存清理过期缓存文件cache loader启动时加载磁盘缓存元数据信号机制 热重载原理nginx -s reloadmaster 读取新配置校验语法启动一批新 worker 进程新 worker 加载新配置处理新请求向旧 worker 发送信号旧 worker 不再接收新连接处理完已有的连接后退出;✅ 整个过程服务不中断无宕机。常用命令Linuxnginx#启动nginx-sstop#快速停止nginx-squit#优雅停止处理完现有连接再退出nginx-sreload#重载配置最常用nginx-t#校验配置文件语法是否正确Nginx 部署节点规划节点名称节点IP作用nginx-server10.1.8.10/24搭建nginxnginx-client10.1.8.11/24客户端访问nginx-server:# 修改主机名称为 nginx-server[rootserver ~14:10:53]# hostnamectl set-hostname nginx-server# 新开bash会话即时刷新终端主机名显示[rootserver ~14:11:16]# bash# 使用nmcli静态配置ens33网卡静态IP、网关、DNS开机自动连接[rootnginx-server ~14:11:19]# nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.10/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes# 重载激活ens33网卡使静态网络配置生效[rootnginx-server ~14:12:35]# nmcli connection up ens33连接已成功激活D-Bus 活动路径/org/freedesktop/NetworkManager/ActiveConnection/4关键信息解读hostnamectl set-hostname永久修改主机名写入 /etc/hostname重启依然生效ipv4.method manual开启静态 IP 模式manual 静态autoDHCPautoconnect yes网卡开机自动激活nmcli connection up ens33在线重载网卡无需重启服务器nginx-client:# 修改主机名称为 nginx-client[rootserver ~14:12:54]# hostnamectl set-hostname nginx-client# 新建bash会话刷新终端主机名显示[rootserver ~14:13:23]# bash# nmcli配置ens33静态网络静态IP、网关、DNS设置开机自动联网[rootnginx-client ~14:13:25]# nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.11/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes# 激活ens33网卡使静态网络配置立即生效[rootnginx-client ~14:14:29]# nmcli connection up ens33连接已成功激活D-Bus 活动路径/org/freedesktop/NetworkManager/ActiveConnection/4安装步骤# 安装Nginx服务[rootnginx-server ~14:18:29]# yum install -y nginx# 启动Nginx并设置开机自启[rootnginx-server ~14:30:58]# systemctl enable nginx --nowCreated symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.# 备份默认首页文件[rootnginx-server ~14:31:36]# mv /usr/share/nginx/html/index.html{,.ori}# 写入自定义首页内容[rootnginx-server ~14:32:09]# echo hello world form nginx /usr/share/nginx/html/index.html# 防火墙永久放行http服务[rootnginx-server ~14:32:57]# firewall-cmd --add-servicehttp --permanentsuccess# 重载防火墙配置使规则生效[rootnginx-server ~14:33:28]# firewall-cmd --reloadsuccess测试# windows客户端修改 C:\Windows\System32\drivers\etc\hosts# 添加如下记录10.1.8.10 www.cyw.cloud# Linux或Unix修改 /etc/host[rootnginx-client ~14:16:46]# vim /etc/hosts#添加一行10.1.8.10 www.cyw.cloud[rootnginx-client ~14:49:06]# curl http://www.cyw.cloudhello world form nginxNginx 配置nginx的配置文件: /etc/nginx/nginx.conf配置结构Nginx 配置采用层级化、模块化的组织方式Nginx 配置由 全局块 → events 块 → http 块 → server 块 → location 块层级依次嵌套。1.全局配置块作用于 Nginx 整个进程的基础配置【全局块】全局生效不属于任何块# 全局配置示例user nginx;# 运行Nginx的用户/用户组worker_processes auto;# 工作进程数核心参数建议设为CPU核心数error_log /var/log/nginx/error.log;# 错误日志路径pid /run/nginx.pid;# 主进程PID文件路径include /usr/share/nginx/modules/*.conf;# 加载外部模块配置全局级引入参数详解user nginx;指定worker进程运行身份出于安全考虑不建议直接使用root。worker_processes auto;Nginx工作进程数量auto自动匹配CPU核心数也可手动填写数字。总并发上限和该参数强相关。error_log全局错误日志可指定日志级别debug|info|notice|warn|error|crit例如error_log /var/log/nginx/error.log warn;pid存储master主进程PID的文件用于nginx -s stop/reload等信号管理。include配置引入指令此处全局加载第三方动态模块配置。说明这一段属于Nginx配置文件最外层全局main块写在events块上方。2.核心模块 块Nginx 的核心功能模块 events 块用于处理网络连接相关配置。events{worker_connections1024;# 单个worker最大并发连接数use epoll;# IO多路复用模型linux默认epollmulti_accept on;# 允许一个进程一次性接受多个新连接}参数解读worker_connections 1024单个 worker 进程能够处理的最大并发连接数量Nginx 总最大连接数 worker 进程数 × worker_connections。use epoll指定 I/O 多路复用事件模型Linux 平台推荐 epollFreeBSD 使用 kqueueWindows 为 select。高并发场景核心优化项。multi_accept on开启后 worker 进程一次可以接受多个新建连接关闭时每次只处理 1 个新连接高并发下建议开启。补充提示use epoll;在新版 Nginx 中会自动识别系统可不手动配置。3. 业务模块 块处理具体业务的核心配置块最核心的是 http 块HTTP/HTTPS 服务可以包含多个 虚拟主机。# http块所有HTTP/HTTPS服务的公共配置可嵌套多个server块http{# HTTP全局通用参数include /etc/nginx/mime.types;# 加载MIME类型映射default_type application/octet-stream;# 默认响应类型log_format main$remote_addr - $remote_user [$time_local] $request;# 日志格式access_log /var/log/nginx/access.log main;# 访问日志sendfile on;# 高效发送文件静态文件性能优化keepalive_timeout65;# http长连接超时# server块虚拟主机配置一个http块可包含多个server一个server对应一个网站server{listen80;# 监听端口80HTTP443HTTPSserver_name localhost;# 域名/IP可配置多个用空格分隔root /usr/share/nginx/html;# 网站根目录# location块匹配uri路径处理请求一个server块可包含多个locationlocation /{index index.html index.htm;# 默认首页try_files$uri$uri/ /index.html;# 路径匹配规则}# 错误页面配置error_page404/404.html;error_page500502503504/50x.html;}# 第二个虚拟主机示例server{listen8080;server_name test.example.com;# ... 其他配置}}虚拟主机同一个 web 服务器提供多个站点。虚拟主机支持多种方式主机名端口号IP地址基本不用根据名称服务端配置# 参考主配置文件/etc/nginx/nginx.conf中server块配置[rootnginx-server ~14:47:13]# cp /etc/nginx/nginx.conf /etc/nginx/conf.d/vhost-name.conf[rootnginx-server ~15:35:03]# vim /etc/nginx/conf.d/vhost-name.confserver{server_name web1.cyw.cloud;root /usr/share/nginx/web1;}server{server_name web2.cyw.cloud;root /usr/share/nginx/web2;}[rootnginx-server ~15:39:47]# mkdir /usr/share/nginx/web{1,2}[rootnginx-server ~15:40:24]# echo web1.cyw.cloud /usr/share/nginx/web1/index.html[rootnginx-server ~15:41:04]# echo web2.cyw.cloud /usr/share/nginx/web2/index.html[rootnginx-server ~15:41:18]# systemctl restart nginx客户端测试# 配置名称解析假设web服务器ip地址为10.1.8.10[rootnginx-client ~14:49:34]# vim /etc/hosts#添加两行10.1.8.10 web1.cyw.cloud10.1.8.10 web2.cyw.cloud[rootnginx-client ~15:43:53]# curl http://web1.cyw.cloudweb1.cyw.cloud[rootnginx-client ~15:44:25]# curl http://web2.cyw.cloudweb2.cyw.cloud提示清理环境避免影响后续实验。[rootnginx-server ~15:41:52]# mkdir /etc/nginx/conf.d/vhosts[rootnginx-server ~16:19:46]# mv /etc/nginx/conf.d/vhost-name.conf /etc/nginx/conf.d/vhosts根据 port[rootnginx-server ~16:22:53]# cp /etc/nginx/conf.d/vhosts/vhost-name.conf /etc/nginx/conf.d/vhost-name.conf[rootnginx-server ~16:23:39]# vim /etc/nginx/conf.d/vhost-name.confserver{listen8081;server_name www.cyw.cloud;root /usr/share/nginx/8081;}server{listen8082;server_name www.cyw.cloud;root /usr/share/nginx/8082;}[rootnginx-server ~16:26:09]# mkdir /usr/share/nginx/808{1,2}[rootnginx-server ~16:26:40]# echo 8081 /usr/share/nginx/8081/index.html[rootnginx-server ~16:27:07]# echo 8082 /usr/share/nginx/8082/index.html[rootnginx-server ~16:29:41]# setenforce 0[rootnginx-server ~16:29:48]# systemctl restart nginx[rootnginx-server ~16:34:05]# systemctl stop firewalld.service客户端测试# 配置名称解析假设web服务器ip地址为10.1.8.10[rootnginx-client ~16:30:41]# vim /etc/hosts10.1.8.10 www.cyw.cloud[rootnginx-client ~16:32:45]# curl http://www.cyw.cloud:80818081[rootnginx-client ~16:34:51]# curl http://www.cyw.cloud:80828082提示清理环境避免影响后续实验。[rootnginx-client ~16:35:24]# mv /etc/nginx/conf.d/vhost-port.conf /etc/nginx/conf.d/vhosts
返回列表