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;       # 拒绝单个IP
    deny 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;     # 监听第一个IP
    server_name www.dufu.com;
    root /var/www/html/dufu;
}

server {
    listen 192.168.10.200:80;     # 监听第二个IP
    server_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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值