LNMP 架构部署

目录

一、基于授权的访问控制

(一)功能简介

(二)配置步骤

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

(一)功能简介

(二)配置步骤

三、Nginx 虚拟主机

(一)基于域名的虚拟主机

(二)基于 IP 的虚拟主机

(三)基于端口的虚拟主机

四、LNMP 架构部署

(一)编译安装 MySQL

(二)安装 PHP 解析环境

(三)配置 Nginx 支持 PHP

(四)部署 Web 应用(以 Discuz 为例)

总结


 

一、基于授权的访问控制

(一)功能简介

Nginx 支持通过用户名和密码对访问特定目录或网站的客户端进行认证,配置逻辑与 Apache 相似,核心步骤包括生成认证文件、修改配置和重启服务。

(二)配置步骤
  1. 生成用户密码认证文件
  • 首先安装 ​​httpd-tools​​​(包含 ​​htpasswd​​ 工具):
yum -y install httpd-tools
  • 创建认证文件并添加用户(​​-c​​​ 表示首次创建文件,路径为 ​​/usr/local/nginx/passwd.db​​​,用户名为 ​​test​​):
htpasswd -c /usr/local/nginx/passwd.db test
  1. 设置文件权限与所有者
  • 确保只有 Nginx 运行用户可读取文件(假设 Nginx 用户为 ​​nginx​​):
chmod 400 /usr/local/nginx/passwd.db  # 只读权限
chown nginx /usr/local/nginx/passwd.db  # 所有者设为 nginx
  1. 修改 Nginx 主配置文件
    编辑 ​​​nginx.conf​​​,在目标 ​​location​​ 块中添加认证配置:
server {listen 80;server_name localhost;location / {root html;index index.html index.htm;auth_basic "secret";  # 认证提示信息auth_basic_user_file /usr/local/nginx/passwd.db;  # 认证文件路径}
}
  1. 验证配置并重启服务
nginx -t  # 检测语法正确性
systemctl restart nginx  # 重启 Nginx 使配置生效
  1. 访问测试 浏览器输入服务器 IP(如 ​​http://192.168.10.101​​),会弹出登录框,输入正确用户名密码即可访问。

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

(一)功能简介

通过 ​​deny​​​ 和 ​​allow​​ 规则,根据客户端 IP 或 IP 段控制访问,规则按顺序执行,匹配即停止。

(二)配置步骤

在 ​​location​​​ 块中添加 IP 过滤规则(示例:拒绝 ​​192.168.10.3​​,允许其他所有 IP):

location / {root html;index index.html index.htm;deny 192.168.10.3;  # 拒绝单个 IPallow all;  # 允许所有 IP(需放在拒绝规则之后)
}

保存配置后,执行 ​​nginx -t​​​ 和 ​​systemctl restart nginx​​ 生效。

三、Nginx 虚拟主机

(一)基于域名的虚拟主机
  1. 客户端域名解析
    修改本地 ​​​hosts​​​ 文件(Windows 在 ​​C:\Windows\System32\drivers\etc\hosts​​​,Linux 在 ​​/etc/hosts​​),添加:
192.168.10.101 www.benet.com
192.168.10.101 www.accp.com
  1. 准备网站目录与测试页面
mkdir -p /var/www/html/benet /var/www/html/accp  # 创建站点目录
echo "www.aaaaaaaa.com" > /var/www/html/benet/index.html  # 生成测试首页
echo "www.bbbbbbbbb.com" > /var/www/html/accp/index.html
  1. 配置 Nginx 虚拟主机
    在 ​​​nginx.conf​​​ 中添加两个 ​​server​​ 块,分别绑定不同域名和根目录:
server {listen 80;server_name www.benet.com;access_log logs/www.benet.com.access.log;charset utf-8;location / {root /var/www/html/benet;index index.html;}
}server {listen 80;server_name www.accp.com;access_log logs/www.accp.com.access.log;charset utf-8;location / {root /var/www/html/accp;index index.html;}
}
  1. 测试访问 浏览器输入 ​​http://www.benet.com​​​ 和 ​​http://www.accp.com​​,应显示对应站点内容。

(二)基于 IP 的虚拟主机
  1. 添加虚拟 IP 地址
    通过复制网卡配置文件创建虚拟网卡(以 ​​​ens33​​ 为例):
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0  # 创建第一个虚拟 IP 配置
cp ifcfg-ens33 ifcfg-ens33:1  # 创建第二个虚拟 IP 配置

编辑 ​​ifcfg-ens33:0​​​ 和 ​​ifcfg-ens33:1​​​,分别设置 ​​IPADDR​​​ 为 ​​192.168.10.151​​​ 和 ​​192.168.10.152​​​,其他参数保持一致(如网关、DNS)。
重启网络服务使配置生效:

nmcli connection reload
nmcli connection up ens33
  1. 配置 Nginx 绑定 IP
    在 ​​​nginx.conf​​​ 中为每个 IP 绑定独立的 ​​server​​ 块:
server {listen 192.168.10.151:80;server_name www.benet.com;# 其他配置(如 root 目录)
}server {listen 192.168.10.152:80;server_name www.accp.com;# 其他配置
}
(三)基于端口的虚拟主机

在 ​​nginx.conf​​ 中为同一 IP 分配不同端口(如 8080 和 8888):

server {listen 192.168.10.101:8080;server_name www.benet.com;# 端口 8080 站点配置
}server {listen 192.168.10.101:8888;server_name www.accp.com;# 端口 8888 站点配置
}

访问时需在 URL 中添加端口(如 ​​http://192.168.10.101:8080​​)。

四、LNMP 架构部署

(一)编译安装 MySQL
  1. 准备依赖环境
yum install -y autoconf ncurses-devel gcc-c++ perl-Module-Install cmake
  1. 解压并编译 MySQL
tar -zxvf mysql-5.6.36.tar.gz
cd mysql-5.6.36
cmake \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DDEFAULT_CHARSET=utf8 \-DDEFAULT_COLLATION=utf8_general_ci \-DWITH_EXTRA_CHARSETS=all \-DSYSCONFDIR=/etc
make && make install
  1. 初始化与配置
cp support-files/my-default.cnf /etc/my.cnf  # 复制配置文件
cp support-files/mysql.server /etc/init.d/mysqld  # 添加服务脚本
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld && chkconfig mysqld on  # 加入系统服务
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile  # 添加环境变量
. /etc/profile  # 立即生效
  1. 创建用户与初始化数据库
groupadd mysql && useradd -M -s /sbin/nologin mysql -g mysql
chown -R mysql:mysql /usr/local/mysql
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
systemctl start mysqld  # 启动服务
mysqladmin -u root password '123.com'  # 设置 root 密码
(二)安装 PHP 解析环境
  1. 安装依赖库
yum -y install gd libxml2-devel libjpeg-devel libpng-devel zlib-devel
  1. 编译 PHP
tar -zxvf php-5.5.38.tar.gz
cd php-5.5.38
./configure \--prefix=/usr/local/php5 \--with-gd \--with-zlib \--with-mysql=/usr/local/mysql \--with-mysqli=/usr/local/mysql/bin/mysql_config \--with-config-file-path=/usr/local/php5 \--enable-mbstring \--enable-fpm \--with-jpeg-dir=/usr/lib
make && make install
(三)配置 Nginx 支持 PHP
  1. 启动 php-fpm 服务
cd /usr/local/php5/etc/
cp php-fpm.conf.default php-fpm.conf  # 复制配置模板
useradd -M -s /sbin/nologin php  # 创建 php 专用用户
vim php-fpm.conf  # 修改用户、进程数等配置(如 user=php, group=php)
/usr/local/sbin/php-fpm  # 启动服务
  1. Nginx 配置 PHP 解析
    在 ​​​server​​​ 块中添加 PHP 解析规则(匹配 ​​.php​​ 文件):
location ~ \.php$ {root /var/www/html;fastcgi_pass 127.0.0.1:9000;  # 指向 php-fpm 监听端口fastcgi_index index.php;include fastcgi.conf;
}
  1. 测试 PHP 页面
    创建测试文件 ​​​test1.php​​​(输出 PHP 信息)和 ​​test2.php​​​(测试数据库连接),访问 ​​http://服务器 IP/test1.php​​ 应显示 PHP 环境信息。
(四)部署 Web 应用(以 Discuz 为例)
  1. 准备程序文件
yum -y install 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 用户权限
  1. 创建数据库
mysql -uroot -p  # 登录 MySQL
create database bbs;  # 创建数据库
grant all on bbs.* to runbbs@'127.0.0.1' identified by 'bbs123';  # 授权本地访问
grant all on bbs.* to runbbs@'localhost' identified by 'bbs123';
  1. 初始化安装 浏览器访问 ​​http://服务器 IP/bbs/install/index.php​​,按向导完成安装,配置数据库信息即可。

总结

本文详细介绍了 Nginx 的两种访问控制机制(用户认证与 IP 过滤)、三种虚拟主机配置(域名、IP、端口)以及 LNMP 架构的完整部署流程。通过这些配置,可实现服务器资源的安全控制、多站点高效管理及动态 Web 应用的稳定运行。实际应用中,需根据业务需求调整参数(如并发连接数、缓存策略),并定期更新组件以保障安全性和性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM与JMM深度解析:从Java 8到Java 21的演进

文章目录 第一部分:JVM基础概念与架构JVM是什么?JVM整体架构运行时数据区类加载机制执行引擎 第二部分:Java内存模型(JMM)什么是Java内存模型JMM的核心问题主内存与工作内存内存间交互操作重排序与happens-before原则v…

Docker 挂载卷并保存为容器

1 创建docker容器 使用镜像osrf/ros:humble-desktop-full-jammy创建并运行容器 sudo docker run -it --name ros2_humble osrf/ros:humble-desktop-full-jammy /ros_entrypoint.sh bash docker run -it -v d:\docker\ros2_humble:/root/ros2_ws osrf/ros:humble-desktop-fu…

无人机飞手共享接单平台

2025年,无人机已不再是“黑科技”的代名词。从农田喷洒到外卖配送,从航拍摄影到医疗急救,无人机正以惊人的速度渗透我们的生活。而在这场变革中, “无人机飞手共享接单平台” 成为连接技术与需求的核心枢纽。它不仅让专业飞手轻松…

【Web应用】若依框架:基础篇07功能详解-定时任务

文章目录 ⭐前言⭐一、讲解过程⭐二、动手实操⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里云社区专家博主、软件设计工程师博客内容开源、框架、软件工程、全栈(,NET/Java/Python/C)、数据库、操作系统、大数据、人工智能、工控、网络、程序…

8.8 Primary ODSA service without ODSA Portal

主要ODSA服务(不使用ODSA门户) 以下场景描述如下情况: • 主ODSA客户端应用程序被允许用于该类型的主设备,且对终端用户启用(已授权)。 • 服务提供商(SP)能够在不涉及ODSA门户Web服…

深度检测与动态透明度控制 - 基于Babylon.js的遮挡检测实现解析

首先贴出实现代码: OcclusionFader.ts import { AbstractEngine, Material, type Behavior, type Mesh, type PBRMetallicRoughnessMaterial, type Scene } from "babylonjs/core"; import { OcclusionTester } from "../../OcclusionTester"…

openssl 使用生成key pem

好的,以下是完整的步骤,帮助你在 Windows 系统中使用 OpenSSL 生成私钥(key)和 PEM 文件。假设你的 openssl.cnf 配置文件位于桌面。 步骤 1:打开命令提示符 按 Win R 键,打开“运行”对话框。输入 cmd&…

音视频之视频压缩及数字视频基础概念

系列文章: 1、音视频之视频压缩技术及数字视频综述 一、视频压缩编码技术综述: 1、信息化与视频通信: 什么是信息: 众所周知,人类社会的三大支柱是物质、能量和信息。具体而言,农业现代化的支柱是物质&…

传统数据表设计与Prompt驱动设计的范式对比:以NBA投篮数据表为例

引言:数据表设计方法的演进 在数据库设计领域,传统的数据表设计方法与新兴的Prompt驱动设计方法代表了两种截然不同的思维方式。本文将以NBA赛季投篮数据表(shots)的设计为例,深入探讨这两种方法的差异、优劣及适用场景。随着AI技术在数据领…

XCTF-web-mfw

发现了git 使用GitHack下载一下源文件&#xff0c;找到了php源代码 <?phpif (isset($_GET[page])) {$page $_GET[page]; } else {$page "home"; }$file "templates/" . $page . ".php";// I heard .. is dangerous! assert("strpos…

Prompt Tuning与自然语言微调对比解析

Prompt Tuning 与输入提示词自然语言微调的区别和联系 一、核心定义与区别 维度Prompt Tuning(提示微调)输入提示词自然语言微调本质优化连续向量空间中的提示嵌入(不可直接阅读)优化离散自然语言文本(人类可理解)操作对象模型输入嵌入层的连续向量(如WordEmbedding)自…

LVS的DR模式部署

目录 一、引言&#xff1a;高并发场景下的流量调度方案 二、LVS-DR 集群核心原理与架构设计 &#xff08;一&#xff09;工作原理与数据流向 数据包流向步骤3&#xff1a; &#xff08;二&#xff09;模式特性与53网络要求 三、实战配置&#xff1a;从9环境搭建到参数调整…

8种常见数据结构及其特点简介

一、8种常见数据结构 1. 数组&#xff08;Array&#xff09; 简介&#xff1a;数组是有序元素的序列&#xff0c;连续内存块存储相同类型元素&#xff0c;通过下标直接访问。数组会为存储的元素都分配一个下标&#xff08;索引&#xff09;&#xff0c;此下标是一个自增连续的…

通过mailto:实现web/html邮件模板唤起新建邮件并填写内容

一、背景 在实现网站、html邮件模板过程中&#xff0c;难免会遇到需要通过邮箱向服务提供方发起技术支持等需求&#xff0c;因此&#xff0c;我们需要通过一个功能&#xff0c;能新建邮件并提供模板&#xff0c;提高沟通效率 二、mailto协议配置说明 参数描述mailto:nameema…

好用但不常用的Git配置

参考文章 文章目录 tag标签分支新仓库默认分支推送 代码合并冲突处理默认diff算法 tag标签 默认是以字母顺序排序&#xff0c;这会导致一些问题&#xff0c;比如0.5.101排在0.5.1000之后。为了解决这个问题&#xff0c;我们可以把默认排序改为数值排序 git config --global t…

第六十八篇 从“超市收银系统崩溃”看JVM性能监控与故障定位实战

目录 引言&#xff1a;当技术问题遇上生活场景一、JVM的“超市货架管理哲学”二、收银员工具箱&#xff1a;JVM监控三板斧三、典型故障诊断实录四、防患于未然的运维智慧五、结语&#xff1a;从故障救火到体系化防控 引言&#xff1a;当技术问题遇上生活场景 想象一个周末的傍…

tauri2项目打开某个文件夹,类似于mac系统中的 open ./

在 Tauri 2 项目中打开文件夹 在 Tauri 2 项目中&#xff0c;你可以使用以下几种方法来打开文件夹&#xff0c;类似于 macOS 中的 open ./ 命令功能&#xff1a; 方法一&#xff1a;使用 shell 命令 use tauri::Manager;#[tauri::command] async fn open_folder(path: Strin…

编译pg_duckdb步骤

1. 要求cmake的版本要高于3.17&#xff0c;可以通过下载最新的cmake的程序&#xff0c;然后设置.bash_profile的PATH环境变量&#xff0c;将最新的cmake的bin目录放到PATH环境变量的最前面 2. g的版本要支持c17标准&#xff0c;否则会报 error ‘invoke_result in namespace ‘…

GO 语言中变量的声明

Go 语言变量名由字母、数字、下划线组成&#xff0c;其中首个字符不能为数字。Go 语言中关键字和保留字都不能用作变量名。Go 语言中的变量需要声明后才能使用&#xff0c;同一作用域内不支持重复声明。 并且 Go 语言的变量声明后必须使用。 1. var 声明变量 在 Go 语言中&…

windows和mac安装虚拟机-详细教程

简介 虚拟机&#xff1a;Virtual Machine&#xff0c;虚拟化技术的一种&#xff0c;通过软件模拟的、具有完整硬件功能的、运行在一个完全隔离的环境中的计算机。 在学习linux系统的时候&#xff0c;需要安装虚拟机&#xff0c;在虚拟机上来运行操作系统&#xff0c;因为我使…