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

Nginx 核心功能与 LNMP 架构部署

一、基于授权的访问控制

1.1 功能概述

Nginx 的基于授权的访问控制通过用户名和密码验证机制,限制用户对特定资源的访问。其实现逻辑与 Apache 类似,但配置更简洁,适用于需保护敏感目录或页面的场景(如管理后台)。

1.2 实现步骤

 1.生成用户认证文件

  • 生成用户认证文件
    • 安装 httpd-tools 工具包:

yum -y install httpd-tools

  • 使用 htpasswd 创建密码文件:

htpasswd -c /usr/local/nginx/passwd.db test

  • -c:创建新文件(若文件已存在需省略此参数)。
  • 文件路径为 /usr/local/nginx/passwd.db,用户名为 test,需输入两次密码。

2.设置文件权限与所有权

  • 确保 Nginx 进程用户(如 nginx)有读取权限:

chmod 400 /usr/local/nginx/passwd.db
chown nginx /usr/local/nginx/passwd.db

3.修改 Nginx 配置文件

在 server 块的 location 中添加认证配置:

location / {
    auth_basic "secret";                # 认证提示信息
    auth_basic_user_file /usr/local/nginx/passwd.db;  # 密码文件路径
}

4.重启服务与测试

nginx -t           # 检查语法
systemctl restart nginx

  • 访问时浏览器会弹出认证窗口,输入用户名密码后可访问资源。


二、基于客户端的访问控制

2.1 功能概述

通过客户端 IP 地址限制访问,适用于黑白名单机制(如禁止恶意 IP、允许内网访问)。

2.2 配置规则

  • 指令

    • deny IP/IP段:拒绝指定 IP 或网段。

    • allow IP/IP段:允许指定 IP 或网段。

  • 规则优先级:从上到下匹配,首次匹配后停止后续规则

2.3 配置示例

location / {
    deny 192.168.10.3;    # 拒绝单个 IP
    allow 192.168.10.0/24; # 允许整个子网
    deny all;              # 拒绝其他所有 IP
}

注意:若规则顺序为 allow all; deny 192.168.10.3;,则 deny 失效,因 allow all 已匹配所有请求。


三、Nginx 虚拟主机

3.1 基于域名的虚拟主机

实现步骤

1.DNS 解析

修改客户端 hosts 文件或 DNS 服务器,将多个域名指向同一 IP(如 192.168.10.101 www.benet.com www.accp.com)。

2.准备网站目录与测试页

mkdir -p /var/www/html/{benet,accp}
echo "www.benet.com" > /var/www/html/benet/index.html
echo "www.accp.com" > /var/www/html/accp/index.html

  3.配置 Nginx

在 nginx.conf 中定义多个 server 块:

server {
    listen 80;
    server_name www.benet.com;
    root /var/www/html/benet;
    index index.html;
}
server {
    listen 80;
    server_name www.accp.com;
    root /var/www/html/accp;
    index index.html;
}

3.2 基于 IP 的虚拟主机

实现步骤

1.为服务器绑定多个 IP

        复制网卡配置文件并修改 IP:

cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0    # 修改 IPADDR 为 192.168.10.151
nmcli c reload       # 重载网络配置

 2.配置Nginx

server {
    listen 192.168.10.151:80;
    server_name www.benet.com;
    root /var/www/html/benet;
}
server {
    listen 192.168.10.152:80;
    server_name www.accp.com;
    root /var/www/html/accp;
}

3.3 基于端口的虚拟主机

实现步骤

1.修改监听端口

server {
    listen 8080;
    server_name www.benet.com;
    root /var/www/html/benet;
}
server {
    listen 8888;
    server_name www.accp.com;
    root /var/www/html/accp;
}

2.访问测试

通过 http://IP:端口 访问不同站点(如 http://192.168.10.101:8080)。


四、LNMP 架构部署

4.1 编译安装 MySQL

        1.安装依赖与编译

yum -y install ncurses-devel gcc-c++ cmake
tar -zxvf mysql-5.6.36.tar.gz
cd mysql-5.6.36
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8
make && make install

2.初始化与启动

groupadd mysql
useradd -M -s /sbin/nologin mysql -g mysql
chown -R mysql:mysql /usr/local/mysql
/usr/local/mysql/scripts/mysql_install_db --user=mysql
systemctl start mysqld
mysqladmin -u root password '123.com'

4.2 安装 PHP 解析环境

        1.编译 PHP

./configure --prefix=/usr/local/php5 --with-mysql=mysqlnd --enable-fpm
make && make install

        2.配置 PHP-FPM

cp php.ini-development /usr/local/php5/php.ini
cp php-fpm.conf.default php-fpm.conf
systemctl start php-fpm

4.3 配置 Nginx 支持 PHP

        1.修改 Nginx 配置

location ~ \.php$ {
    root /var/www/html;
    fastcgi_pass 127.0.0.1:9000;  # 转发至 PHP-FPM
    fastcgi_index index.php;
    include fastcgi.conf;
}

        2.测试PHP解析

                创建 test.php

<?php phpinfo(); ?>

访问 http://服务器IP/test.php,显示 PHP 信息页面即表示配置成功。


五、LNMP 应用案例:部署 Discuz! 论坛

5.1 部署代码与数据库

        1.解压代码并配置权限

unzip Discuz_X3.3_SC_UTF8.zip
mv upload/* /var/www/html/bbs
chown -R php:php /var/www/html/bbs

        2.创建数据库与用户

CREATE DATABASE bbs;
GRANT ALL ON bbs.* TO 'runbbs'@'localhost' IDENTIFIED BY 'bbs123';

5.2 安装向导

  1. 访问安装页面
    http://服务器IP/bbs/install/index.php

  2. 填写数据库信息

    • 数据库服务器:127.0.0.1
    • 数据库名:bbs

    • 用户名:runbbs

    • 密码:bbs123

  3. 完成安装
    按提示设置管理员账号,最终生成论坛首页。

http://www.xdnf.cn/news/2814.html

相关文章:

  • C#解析USB - HID手柄上摇杆按键数据
  • Ubuntu 20.04 安装 ROS 2 Foxy Fitzroy
  • xilinx的XCI文件设定输出目录
  • MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - sleep 是怎样练成的?
  • [AI]browser-use + web-ui 大模型实现自动操作浏览器
  • 元宇宙2.0:当区块链成为数字世界的宪法
  • 【C++初阶】--- 模板进阶
  • (三十二)Android开发中AppCompatActivity和Activity之间的详细区别
  • 01_微服务常见问题
  • 如何利用Rust提升Linux服务器效率(详细操作指南)
  • dma_request_slave_channel_compat 与 dma_request_channel 的区别
  • 【C语言操作符详解(二)】--结构成员访问操作符,操作符的属性,表达式求值
  • springboot中有关数据库信息转换的处理
  • __VUE_PROD_HYDRAION_MISMATCH_DETAILS__在vue.config.js怎么配置
  • 外部存储器接口:EMIF总线
  • Jetson Xavier NX EMMC版本刷机
  • 机器人--相机
  • 【MCP Node.js SDK 全栈进阶指南】高级篇(4):自定义传输层开发
  • 前端在平常的开发中高度还原ui图的思考规范
  • 阿里开源Qwen3:大语言模型的新突破
  • AI驱动软件工程:SoftEngine 方法论与 Lynx 平台实践分析
  • 「Mac畅玩AIGC与多模态08」开发篇04 - 基于 OpenAPI Schema 开发专用 Agent 插件
  • MySQL 8.4.4 安全升级指南:从漏洞修复到版本升级全流程解析
  • Spring MVC中自定义日期类型格式转换器
  • 单片机-89C51部分:8、定时器
  • 6.3 数据分析与决策支持:数据洞察生成与决策辅助系统
  • 机器学习实操 第一部分 机器学习基础 第6章 决策树
  • jmeter-Beashell获取http请求体json
  • 在K8S迁移节点kubelet数据存储目录
  • 道德经解读分析