目录
一、基于授权的访问控制
(一)功能简介
(二)配置步骤
二、基于客户端的访问控制
(一)功能简介
(二)配置步骤
三、Nginx 虚拟主机
(一)基于域名的虚拟主机
(二)基于 IP 的虚拟主机
(三)基于端口的虚拟主机
四、LNMP 架构部署
(一)编译安装 MySQL
(二)安装 PHP 解析环境
(三)配置 Nginx 支持 PHP
(四)部署 Web 应用(以 Discuz 为例)
总结
一、基于授权的访问控制
(一)功能简介
Nginx 支持通过用户名和密码对访问特定目录或网站的客户端进行认证,配置逻辑与 Apache 相似,核心步骤包括生成认证文件、修改配置和重启服务。
(二)配置步骤
- 生成用户密码认证文件
- 首先安装
httpd-tools
(包含 htpasswd
工具):
yum -y install httpd-tools
- 创建认证文件并添加用户(
-c
表示首次创建文件,路径为 /usr/local/nginx/passwd.db
,用户名为 test
):
htpasswd -c /usr/local/nginx/passwd.db test
- 设置文件权限与所有者
- 确保只有 Nginx 运行用户可读取文件(假设 Nginx 用户为
nginx
):
chmod 400 /usr/local/nginx/passwd.db # 只读权限
chown nginx /usr/local/nginx/passwd.db # 所有者设为 nginx
- 修改 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; # 认证文件路径}
}
- 验证配置并重启服务
nginx -t # 检测语法正确性
systemctl restart nginx # 重启 Nginx 使配置生效
- 访问测试 浏览器输入服务器 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 虚拟主机
(一)基于域名的虚拟主机
- 客户端域名解析
修改本地 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
- 准备网站目录与测试页面
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
- 配置 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;}
}
- 测试访问 浏览器输入
http://www.benet.com
和 http://www.accp.com
,应显示对应站点内容。
(二)基于 IP 的虚拟主机
- 添加虚拟 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
- 配置 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
- 准备依赖环境
yum install -y autoconf ncurses-devel gcc-c++ perl-Module-Install cmake
- 解压并编译 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
- 初始化与配置
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 # 立即生效
- 创建用户与初始化数据库
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 解析环境
- 安装依赖库
yum -y install gd libxml2-devel libjpeg-devel libpng-devel zlib-devel
- 编译 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
- 启动 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 # 启动服务
- 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;
}
- 测试 PHP 页面
创建测试文件 test1.php
(输出 PHP 信息)和 test2.php
(测试数据库连接),访问 http://服务器 IP/test1.php
应显示 PHP 环境信息。
(四)部署 Web 应用(以 Discuz 为例)
- 准备程序文件
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 用户权限
- 创建数据库
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';
- 初始化安装 浏览器访问
http://服务器 IP/bbs/install/index.php
,按向导完成安装,配置数据库信息即可。
总结
本文详细介绍了 Nginx 的两种访问控制机制(用户认证与 IP 过滤)、三种虚拟主机配置(域名、IP、端口)以及 LNMP 架构的完整部署流程。通过这些配置,可实现服务器资源的安全控制、多站点高效管理及动态 Web 应用的稳定运行。实际应用中,需根据业务需求调整参数(如并发连接数、缓存策略),并定期更新组件以保障安全性和性能。