目录
一:基于授权的访问控制
Nginx 与 Apahce 一样,可以实现基于用户授权的访问控制,当客户端想要访问相应网站或者目录时,要求用户输入用户名和密码才能正常访问。
- 使用htpasswd生成用户认证文件
[root@localhost ~]# dnf -y install httpd-tools ##安装用于生成密码文件的软件包
[root@localhost ~]# htpasswd -c /usr/local/nginx/passwd.db lisi ##生成密码,用户为lisi
New password:
Re-type new password:
Adding password for user lisi
##/usr/local/nginx/passwd.db ##密码文件存放位置
[root@localhost ~]# chmod 400 /usr/local/nginx/passwd.db
##修改密码文件权限为可读
[root@localhost ~]# chown nginx /usr/local/nginx/passwd.db
##修改密码文件的所属者为nginx
- 修改nginx主配置文件
location / {
root html;
index index.html index.htm;
auth_basic "secret"; ##此部分添加两行
auth_basic_user_file /usr/local/nginx/passwd.db;
}
auth_basic "secret";
##用户访问受保护资源时弹出一个对话框,要求输入用户名和密码。
auth_basic_user_file /usr/local/nginx/passwd.db;
##指定密码文件位置
[root@localhost ~]# nginx -t ##检测nginx配置文件是否有误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# systemctl restart nginx ##重新启动nginx
[root@localhost ~]# netstat -anpt |grep nginx ##查看nginx的监听端口
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2057/nginx: master
##验证前,关闭防火墙
systemctl stop firewalld
setenforce 0
- 验证
输入用户名及密码进行访问
二:基于客户端的访问控制
基于客户端的访问控制是通过客户端 IP 地址,决定是否允许对页面访问。Nginx 基于客户端的访问控制要比 Apache 简单,规则如下:
- deny IP/IP 段: 拒绝某个|P 或IP 段的客户端访问
- allow IP/IP 段:允许某个|P或 IP段的客户端访问
- 规则从上往下执行,如匹配则停止,不再往下匹配。
location / {
root html;
index index.html index.htm;
#auth_basic "secret";
#auth_basic_user_file /usr/local/nginx/passwd.db;
deny 192.168.10.101; ##拒绝101客户机访问
allow all; ##允许所有人访问
}
[root@localhost ~]# curl 192.168.10.102
<html>
<head><title>403 Forbidden</title></head> ##使用101客户机进行访问会被拒绝
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.24.0</center>
</body>
</html>
三:Nginx虚拟主机
Nginx 也可以配置多种类型的虚拟主机,分别是基于 IP 的虚拟主机、基于域名的虚拟主机、基于端口的虚拟主机。
使用 Nginx 搭建虚拟主机服务器时,每个虚拟 web 站点拥有独立的“server{}”配置段,各自监听的 IP 地址、端口号可以单独指定,当然网站名称也是不同的。
1,基于域名的虚拟主机
- 设置客户端域名解析并准备网站
[root@localhost ~]# vim /etc/hosts ##修改hosts文件添加以下两行
192.168.10.102 www.aaa.com www.bbb.com ##102主机设置两个域名
##创建两个域名的网站
[root@localhost ~]# mkdir -p /var/www/html/aaa
[root@localhost ~]# mkdir -p /var/www/html/bbb
[root@localhost ~]# cd /var/www/html/aaa
[root@localhost aaa]# echo "www.aaa.com" > index.html
[root@localhost aaa]# cd /var/www/html/bbb
[root@localhost bbb]# echo "www.bbb.com" > index.html
- 修改配置文件
##修改自带的server部分
server {
listen 80;
server_name www.aaa.com; ##设置域名www.aaa.cim
#charset koi8-r;
access_log logs/www.aaa.com.access.log;
location / {
root /var/www/html/aaa; 设置www.aaa.com域名的网站代码位置
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
##添加新的server部分
server {
listen 80;
server_name www.bbb.com; ##设置域名www.bbb.com
#charset koi8-r;
access_log logs/www.bbb.com.access.log;
location / {
root /var/www/html/bbb; ##设置www.bbb.com域名的网站代码位置
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
[root@localhost aaa]# systemctl restart nginx ##重启ningx方便测试
-
进行测试
[root@localhost ~]# curl www.aaa.com
www.aaa.com
[root@localhost ~]# curl www.bbb.com
www.bbb.com
2,基于IP的虚拟主机
一台主机如果有多个 IP 地址,可以设置每一个 IP 对应一个站点。主机安装多个网卡可以有多个 IP,这里采用虚拟 IP 的方式使主机有多个 IP。
- 为主机设置多个ip地址
[root@localhost network-scripts]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens160 ifcfg-ens160:0
[root@localhost network-scripts]# vim ifcfg-ens160:0
IPADDR=192.168.10.111 ##IP改为192.168.10.111
NAME=ens160:0 ##网卡名字改为ens160:0
DEVICE=ens160:0
[root@localhost network-scripts]# nmcli c reload ##重载网卡
[root@localhost network-scripts]# nmcli c up ens160
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3
- 修改nginx配置文件
server {
listen 192.168.10.102:80;
server_name www.aaa.com;
server {
listen 192.168.10.111:80;
server_name www.bbb.com;
[root@localhost ~]# systemctl restart nginx ##重启nginx
[root@localhost ~]# netstat -anpt |grep nginx ##查看两个IP监听的端口
tcp 0 0 192.168.10.102:80 0.0.0.0:* LISTEN 1787/nginx: master
tcp 0 0 192.168.10.111:80 0.0.0.0:* LISTEN 1787/nginx: master
- 测试
[root@localhost ~]# curl 192.168.10.102
www.aaa.com
[root@localhost ~]# curl 192.168.10.111
www.bbb.com
3,基于端口的虚拟机主机
server {
listen 192.168.10.102:8888; ##添加端口
server_name www.aaa.com;
server {
listen 192.168.10.111:8080; ##添加端口
server_name www.bbb.com;
[root@localhost ~]# systemctl restart nginx ##重启nginx
[root@localhost ~]# netstat -anpt |grep nginx ##查看修改后的端口
tcp 0 0 192.168.10.102:8888 0.0.0.0:* LISTEN 1809/nginx: master
tcp 0 0 192.168.10.111:8080 0.0.0.0:* LISTEN 1809/nginx: master
- 客户端验证
[root@localhost ~]# curl 192.168.10.102:8888
www.aaa.com
[root@localhost ~]# curl 192.168.10.111:8080
www.bbb.com
四:LNMP架构部署及应用
众所周知,LNMP 平台是目前应用最为广泛的网站服务器架构,
- L:linux系统
- N:nginx服务
- M:mysql服务
- P:php认证
1,安装mairadb
- 使用联网的方式快速安装mairadb
[root@localhost ~]# dnf -y install mariadb-server
[root@localhost ~]# systemctl start mariadb.service ##启动mariadb
[root@localhost ~]# mysqladmin -uroot password 'pwd123' ##初始化密码
[root@localhost ~]# mysql -u root -ppwd123 ##进入到mariadb
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.5.28-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
2,安装并配置php
[root@localhost src]# ls
debug nginx-1.24.0 zend-loader-php5.5-linux-x86_64_update1.tar.gz
kernels php-5.5.38.tar.gz
##准备php所需软件包zend-loader-php5.5-linux-x86_64_update1.tar.gz php-5.5.38.tar.gz
##并进行解压
[root@localhost src]# dnf -y install gd libxml2-devel libjpeg-devel libpng-devel
##安装所需软件包
##GD: 指的是 Graphic Device,PHP 的 GD 库是用来处理图形的扩展库,通过 GD 库提供的一系列 API,可以对图像进行处理或者直接生成新的图片。PHP 除了能进行文本处理以外,通过 GD 库,可以对 JPG、PNG、GIF、SWF 等图片进行处理
##libxm12-devel: libxml 是一个用来解析 XML文档的函数库
##libjpeg-devel:是一个完全用c语言编写的库,包含了被广泛使用的 JPEG 解码,JPEG 编码和其他的 JPEG 功能的实现
##libpng-devel: libpng 是一套免费的、公开源代码的程序库,支持对 PNG 图形文件的创建、读写等操作
##zlib-devel#Zlib 是一个压缩和解压模块
- 编译安装的基本信息
[root@localhost php-5.5.38]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-config-file-path=/uar/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib
[root@localhost php-5.5.38]# make && make install
## --prefix=/usr/local/php5:文件前缀,指定 PHP 的安装目录为 /usr/local/php5
## --with-gd:用于处理图像创建、编辑、格式转换等操作的库
## --with-zlib:启用 zlib 压缩库支持,用于处理压缩文件
## --with-mysql=mysqlnd:启用 MySQL 支持,并使用 PHP 自带的 MySQL Native Driver
## --with-mysqli=mysqlnd:启用 MySQLi(MySQL Improved)扩展,同样使用 mysqlnd 驱动。
## --with-config-file-path=/uar/local/php5:
## --enable-mbstring:启用多字节字符串扩展,用于处理非 ASCII 字符
## --enable-fpm :性能的 PHP 进程管理,常用于 Nginx 服务器。
## --with-jpeg-dir=/usr/lib:指定 JPEG 库的路径为 /usr/lib,使 PHP 可以处理 JPEG 图片
- 安装后的调整
##将 PHP 的开发环境配置文件 php.ini-development 复制到 PHP 的配置目录 /usr/local/php5/ 并重命名为 php.ini
[root@localhost php-5.5.38]# cp php.ini-development /usr/local/php5/php.ini
创建软链接
[root@localhost php-5.5.38]# ln -s /usr/local/php5/bin/* /usr/local/bin
[root@localhost php-5.5.38]# ln -s /usr/local/php5/sbin/* /usr/local/sbin
-
为php添加zend优化模块
##解压zend压缩包并切换到zend目录
[root@localhost src]# cd zend-loader-php5.5-linux-x86_64
[root@localhost zend-loader-php5.5-linux-x86_64]# ls
opcache.so README.txt ZendGuardLoader.so
[root@localhost zend-loader-php5.5-linux-x86_64]# cp ZendGuardLoader.so /usr/local/php5/lib/php
## 将 Zend Guard Loader 扩展文件 ZendGuardLoader.so 复制到 PHP 的扩展目录 /usr/local/php5/lib/php 中,以便 PHP 可以加载这个模块。
[root@localhost zend-loader-php5.5-linux-x86_64]# vim /usr/local/php5/php.ini
修改php.ini文件添加两行
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so ##启用 Zend Guard Loader 的功能。
zend_loader.enable=1 ##启用 Zend Guard Loader 的功能。
- 配置Nginx支持PHP环境
[root@localhost zend-loader-php5.5-linux-x86_64]# cd /usr/local/php5/etc
[root@localhost etc]# ls
pear.conf php-fpm.conf.default
[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf
[root@localhost etc]# useradd -M -s /sbin/nologin php
[root@localhost etc]# vim php-fpm.conf
;pid = run/php-fpm.pid ##去掉;号
user = php
group = php
.max_children = 50 ##最多子进程数
pm.start_servers = 20 ##启动时开启的进程数
pm.min_spare_servers = 5 ##最少空闲进程数
pm.min_spare_servers = 35 ##最多空闲进程数
- 配置Nginx支持php解析
location / {
root /var/www/html/;
index index.html index.htm index.php;
charset utf-8;
}
location ~ \.php$ {
root /var/www/html; ##网页代码路径
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf; ##引入 fastcgi.conf 文件,该文件定义了 Nginx 如何与 PHP-FPM通信
}
[root@localhost html]# systemctl restart nginx
- 准备php页面代码
##在/var/www/html添加以下两个网页代码文件
[root@localhost html]# cat test.php
<?
phpinfo();
?>
[root@localhost html]# cat test1.php
<?
$link=mysqli_connect('127.0.0.1','root','pwd123');
if($link)echo "<h1>恭喜你,数据库连接成功了</h1>";
mysqli_close($link);
?>
- 测试
test.php
test1.php