目录
(2)修改密码文件权限为400,将所有者改为nginx ,设置 Nginx 的运行用户能够读取
(1)选择系统中不使用的端口,多个端口映射到同一个 IP 地址
一、基于授权的访问控制
(1)使用htpasswd 生成用户认证文件
使用 htpasswd 生成用户认证文件,如果没有该命令,可使用yum安装httpd-tools 软件包。在/usr/local/nginx/日录下生成了 passwd.db文件,用户名是 zhangsan,密码aptech,输入 2 次。在 passwd.db 中生成用户和密码的密文。
[root@localhost ~]# yum -y install httpd-tools
[root@localhost ~]# htpasswd -c /usr/local/nginx/passwd.db zhangsan
New password:
Re-type new password:
Adding password for user zhangsan
(2)修改密码文件权限为400,将所有者改为nginx ,设置 Nginx 的运行用户能够读取
[root@localhost ~]# chmod 400 /usr/local/nginx/passwd.db
[root@localhost ~]# chown nginx /usr/local/nginx/passwd.db
(3)修改主配置文件 nginx.conf,添加相应配置项
vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm;
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;
}
(4)检测语法、、重启服务
[root@localhost ~]# nginx -t
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
(5)用浏览器访问网址,检验控制效果
二、基于客户端的访问控制
基于客户端的访问控制是通过客户端IP地址,决定是否允许对页面访问。规则如下:
deny IP/IP 段:拒绝某个|P或 IP 段的客户端访问。
allow IP/IP 段:允许某个|P或IP 段的客户端访问。
规则从上往下执行,如匹配则停止,不再往下匹配。
修改主配置文件 nginx.conf,添加相应配置项
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm;
# auth_basic "secret";
#auth_basic_user_file /usr/local/nginx/passwd.db;
deny 192.168.10.102;
allow all;
}
三、Nginx虚拟主机
利用虚拟主机,不用为每个要运行的网站提供一台单独的 Nginx 服务器或单独运行组 Nginx 进程,虚拟主机提供了在同一台服务器,同一组 Nginx 进程上运行多个网站的功能。Nginx 可以配置多种类型的虚拟主机,分别是基于 IP 的虚拟主机、基于域名的虚拟主机、基于端口的虚拟主机。
使用 Nginx 搭建虚拟主机服务器时,每个虚拟 web 站点拥有独立的“server{}”配置段,各自监听的 IP 地址、端口号可以单独指定,当然网站名称也是不同的。
1、基于域名的虚拟主机
(1)设置客户端域名解析
修改hosts文件,加入www.benet.com和www.accp.com 这两个域名。
192.168.10.101 www.benet.com
192.168.10.101 www.accp.com
(2)准备各个网站的目录和测试首页
[root@localhost ~]# mkdir -p /var/www/html/benet
[root@localhost ~]# mkdir -p /var/www/html/accp
[root@localhost ~]# vim /var/www/html/benet/index.html
benet
[root@localhost ~]# vim /var/www/html/accp/index.html
accp
(3)修改配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.benet.com;
access_log logs/www.benet.com.access.log;
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / {
root /var/www/html/benet;
index index.html index.htm;
}
}
server {
listen 80;
# listen somename:8080;
server_name www.accp.com;
access_log logs/www.accp.com.access.log;
location / {
root /var/www/html/accp;
index index.html index.htm;
}
}
[root@localhost ~]# nginx -t
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
(4)测试
2、基于 IP 的虚拟主机
台主机如果有多个 IP地址,可以设置每一个 IP 对应一个站点。主机安装多个网卡可以有多个 IP,这里采用虚拟 IP 的方式使主机有多个 IP。
(1)为服务器设置多个 IP地址
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-ens160
[root@localhost network-scripts]# cp ifcfg-ens160 ifcfg-ens160:0
[root@localhost network-scripts]# cp ifcfg-ens160 ifcfg-ens160:1
[root@localhost network-scripts]# vim ifcfg-ens160:0
NAME=ens160:0
DEVICE=ens160:0
IPADDR=192.168.10.100
[root@localhost network-scripts]# vim ifcfg-ens160:1
NAME=ens160:1
DEVICE=ens160:1
IPADDR=192.168.10.200
[root@localhost network-scripts]# nmcli c reload
[root@localhost network-scripts]# nmcli c up ens160
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
[root@localhost network-scripts]# ifconfig
ens160:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.100 netmask 255.255.255.0 broadcast 192.168.10.255
ether 00:0c:29:18:3b:14 txqueuelen 1000 (Ethernet)
ens160:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.200 netmask 255.255.255.0 broadcast 192.168.10.255
ether 00:0c:29:18:3b:14 txqueuelen 1000 (Ethernet)
(2)修改Nginx 的配置文件,使基于IP的虚拟主机生效
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 192.168.10.100:80;
server_name www.benet.com;
……
}
server {
listen 192.168.10.200:80;
server_name www.accp.com;
……
}
[root@localhost ~]# systemctl restart nginx
(3)访问两个IP网站,测试页面是否生效
3、基于端口的虚拟主机
(1)选择系统中不使用的端口,多个端口映射到同一个 IP 地址
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 192.168.10.101:8080;
server_name www.benet.com;
……
}
server {
listen 192.168.10.101:8888;
server_name www.accp.com;
……
}
[root@localhost ~]# systemctl restart nginx
(2)检测端口是否运行正常
[root@localhost ~]# netstat -anpt | grep nginx
tcp 0 0 192.168.10.101:8888 0.0.0.0:* LISTEN 1848/nginx: master
tcp 0 0 192.168.10.101:8080 0.0.0.0:* LISTEN 1848/nginx: master
(3)分别访问2 个端口地址
四、LNMP 架构部署及应用
1、安装mysql
(1)使用dnf 安装
[root@localhost ~]# dnf -y install mariadb-server
[root@localhost ~]# systemctl start mariadb
(2)设置密码并测试
[root@localhost ~]# mysqladmin -uroot password 'pwd123'
[root@localhost ~]# mysql -uroot -ppwd123
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)]> exit
Bye
2、安装 PHP 解析环境
(1)编译安装PHP
[root@localhost ~]# dnf -y install gd libxml2-devel libjpeg-devel libpng-devel
- libxm12-devel:libxml 是一个用来解析 XML 文档的函数库
- libjpeg-devel #是一个完全用C语言编写的库,包含了被广泛使用的 JPEG 解码、JPEG 编码和其他的 JPEG 功能的实现#
- libpng 是一套免费的、公开源代码的程序库,支持对 PNG 图形libpng-devel文件的创建、读写等操作
- GD 指的是 Graphic Device,PHP 的 GD 库是用来处理图形的扩展库,通过 GD 库提供的一系列 API,可以对图像进行处理或者直接生成新的图片。PHP 除了能进行文本处理以外,通过 GD 库,可以对 JPG、PNG、GIF、SWF 等图片进行处理
- zlib-devel #zlib 是一个压缩和解压模块
[root@localhost ~]# tar zxvf php-5.5.38.tar.g
[root@localhost ~]# ls
anaconda-ks.cfg nginx-1.28.0 nginx-1.28.0.tar.gz php-5.5.38 php-5.5.38.tar.gz
mysql用dnf装的:
[root@localhost ~]# cd php-5.5.38
[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=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib
注:
- --with-mysqli=mysqlnd 需要用 ip 地址的方式连接数据库,既可以是 php 和 mysql 装在同一个服务器,也可以装在不同的服务器。用127.0.0.1本地连接不需要为连接授权,用192.168.10.101 连接需要授权,哪怕连接本地数据库。
- --with-mysqli=/usr/bin/mysql_config 需要用 localhost 连接数据库,只能用于本地连接,也就是 php 和 mysql 装在同一个服务器上
[root@localhost php-5.5.38]# make && make install
(2)安装后调整
[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/
(3)安装 ZendGuardLoader
[root@localhost ~]# tar zxvf zend-loader-php5.5-linux-x86_64_update1.tar.gz
zend-loader-php5.5-linux-x86_64/
zend-loader-php5.5-linux-x86_64/ZendGuardLoader.so
zend-loader-php5.5-linux-x86_64/opcache.so
zend-loader-php5.5-linux-x86_64/README.txt
[root@localhost ~]# cd zend-loader-php5.5-linux-x86_64
[root@localhost zend-loader-php5.5-linux-x86_64]# cp ZendGuardLoader.so /usr/local/php5/lib/php/
[root@localhost zend-loader-php5.5-linux-x86_64]# vim /usr/local/php5/php.ini
[PHP]
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so #添加到第二行
zend_loader.enable=1
3、配置 Nginx 支持PHP 环境
(1)启用 php-fpm进程
[root@localhost ~]# cd /usr/local/php5/etc/
[root@localhost etc]#
[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 #25
user=php #149
group=php
pm.max_children=50 #230,最多子进程数
pm.start_servers=20 #235,启动时开启的进程数
pm.min_spare_servers=5 #240,最少空闲进程数
pm.max_spare_servers=35 #245,最多空闲进程数
[root@localhost etc]# /usr/local/sbin/php-fpm
[root@localhost etc]# netstat -anpt | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 113731/php-fpm: mas
[root@localhost ~]# vim /lib/systemd/system/php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/usr/local/php5/php-fpm.pip
ExecStart=/usr/local/php5/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php5/etc/php-fpm.
con
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
(2)配置Gginx 支持PHP 解析
调用本机的 php-fpm进程
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www..benet.com;
charset utf-8;
#access_log logs/host.access.log main;
location / {
root /var/www/html;
index index.html index.htm index.php;
}
location ~ \.php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
(3)PHP页面访问测试
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# systemctl restart php-fpm
[root@localhost ~]# mkdir -p /var/www/html/
[root@localhost ~]# vim /var/www/html/test1.php
<?php
phpinfo();
?>
[root@localhost ~]# vim /var/www/html/test2.php
<?php
$link=mysqli_connect('127.0.0.1','root','pwd123');
if($link) echo "<h1>恭喜你,数据库连接成功啦!!!</h1>";
mysqli_close($link);
?>
4、在LNMP 平台中部署Web应用
(1)下载并部署程序代码
[root@localhost ~]# dnf -y install unzip
[root@localhost ~]# unzip Discuz_X3.3_SC_UTF8.zip
[root@localhost ~]# mkdir -p /var/www/html/bbs
[root@localhost ~]# mv upload/* /var/www/html/bbs
[root@localhost ~]# chown -R php:php /var/www/html/bbs/
(2)创建数据库
[root@localhost ~]# mysql -uroot -ppwd123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
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)]> create database bbs;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> grant all on bbs.* to runbbs@127.0.0.1 identified by 'pwd123';
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> grant all on bbs.* to runbbs@'localhost' identified by 'pwd123';
Query OK, 0 rows affected (0.001 sec)
3、安装 Web应用
访问服务器 URL 地址,对网站进行初始化
http://192.168.10.101/bbs/install/index.php