目錄
一、基于授權的訪問控制
(一)功能簡介
(二)配置步驟
二、基于客戶端的訪問控制
(一)功能簡介
(二)配置步驟
三、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 應用的穩定運行。實際應用中,需根據業務需求調整參數(如并發連接數、緩存策略),并定期更新組件以保障安全性和性能。