当前位置: 首页 > news >正文

Nginx 核心功能与 LNMP 环境搭建深度笔记

Nginx 核心功能与 LNMP 环境搭建深度笔记

一、基于授权的访问控制(用户认证)

1.1 功能简介

通过用户名和密码验证客户端访问权限,适用于企业内部系统、敏感资源目录等需要身份验证的场景。Nginx 通过auth_basic模块实现,流程如下:

  1. 生成加密的用户密码文件
  2. 配置 Nginx 验证规则
  3. 客户端输入凭证后访问

1.2 核心配置步骤

(1)生成用户认证文件
  • 工具htpasswd(需安装httpd-tools包)

  • 命令解析

    [root@localhost ~]# dnf -y install httpd-tools
    
    [root@localhost ~]# htpasswd -c /usr/local/nginx/passwd.db test
    New password: 
    Re-type new password: 
    Adding password for user test
    
    • -c:创建新文件(首次使用需加此参数)
    • /usr/local/nginx/passwd.db:密码文件路径
    • test:用户名
    • 执行后需输入两次密码,密码以 BCrypt 哈希存储在文件中
(2)权限设置
chmod 400 /usr/local/nginx/passwd.db  # 仅所有者可读
chown nginx /usr/local/nginx/passwd.db  # 属主改为Nginx运行用户
  • 原因:避免其他用户读取密码文件,确保安全
(3)Nginx 配置
server {listen 80;server_name localhost;location / {root html;index index.html;auth_basic "secret";          # 认证领域名称(浏览器弹窗显示)auth_basic_user_file /usr/local/nginx/passwd.db;  # 密码文件路径}
}
  • auth_basic:开启基本认证
  • auth_basic_user_file:指定密码文件位置
(4)验证测试
  • 访问http://服务器IP,浏览器弹出登录框
  • 输入正确用户名密码后访问成功,错误则返回 401 状态码

1.3 应用场景

  • 企业 OA 系统、后台管理页面
  • 付费资源下载平台
  • 需权限控制的 API 接口

1.4 优缺点

优点缺点
简单易用,无需额外插件用户需记忆凭证,体验稍差
加密存储密码不适合高并发匿名访问场景

二、基于客户端的访问控制(IP 过滤)

2.1 功能简介

通过 IP 地址或网段控制访问权限,规则自上而下匹配,支持deny(拒绝)和allow(允许)指令。常用于:

  • 限制特定地区 IP 访问
  • 屏蔽恶意 IP 攻击
  • 允许内网 IP 访问特定服务

2.2 核心配置示例

nginx

location / {root html;index index.html;deny 192.168.10.3;       # 拒绝单个IPdeny 192.168.10.0/24;    # 拒绝IP段(C类子网)allow 192.168.20.0/24;   # 允许特定子网allow all;               # 允许所有(需放在最后)
}
  • 规则顺序:先写deny再写allow,匹配即停止
  • 最佳实践:先拒绝危险 IP,再允许信任 IP,最后用allow all兜底

2.3 应用场景

  • 防止 CC 攻击(屏蔽频繁请求的 IP)
  • 限制仅公司内网访问管理后台
  • 配合 CDN 节点 IP 白名单

2.4 优缺点

优点缺点
配置轻量,性能损耗低无法防御代理 IP 绕过
实时生效,无需重启服务大规模 IP 管理复杂

三、Nginx 虚拟主机配置

3.1 核心概念

虚拟主机允许单台服务器运行多个网站,通过server块隔离配置,支持三种类型:

  1. 基于域名:通过不同域名区分(最常用)
  2. 基于 IP:通过不同 IP 地址区分(需多 IP 支持)
  3. 基于端口:通过不同端口号区分(如 8080、8888)

3.2 基于域名的虚拟主机

(1)环境准备
  • 客户端配置

    :修改

    hosts
    

    文件(Windows 在

    C:\Windows\System32\drivers\etc\hosts
    

    ,Linux 在

    /etc/hosts
    
    192.168.10.101 www.dufu.com
    192.168.10.101 www.libai.com
    
  • 服务器端准备

    mkdir -p /var/www/html/dufu    # 创建站点目录
    echo "www.dufu.com" > /var/www/html/dufu/index.html  # 生成测试页
    
(2)Nginx 配置

nginx

server {listen 80;server_name www.dufu.com;     # 绑定域名access_log logs/www.dufu.com.access.log;  # 独立访问日志location / {root /var/www/html/dufu;   # 站点根目录index index.html;}
}server {listen 80;server_name www.libai.com;location / {root /var/www/html/libai;index index.html;}
}
(3)验证方法
[root@localhost ~]# curl www.dufu.com
dufu
[root@localhost ~]# curl www.libai.com
libai
  • 访问http://www.dufu.comhttp://www.libai.com,显示不同内容

3.3 基于 IP 的虚拟主机

(1)服务器多 IP 配置(示例:添加虚拟 IP)
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens160 ifcfg-ens160:0
cp ifcfg-ens160 ifcfg-ens160:1# 复制网卡配置文件
vim ifcfg-ens160:0             # 修改IP为192.168.10.100
vim ifcfg-ens160:1             # 修改IP为192.168.10.200
nmcli c reload && nmcli c up ens160  # 重启网络服务 这里的:0指的是子接口或者虚拟ip 这些是基于物理网卡而生产的reload要对真实存在的网卡才能生效
ip addr show                    # 验证IP是否生效
(2)Nginx 配置

nginx

server {listen 192.168.10.100:80;     # 监听第一个IPserver_name www.dufu.com;root /var/www/html/dufu;
}server {listen 192.168.10.200:80;     # 监听第二个IPserver_name www.libai.com;root /var/www/html/libai;
}
[root@localhost ~]# curl 192.168.10.200
libai
[root@localhost ~]# curl 192.168.10.100
dufu

3.4 基于端口的虚拟主机

(1)Nginx 配置

nginx

server {listen 192.168.10.101:80;   # 监听8080端口server_name www.dufu.com;root /var/www/html/dufu;
}server {listen 192.168.10.101:8080;   # 监听8888端口server_name www.libai.com;root /var/www/html/libai;
}
(2)访问方式
[root@localhost ~]# curl 192.168.10.101:80
dufu
[root@localhost ~]# curl 192.168.10.101:8080
libai
  • http://192.168.10.101:8080http://192.168.10.101:8080

四、LNMP 架构部署(Linux+Nginx+MySQL+PHP)

4.1 安装 mariadb-server

dnf -y install mariadb-server

4.2 编译安装 PHP 5.5(支持 MySQLnd)

(1)依赖安装
yum install -y gd libxml2-devel libjpeg-devel libpng-devel zlib-devel
  • gd:图形处理库(生成验证码、图片缩略图等)
  • libxml2:XML 解析库(处理 API 数据)
(2)配置参数(MySQLnd 驱动)
tar -zxvf php-5.5.38.tar.gz
cd php-5.5.38
./configure \
--prefix=/usr/local/php5 \         # 安装路径
--with-gd \                        # 启用GD库
--with-zlib \                      # 启用压缩库
--with-mysql=mysqlnd \             # 使用MySQLnd原生驱动
--with-mysqli=mysqlnd \            # 启用MySQLi扩展
--enable-mbstring \                 # 支持多字节字符(中文等)
--enable-fpm \                      # 启用FastCGI进程管理器
--with-jpeg-dir=/usr/lib            # JPEG库路径
(3)PHP-FPM 配置优化
cp php-fpm.conf.default php-fpm.conf  # 复制默认配置
vim php-fpm.conf

关键参数:

ini

user = php              # 运行用户
group = php             # 运行用户组
pm.max_children = 50    # 最大子进程数(根据服务器性能调整)
pm.start_servers = 20   # 启动时初始进程数
pm.min_spare_servers = 5 # 最小空闲进程数
pm.max_spare_servers = 35 # 最大空闲进程数

4.3 Nginx 集成 PHP 解析

(1)Nginx 配置文件

nginx

server {listen 80;server_name www.bt.com;root /var/www/html;index index.php index.html;location ~ \.php$ {root           /var/www/html;       # PHP文件根目录fastcgi_pass   127.0.0.1:9000;      # PHP-FPM监听地址(端口或Unix Socket)fastcgi_index  index.php;           # 入口文件include        fastcgi.conf;        # 引入FastCGI参数配置fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;  # 传递文件路径}
}
(2)测试文件
  • test1.php
    

    (查看 PHP 信息):

    <?php phpinfo(); ?>
    
  • test2.php
    

    (数据库连接测试):

    php

    <?php 
    $link = mysqli_connect('127.0.0.1', 'root', 'pwd123'); 
    if ($link) {echo "<h1>数据库连接成功!</h1>"; mysqli_close($link);
    } else {echo "<h1>连接失败:" . mysqli_connect_error() . "</h1>";
    }
    ?>
    

4.4 部署 Discuz! 论坛(示例应用)

(1)准备工作
yum install -y unzip          # 安装解压缩工具
unzip Discuz_X3.3_SC_UTF8.zip # 解压程序包
mkdir -p /var/www/html/bbs    # 创建论坛目录
mv upload/* /var/www/html/bbs # 移动文件
chown -R php:php /var/www/html/bbs  # 权限归属PHP用户
(2)创建数据库

mysql

CREATE DATABASE bbs;                          # 创建数据库
GRANT ALL ON bbs.* TO 'runbbs'@'127.0.0.1' IDENTIFIED BY 'bbs123';  # 允许本地IP访问
GRANT ALL ON bbs.* TO 'runbbs'@'localhost' IDENTIFIED BY 'bbs123';  # 允许localhost访问
FLUSH PRIVILEGES;                             # 刷新权限
(3)安装向导

访问http://服务器IP/bbs/install/index.php,按步骤完成:

  1. 同意许可协议
  2. 检测环境(确保 PHP 扩展、目录权限符合要求)
  3. 配置数据库连接(填入创建的数据库信息)
  4. 完成安装

五、扩展知识:Nginx 与 Apache 对比

功能NginxApache
并发模型事件驱动(异步非阻塞)多进程 / 线程(阻塞式)
静态资源处理性能优异(直接磁盘读取)需模块支持(如 mod_static)
动态内容处理依赖 FastCGI(如 PHP-FPM)内置模块(如 mod_php)
虚拟主机配置每个站点独立server基于VirtualHost指令
内存占用低(单进程轻量设计)高(每个进程独立内存)

六、运维常用命令

操作场景Nginx 命令MySQL 命令PHP 命令
检查配置语法nginx -tmysql -u root -p -e "status"`php -igrep mysqlnd`
重启服务systemctl restart nginxsystemctl restart mysqldsystemctl restart php-fpm
查看进程状态`ps -efgrep nginx``ps -efgrep mysql``ps -efgrep php-fpm`
端口监听检测`netstat -anptgrep nginx``netstat -anptgrep 3306``netstat -anptgrep 9000`

七、故障排查指南

  1. 401 认证失败
    • 检查密码文件路径是否正确(auth_basic_user_file
    • 确认密码文件权限为 400 且属主为 Nginx
    • 清除浏览器缓存后重试
  2. PHP 页面无法解析
    • 检查 Nginx 配置中fastcgi_pass是否指向正确端口(9000)
    • 确认 PHP-FPM 服务已启动(systemctl status php-fpm
    • 查看 PHP 错误日志(/usr/local/php5/var/log/php-fpm.log
  3. 虚拟主机访问异常
    • 检查server_name是否与域名匹配
    • 确认站点目录权限为 Nginx 用户可读写
    • 清除本地 DNS 缓存(Windows:ipconfig /flushdns,Linux:systemd-resolve --flush-caches

相关文章:

  • 详细介绍Qwen3技术报告中提到的模型架构技术
  • 流式优先架构:彻底改变实时数据处理
  • 论文篇-1.3.如何整理一篇论文
  • 微 PE , USM 魔术师两款 PE 对比
  • C语言判断素数(附带源码和解析)
  • CNN手写数字识别/全套源码+注释可直接运行
  • day 32
  • 【笔记】排查并解决Error in LLM call after 3 attempts: (status code: 502)
  • el-radio-group 与 el-dropdown 一起使用时的注意事项
  • VPX3U规格主板的架构实现与性能评估:飞腾D3000+景嘉微JH930平台
  • 网络:如何通过已知的电脑的机器名(计算机名),获取ip地址
  • Serverless爬虫架构揭秘:动态IP、冷启动与成本优化
  • PHP:经典编程语言在当代Web开发中的新活力
  • 从零基础到最佳实践:Vue.js 系列(5/10):《状态管理》
  • Java面试实录:从JVM调优到Spring Cloud实践
  • 操作系统期末复习(一)
  • 在线视频下载利器,支持100多平台下载
  • Python 字典的用法和技巧
  • 古诗生成器
  • FastAPI 支持文件下载和上传
  • 怎么做卡商网站/软文广告
  • 如何自己做一个网站/免费推广引流平台有哪些
  • 易申建设网站/网站关键字优化技巧
  • 北京建设网站方舟爸爸/百度下载官方下载安装
  • 网站的申请/百度关键词seo优化
  • 网站论坛制作/直接进网站的浏览器