目录
一、基于授权的访问控制
(一)功能简介
(二)配置步骤
二、基于客户端的访问控制
(一)功能简介
(二)配置步骤
三、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
):chmod 400 /usr/local/nginx/passwd.db # 只读权限
chown nginx /usr/local/nginx/passwd.db # 所有者设为 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 使配置生效
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; # 拒绝单个 IP
allow all; # 允许所有 IP(需放在拒绝规则之后)
}
保存配置后,执行 nginx -t
和 systemctl restart 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.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
,应显示对应站点内容。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.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
)。
yum install -y autoconf ncurses-devel gcc-c++ perl-Module-Install cmake
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 密码
yum -y install gd libxml2-devel libjpeg-devel libpng-devel zlib-devel
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
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 # 启动服务
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;
}
test1.php
(输出 PHP 信息)和 test2.php
(测试数据库连接),访问 http://服务器 IP/test1.php
应显示 PHP 环境信息。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 应用的稳定运行。实际应用中,需根据业务需求调整参数(如并发连接数、缓存策略),并定期更新组件以保障安全性和性能。