一、Nginx 基础介绍1. 核心定位高性能事件驱动 Web 服务可做静态资源服务器、反向代理、负载均衡、HTTPS 加密、限流、防盗链、gzip 压缩、虚拟主机、PHP 动态解析。2. 核心优势异步非阻塞 IOepoll单进程支撑万级并发Apache 一连接一进程资源消耗极高轻量低占用CPU/内存消耗小部署简单多角色复用一台服务同时实现静态、代理、SSL、负载均衡热重载nginx -s reload不中断业务更新配置3. Master-Worker 多进程架构masterroot只管理不处理请求解析配置、管理 worker 进程、接收启停/重载信号worker业务进程实际处理 HTTP 请求单线程异步 IO推荐worker_processes auto;匹配 CPU 核心数可选缓存进程cache manager清理过期缓存、cache loader启动加载缓存4. 常用管理命令nginx# 启动nginx-sstop# 强制快速停止nginx-squit# 优雅停止处理完现有连接再退出nginx-sreload# 热重载配置最常用nginx-t# 校验配置语法修改配置必执行systemctl start/stop/restart nginx systemctlenablenginx--now# 开机自启立即启动二、实验环境节点规划标准实训双节点主机名IP作用nginx-server10.1.8.10Nginx服务端部署网站、证书、PHPnginx-client10.1.8.11客户端curl 测试、域名解析多节点负载均衡架构主机IP角色proxy.laogao.cloud10.1.8.20反向代理/负载均衡服务端nginx1/2/310.1.8.21/22/23后端真实Web节点client10.1.8.11测试客户端三、Nginx 配置层级结构从外到内配置文件主路径/etc/nginx/nginx.conf1. 层级优先级外层→内层子覆盖父全局块 → events 块 → http 块 → server 虚拟主机块 → location 路径匹配块2. 各块作用详解全局块所有进程全局生效user nginx;# Nginx运行用户worker_processes auto;# 工作进程数error_log /var/log/nginx/error.log;pid /run/nginx.pid;include /usr/share/nginx/modules/*.conf;events 块网络并发配置events{worker_connections1024;# 单进程最大并发连接use epoll;# Linux IO模型}http 块所有网站共用配置可包含多个 server加载 mime 类型、日志格式、sendfile 静态优化、长连接超时include /etc/nginx/conf.d/*.conf;模块化加载虚拟主机实训重点server 块单站点虚拟主机绑定端口域名location 块同一站点内不同URL路径匹配规则四、虚拟主机一台服务器多个网站三种实现方式基于域名实训主流server{listen80;server_name web1.laogao.cloud;root /usr/share/nginx/web1;}server{listen80;server_name web2.laogao.cloud;root /usr/share/nginx/web2;}基于端口server{listen8081;server_name www.laogao.cloud;root /usr/share/nginx/8081;}server{listen8082;server_name www.laogao.cloud;root /usr/share/nginx/8082;}基于IP极少使用环境清理规范老师要求# 统一迁移旧虚拟主机配置mkdir-p/etc/nginx/conf.d/vhostsmv/etc/nginx/conf.d/*.conf /etc/nginx/conf.d/vhosts# 删除网站测试目录rm-rf/usr/share/nginx/8081 web1 web2五、HTTPS 证书配置SSL/TLS1. 自建证书三步流程openssl# 1.生成私钥 www.key保密openssl genrsa-outwww.key2048# 2.生成证书请求文件 www.csr中间文件# -subj 后必须带空格CN访问域名必须和server_name完全一致openssl req-new-keywww.key-outwww.csr-subj/CCN/STJS/LNJ/OLG/OUDEVOPS/CNwww.deng.cloud/emailAddresswebadmindeng.cloud# 3.私钥自签名生成证书 www.crt公钥openssl x509-req-days3650-inwww.csr-signkeywww.key-outwww.crt2. 证书统一存放mkdir/etc/ssl/certs/www.deng.cloudmvwww.key www.csr www.crt /etc/ssl/certs/www.deng.cloud/3. HTTPS 虚拟主机完整配置# 443 HTTPS站点server{listen443ssl http2;listen[::]:443 ssl http2;server_name www.deng.cloud;root /usr/share/nginx/html;# 证书路径ssl_certificate/etc/ssl/certs/www.deng.cloud/www.crt;ssl_certificate_key/etc/ssl/certs/www.deng.cloud/www.key;}# 80端口强制301跳转HTTPSserver{listen80;listen[::]:80;server_name www.deng.cloud;return301https://$host$request_uri;}4. 防火墙放行HTTPSfirewall-cmd --add-servicehttps--permanentfirewall-cmd--reload六、客户端域名解析报错解决curl:6 Could not resolve host故障原因Linux 客户端无 DNS 记录无法解析自定义域名www.deng.cloud修复方案客户端执行vim/etc/hosts# 写入服务端IP域名10.1.8.10 www.deng.cloud验证ping www.deng.cloud能通再 curl 测试七、Basic 网页账号密码认证1. 安装工具生成密码文件yuminstall-yhttpd-tools# -c 创建文件用户名laogao 密码123456htpasswd-b-c/etc/nginx/.htpasswd laogao1234562. Nginx 配置放入HTTPS server块location /auth-basic/{auth_basicBasic Auth;auth_basic_user_file/etc/nginx/.htpasswd;}3. 测试访问# -u 指定账号密码-k 忽略自建证书不安全警告curl-kulaogao:123456 https://www.deng.cloud/auth-basic/八、PHP 动态网页解析nginxphp-fpm1. 安装启动PHP服务yuminstall-yphp php-fpm php-gd php-mbstring systemctlenablephp-fpm--now# 默认监听 127.0.0.1:90002. 生成PHP测试页echo?php phpinfo(); ?/usr/share/nginx/html/info.php3. Nginx 解析PHP配置易错点变量拼写location ~\.php${try_files$uri404;# 防路径穿透攻击fastcgi_pass127.0.0.1:9000;fastcgi_index index.php;# 易错fastcgi_script_name 不要写成 scripy_namefastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;include fastcgi_params;}4. 客户端测试curl-khttps://www.deng.cloud/info.php九、location 匹配规则优先级从高到低location /uri精确匹配最高location ^~ /uri前缀匹配跳过正则location ~ 正则区分大小写正则location ~* 正则不区分大小写正则location /uri普通前缀匹配location /全局兜底最低proxy_pass 路径关键细节末尾带/剔除location匹配前缀转发/api/proxy_pass http://xxx/→ 请求/api/user转发为/user末尾不带/完整保留路径转发/api/proxy_pass http://xxx→ 请求/api/user转发为/api/user十、反向代理 负载均衡 upstream1. 正向代理 vs 反向代理正向代理代理客户端翻墙服务器不知道真实用户反向代理代理后端服务实训Nginx用户不知道真实后端服务器2. 基础反向代理配置location /{proxy_pass http://backends;# 必传客户端真实信息proxy_set_header Host$http_host;proxy_set_header X-Real-IP$remote_addr;proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;}3. upstream 负载均衡集群# 定义后端服务器组upstream backends{# 1.默认轮询平均分发server nginx1.laogao.cloud:80;server nginx2.laogao.cloud:80weight2;# 权重流量翻倍server nginx3.laogao.cloud:80 backup;# 备用机其他全挂才启用# server nginx4 down; 标记下线# 2.ip_hash 会话保持同一IP固定后端# ip_hash;# 3.least_conn 最少连接优先# least_conn;}server{listen80;server_name www.laogao.cloud;location /{proxy_pass http://backends;}}负载均衡算法对比算法作用使用场景轮询(默认)请求依次分配后端性能一致无会话需求weight权重性能好的服务器多分流量新旧服务器混合集群ip_hash同一客户端IP固定后端需要保存session会话least_conn分给当前连接最少的后端后端业务耗时差异大十一、Nginx 常见报错与排错nginx -t 语法报错拼写错误fastcgi_scripy_name、引号缺失、分号漏写、配置嵌套错误解决开启vim行号:set nu定位报错行修改curl:6 Could not resolve host客户端hosts无域名解析修改/etc/hosts添加IP域名映射nginx: [emerg] cannot load certificate证书路径写错、证书文件未移动到/etc/ssl/certs/、权限不足403 Forbidden 无权限访问网站目录权限不足、SELinux拦截、缺少index首页文件临时关闭selinuxsetenforce 0仅服务端执行502 Bad Gatewayphp-fpm未启动、fastcgi_pass端口写错、后端服务宕机十二、Nginx 核心内置常用变量变量含义$uri请求URL不含get参数$argsURL问号后的查询参数$remote_addr客户端真实IP$host访问域名$scheme请求协议 http/https$request_uri完整URL含参数十三、Nginx 其他实用功能gzip 压缩减小网页传输体积gzipon;gzip_types text/css text/html application/json application/javascript;IP访问控制location /admin{allow10.1.8.0/24;deny all;}日志文件access.log所有用户访问记录IP、时间、状态码、UAerror.log服务报错、502/403等故障日志排错核心文件