Nginx、LNMP万字详解

目录

Nginx

特点

Nginx安装

添加Nginx服务

Nginx配置文件

全局配置

HTTP配置

状态统计页面

Nginx访问控制

授权用户

授权IP

虚拟主机

基于域名

测试

基于IP

测试

基于端口

测试

LNAMP

解析方式

LNMP转发php-fpm解析

Nginx代理LAMP解析

LNMP部署示例

实验环境

MariaDB

修改密码

授权数据库

PHP

拷贝配置文件

让bash能够读取php的命令

配置提高php解析效率的模块

配置 Nginx 支持 PHP 环境

Nginx配置

使用NFS文件系统部署Discuz论坛


Nginx


Nginx是一个高性能的开源Web服务器软件,也可以用作反向代理服务器、负载均衡器和HTTP缓存。

特点
  1. 可以跨平台
  2. 轻量化
  3. 并发请求(请求量),假如Apache的并发量能达到3000-5000,那么Nginx可以达到30000-50000

Nginx安装

在XShell中拖入Nginx的源代码软件包

使用systemctl stop firewalld命令关闭防火墙,使用vim /etc/sysconfig/selinux命令编辑selinux文件,将SELINUX参数改为disabled设置永久关闭内核完全机制

使用yum -y install pcre-devel zlib-devel gcc* openssl-devel命令安装nginx所需开发环境

  • Zlib是一个压缩库,Nginx使用它来支持HTTP数据的gzip压缩功能。zlib-devel包含Zlib库的头文件和静态库,用于编译时链接。
  • OpenSSL是一个开放源代码的加密库,提供了安全套接字层(SSL)和传输层安全(TLS)协议的实现。Nginx通常与OpenSSL一起使用来支持HTTPS协议,即加密的HTTP通信。openssl-devel包含OpenSSL库的头文件和静态库,用于编译时链接。

为了提高系统安全性,运行nginx时不使用root用户,创建一个专门运行该程序的用户。使用useradd -M -s /sbin/nologin nginx命令创建程序用户,-M:不创建家目录;-s:指定登录Shell为nologin(不能登录)

使用tar zxvf nginx-1.12.0.tar.gz命令解压源码包,cd进入源码包解压的目录下准备下一步配置安装

运行./configure脚本,自定义安装设置

[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module

选项

说明

--prefix=/usr/local/nginx

这指定了安装 Nginx 的根目录。在这里,Nginx 将被安装到 /usr/local/nginx 目录下。通常情况下,这是默认的安装路径,但可以根据需要修改。

--user=nginx --group=nginx

这两个参数指定了 Nginx 进程运行的用户和用户组。在这里,Nginx 进程将以 nginx 用户和 nginx 组的身份运行。这是为了增强安全性,使得 Nginx 进程不以 root 用户的权限运行。

--with-http_ssl_module

这个参数启用了 Nginx 的 HTTPS 支持,启用了SSL或TLS加密协议的功能。这使 Nginx 可以处理通过 HTTPS 协议传输的数据流量。

--with-http_stub_status_module

这个参数启用了 Nginx 的状态页功能,允许你查看 Nginx 当前的运行状态和一些基本的性能统计信息。

./configure完成后,生成了MAKEFILE文件(配置参数文件)然后使用make && make install命令编译并安装

使用ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/命令创建软链接,这样在终端中也可以调用nginx的命令

可以使用nginx -t命令测试一下bash解释器能否读取nginx命令,检查配置文件是否有语法错误, 提示successful就代表语法没有错误

[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

输入nginx命令启动nginx服务,还可以使用netstat命令查询nginx有没有运行

[root@localhost ~]# nginx
[root@localhost ~]# netstat -anpt | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      17125/nginx: master 

此时在宿主机的浏览器中访问该主机的IP地址,测试能否访问Nginx的服务器

如果要关闭Nginx服务,可以使用以下命令

命令

说明

nginx -s stop

停止nginx服务

pkill -9 nginx

杀死nginx进程来停止nginx服务

killall -3 nginx

停止nginx服务

killall -s QUIT nginx

停止nginx服务

killall -1 nginx

重载nginx服务

killall -s HUP nginx

重载nginx服务

添加Nginx服务

使用systemctl管理服务需要在/lib/systemd/system/目录下创建对应的服务文件

使用service管理服务需要在/etc/init.d/目录下创建对应服务脚本,这里我们使用systemctl管理

进入/lib/systemd/system/目录下,创建nginx服务的文件,添加以下内容,保存并退出,重启systemd,设为开机自启然后启动nginx

[root@localhost ~]# cd /lib/systemd/system/
[root@localhost system]# vim nginx.service

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
#ExecStartPre=/usr/local/sbin/nginx -t
ExecStart=/usr/local/sbin/nginx
ExecStop=/usr/sbin/nginx -s stop
ExecReload=/usr/local/sbin/nginx -s reload

[Install]
WantedBy=multi-user.target
  
# 重启systemd
[root@localhost system]# systemctl daemon-reload
[root@localhost system]# systemctl enable nginx
[root@localhost system]# systemctl start nginx
  • #chkconfig: 35 99 20
    • 35:表示在运行级别3(多用户文本模式)和5(图形模式)下启用这个服务,使用 - 可以表示所有运行级别
    • 99:表示启动服务的优先级。数字越高,启动越靠后。
    • 20:表示停止服务的优先级。数字越高,停止越靠后。

Nginx配置文件

cd到/usr/local/nginx/conf/目录下,进入Nginx存放配置文件的目录,打开nginx主配置文件:vim nginx.conf

全局配置

#user  nobody;    运行用户
worker_processes  2;    # 进程数量,与内核数量对应
#error_log logs/error.log;         # 错误日志文件的位置 
#pid logs/nginx.pid;         # PID 文件的位置

events {
    worker_connections  1024;  # 每个进程允许承载的连接数,与内存对应
}

HTTP配置

下方代码块讲解了部分参数的意义,以及对一些参数的修改,以便进行实验

http{
    日志格式,该格式的名称为"main"
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
    # log_format 格式名称 '客户端IP地址 - 客户端用户名 [请求时间]  "请求方式" '
    #                    '状态码 报文字节数  "HTTP请求头信息" '
    #                    '"客户端的用户代理字符串" "客户端原始IP列表,使用代理时有效"'
    
    每一个server块都对应一个站点
    server {
        listen       80;  # 监听端口
        server_name  www.test.com;  # 服务名称,如果要实现虚拟主机这一项是必须填的

        charset utf-8;    # 字符编码

        #access_log  logs/host.access.log  main;

        location / {  # 这里的/(根)指的是nginx的安装路径,/usr/local/nginx
            root   html;  # 在该根目录下有一个html子目录,存放网页文件
            index  index.html index.htm;    # 索引文件    
        }
}
状态统计页面

在location块下方,添加一个location块

该块内的功能的前提是在安装nginx时配置了--with-http_stub_status_module模块

  • stub_status:当客户端访问 /status 路径时,Nginx将会返回当前服务器的状态信息
  • access_log:通常情况下,Nginx会自动记录所有对于日志的访问,通过设置为off后,可以防止用户访问指定站点的访问信息写入到日志中

假设你有一个网站,其中有一个页面 /test,这个页面包含了一些敏感信息,只有内部员工才能访问。

为了确保这些敏感信息不会被记录在访问日志中,你可以使用 access_log off。来禁止记录对 /test 页面的访问

        location /status {   # status:访问网站url的子目录名称(http://www.test.com/status)
            stub_status on;  # 启用该站点的状态统计功能
            access_log off;  # 关闭访问日志记录
        }

保存并退出,在终端输入systemctl restart nginx这个命令来启动nginx服务

在宿主机使用浏览器访问nginx服务,可以显示出状态信息

在此处做一个快照,方便后续LNMP部署

Nginx访问控制

授权用户

使用yum -y install httpd-tools安装Apache的工具集

使用htpasswd -c /usr/local/nginx/pass.db tom命令生成用户认证文件,并创建名为tom的用户和对应加密过的密码,回车后设置密码

如果要再次创建授权的用户,需要将命令的-c选项去掉,因为认证文件已经生成过了不需要再生成,否则就会覆盖原文件:htpasswd /usr/local/nginx/pass.db jerry

为了访问的安全性,应该只设置读的权限,使用chmod 400将pass.db文件改为只能读取,而在nginx运行时应该由nginx的程序用户来调用该文件,所以将属主也改为nginx

[root@localhost ~]# ll /usr/local/nginx/pass.db 
-rw-r--r-- 1 root root 86 7月  14 10:25 /usr/local/nginx/pass.db
[root@localhost ~]# chmod 400 /usr/local/nginx/pass.db
[root@localhost ~]# ll /usr/local/nginx/pass.db 
-r-------- 1 root root 86 7月  14 10:25 /usr/local/nginx/pass.db
[root@localhost ~]# chown nginx /usr/local/nginx/pass.db 
[root@localhost ~]# ll /usr/local/nginx/pass.db 
-r-------- 1 nginx root 86 7月  14 10:25 /usr/local/nginx/pass.db

还需要在nginx配置文件中配置基本认证的功能,

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
修改location块内的参数
location / {
            root   html;
            index  index.html index.htm;
            auth_basic "secret";  # 定义认证区域,显示一个提示信息"secret"给客户端,当客户端尝试访问受保护的资源时,会弹出一个对话框要求输入用户名和密码。
            auth_basic_user_file /usr/local/nginx/pass.db;  # 当客户端提供凭据pass.db中的记录匹配时,Nginx才会允许访问资源
        }

此时用浏览器访问Nginx服务器就会弹出身份验证的窗口

授权IP

因为规则是从上往下匹配的,如果匹配到规则就停止,不再往下匹配。

所以可以先添加deny规则 拒绝102主机访问,然后再下一条规则添加允许所有主机访问,就变成了只拒绝102主机的请求,允许其他所有主机

[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/pass.db;
            deny 192.168.10.102;
            allow all;
        }

虚拟主机

基于域名

将nginx配置文件中第一个server站点下方的被注释的server站点注释全部去掉,准备定义第二个站点,注意想要在同一主机上托管多个站点,server_name必须不同,服务器要根据server_name来判断用户访问的URL

把第一个server站点的网页位置改为/var/www/html,第二个站点网页位置改为/var/www/html/accp

再为accp站点添加访问日志,保存并退出使用nginx -t测试语法正确性

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  www.test.com;

        charset utf-8;
        access_log  logs/test.com.access_log;
        

        location / {
            root   /var/www/html/test;
            index  index.html index.htm;
            #auth_basic "secret";
            #auth_basic_user_file /usr/local/nginx/pass.db;
            #deny 192.168.10.102;
            #allow all;
        }
        # 省略部分内容
}

server {
        listen       80;
        server_name  www.accp.com;
        access_log logs/accp.com.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

在配置文件中配置的网页存放位置,由于我们是用源码包安装的Nginx,所以系统不会生成/var/www/html目录,所以这里需要手动创建出来两个对应目录

再使用重定向将测试的字符串覆盖到index.html文件中,如果没有该文件,重定向会在覆盖时自动生成该文件

[root@localhost ~]# mkdir -p /var/www/html/test
[root@localhost ~]# mkdir -p /var/www/html/accp
[root@localhost ~]# echo "www.test.com" > /var/www/html/test/index.html
[root@localhost ~]# echo "www.accp.com" > /var/www/html/accp/index.html
测试

因为有两个站点需要测试,所以需要向hosts文件写入对应解析,这里开启第二台虚拟机作为客户端(192.168.10.102)

将解析站点写入hosts文件

[root@localhost ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.101 www.test.com
192.168.10.101 www.accp.com

使用curl测试

[root@localhost ~]# curl www.test.com
www.test.com
[root@localhost ~]# curl www.accp.com
www.accp.com
基于IP

手动添加子接口

或使用ifconfig命令创建临时子接口

ifconfig ens33:0 192.168.10.211

ifconfig ens33:0 192.168.10.212

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:1

在子接口0中修改IP和设备名

[root@localhost network-scripts]# vim ifcfg-ens33:0
IPADDR=192.168.10.211
NAME=ens33:0
DEVICE=ens33:0

在子接口1中修改IP和设备名

[root@localhost network-scripts]# vim ifcfg-ens33:1
IPADDR=192.168.10.212
NAME=ens33:1
DEVICE=ens33:1

重启网络服务,使用ip a查看地址

[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ip a
2: ens33: 
    inet 192.168.10.101/24 brd 192.168.10.255 scope global ens33
    inet 192.168.10.211/24 brd 192.168.10.255 scope global secondary ens33:0
    inet 192.168.10.212/24 brd 192.168.10.255 scope global secondary ens33:1

修改配置文件,将两个站点的监听参数改为子接口IP : 端口号

检测语法正确性,重启nginx服务

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
# test站点
listen       192.168.10.211:80;
# accp站点
listen       192.168.10.212:80;
[root@localhost ~]# nginx -t
[root@localhost ~]# systemctl restart nginx
测试

来到102客户端主机使用curl测试

[root@localhost ~]# curl 192.168.10.211
www.test.com
[root@localhost ~]# curl 192.168.10.212
www.accp.com
基于端口

直接修改配置文件中的监听参数

修改完后重启服务

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
# test站点
listen       192.168.10.101:80;
# accp站点
listen       192.168.10.101:8001;
[root@localhost ~]# nginx -t
[root@localhost ~]# systemctl restart nginx
测试

需要注意的是,访问accp.com不加端口号访问的也不是accp.com,只有加了8001端口号才能正常访问

[root@localhost ~]# curl 192.168.10.101:80
www.test.com
[root@localhost ~]# curl 192.168.10.101:8001
www.accp.com
[root@localhost ~]# curl www.test.com
www.test.com
[root@localhost ~]# curl www.test.com:8001
www.accp.com
[root@localhost ~]# curl www.accp.com
www.test.com
[root@localhost ~]# curl www.accp.com:8001
www.accp.com

LNAMP

前面的文章说过Linux、Apache、MySQL、PHP结合构建LAMP,那么把Apache换成Nginx也可以构建LNMP

把Nginx加入到LAMP就可以构建成LNAMP

解析方式

LNMP转发php-fpm解析

在运行LAMP环境的时候,其中的PHP并没有实际运行的进程,只是安装了PHP的模块给Apache使用

由于php没有给Nginx提供模块,所以在LNMP环境下就需要额外运行一个php环境的主机,提供一个进程 ——》php-fpm,该进程负责解析动态资源请求。

就实现了:Nginx专门处理静态资源解析,php专门负责动态资源解析

Nginx代理LAMP解析

Nginx也可以通过 cgifast-cgi 连接两个程序,Nginx接收动态资源请求后需要转发给php解析,这么一来解析的速度就变慢了

可以让Nginx通过代理功能把动态请求转发给LAMP的环境,就实现了Nginx解析静态请求,LAMP解析动态请求,达到更快的解析速度(动静分离

  • cgi:通用网关接口
  • fast-cgi:快速通用网关接口

LNMP部署示例

实验环境

IP地址

操作系统

主要软件及版本

192.168.10.101

CentOS7.9

Nginx

192.168.10.102

CentOS7.9

php

192.168.10.103

CentOS7.9

mysql

为了方便测试,关闭3台主机的防火墙:systemctl stop firewalld


在103主机安装

MariaDB

为了快速部署,这里使用yum来安装mariadb数据库的服务端和客户端:yum -y install mariadb-server mariadb

安装完mariadb,使用systemctl start mariadb命令启动服务

修改密码

使用mysqladmin命令指定连接MySQL的用户名为root,密码设为123456

然后使用mysql -uroot -p测试密码能否进入数据库

[root@localhost ~]# mysqladmin -uroot password '123456'
[root@localhost ~]# mysql -uroot -p

授权数据库

对数据库的连接授权,授权后可以使用主机名连接

登录数据库,切换操作的数据库为mysql,授予root用户可以从任何主机访问数据库的所有权限,并设置密码为'aptech'。

为了使授权生效,需要刷新MySQL的权限缓存

%:%通配符表示所有IP地址

[root@localhost ~]# mysql -u root -p123456
use mysql;    # 切换数据库为mysql
grant all on *.* to root@'%' identified by 'aptech';
flush privileges;    # 刷新权限

PHP

在102主机安装

拖入php的源代码软件包

使用tar zxvf php-5.5.38.tar.gz解压该源码包

使用yum -y install gd libxml2-devel libjpeg-devel libpng-devel gcc*命令安装php所需开发环境

gd是一个用于动态创建图像的开源库。它允许你创建 GIF、JPEG、PNG 等格式的图像,以及进行简单的图像操作和合成。

libxml2是一个用于解析XML文档的函数库。

libjpeg 一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现

libpng 是一个用于处理 PNG 格式图像的C语言函数库,提供了 PNG 图像的读取和写入功能。

cd进入解压目录,使用./configure脚本自定义安装

[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
  • mysqlnd
    • 用ip地址的方式连接数据库,既可以是php和mysql装在同一个服务器,也可以装在不同的服务器。
    • 用127.0.0.1本地连接不需要为连接授权,用192.168.10.101连接需要授权,哪怕连接本地数据库。

选项

说明

--prefix=/usr/local/php5

指定安装路径

--with-gd

启用GD图形库的支持

--with-zlib

启用Zlib库的支持

Zlib是一个用于数据压缩和解压的库,PHP使用它来处理压缩格式的数据。

--with-mysql=mysqlnd

启用MySQL数据库的支持

--with-mysqli=mysqlnd

启用mysqli的支持,并且使用mysqlnd驱动

--with-config-file-path=/usr/local/php5

指定了PHP配置文件(php.ini)的存放路径

--enable-mbstring

启用多字节字符串支持。

mbstring扩展允许PHP处理多字节编码的字符串,例如UTF-8。

--enable-fpm

启用了FastCGI Process Manager(FPM)支持。FPM是一个PHP FastCGI管理器

使用make && make install编译并安装php

拷贝配置文件

将php提供的模板配置文件拷贝到指定的安装目录下

[root@localhost php-5.5.38]# cp php.ini-development /usr/local/php5/php.ini

让bash能够读取php的命令

[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解析效率的模块

拖入ZendGuardLoader压缩包

解压后进入解压目录,拷贝ZendGuardLoader.so文件到指定目录

[root@localhost ~]# tar -zxvf zend-loader-php5.5-linux-x86_64_update1.tar.gz
[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/ 

在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 # 启用该模块 保存并退出

配置 Nginx 支持 PHP 环境

在102主机操作

拷贝php提供的php-fpm功能配置文件,并创建用于运行php-fpm的程序用户

[root@localhost ~]# 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 php    # 创建程序用户

修改php-fpm的配置文件,将运行用户改为刚刚创建的php

[root@localhost etc]# vim php-fpm.conf
在末行模式下搜索:/user
修改150、151行的内容
user = php
group = php

再找到164行,修改监听IP为自己本机的IP地址,用于处理本机接受的动态解析请求

listen = 192.168.10.102:9000

再找到第230行、235行、240行、245行,将子进程的数量改为50

pm.max_children = 50    # 最大子进程数量
pm.start_servers = 20    # 启动时初始子进程数量
pm.min_spare_servers = 5    # 最小空闲子进程数量
pm.max_spare_servers = 35    # 最大空闲子进程数量

保存并退出,使用php-fpm命令启动服务,使用netstat命令也可以看到监听的IP也变为102

[root@localhost etc]# php-fpm
[root@localhost etc]# netstat -anpt | grep php
tcp        0      0 192.168.10.102:9000     0.0.0.0:*               LISTEN      106322/php-fpm: mas

Nginx配置

转到101主机

恢复之前做的快照

这里直接使用前面文章开头的Nginx安装过的环境

现在实现让101主机的主机连接到102主机的php-fpm服务

在大概72行,取消location块的注释,修改为以下内容

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
在44、45行修改内容
location / {
            root   /var/www/html;
            index  index.html index.htm index.php;

        }

location ~ \.php$ {
            root           /var/www/html;    # 指定网页存放位置
            fastcgi_pass   192.168.10.102:9000;
    # 指定cgi接口监听ip和端口号
            fastcgi_index  index.php;
# 指定索引文件格式
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
# 指定配置文件
        }

如果nginx是开启状态,需要先关闭,然后再开启nginx

[root@localhost conf]# nginx -s stop    # 关闭nginx
[root@localhost conf]# nginx

来到102主机

使用mkdir -p命令递归创建存放网页文件的目录,创建test.php动态网页文件,调用phpinfo()函数显示php版本信息内容

如果解析的是静态文件,将文件放到101主机,如果解析的是动态文件,将文件放到102主机的/var/www/html

[root@localhost html]# cd /var/www/html
[root@localhost html]# vim test.php
<?php 
phpinfo();
?>

记得关闭防火墙systemctl stop firewalld

此时访问192.168.10.101/test.php可以测试解析动态页面,显示php版本信息

再新建一个test02.php文件,测试数据库是否能够连接

[root@localhost html]# vim test02.php
<?php
$link=mysqli_connect('192.168.10.103','root','123456');
if($link) echo "<h1>数据库连接成功</h1>"; 
mysqli_close($link);
?>

使用NFS文件系统部署Discuz论坛

nfs:网络文件系统,作用是远程共享目录或文件给其他主机

转到103主机

安装支持nfs文件系统的软件包

[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# yum -y install unzip

将Discuz开源论坛系统压缩包拖入XShell,使用unzip命令解压该压缩包

进入解压出的upload目录,移动upload目录内所有文件到共享给其他主机访问的目录

[root@localhost ~]# unzip Discuz_X3.3_SC_UTF8.zip
[root@localhost ~]# cd upload/
[root@localhost upload]# mv * /opt/share/

登录mysql,创建名为bbs的数据库,授予用户runbbs对bbs数据库的所有权限,并设置密码为aptech,然后刷新权限

创建程序用户,将共享目录内的文件权限属主和属组都分配给php用户

[root@localhost upload]# mysql -uroot -paptech
# 创建属于论坛的数据库,名为bbs
create database bbs;
grant all on bbs.* to runbbs@'%' identified by 'aptech';
flush privileges;

[root@localhost share]# useradd php
[root@localhost share]# chown -R php:php *

创建共享目录,启动共享目录对应的服务

[root@localhost ~]# mkdir /opt/share
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl start rpcbind

转到101主机

安装让系统支持nfs的软件包

使用mount命令挂载103主机的共享目录

[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# mount 192.168.10.103:/opt/share /var/www/html/

当103主机的共享目录存放了文件,在挂载过共享目录后,cd进入指定挂载的目标目录(/var/www/html)下就可以看到共享目录中存放的文件

转到102主机

安装让系统支持nfs的软件包

使用mount命令挂载103主机的共享目录

[root@localhost html]# yum -y install nfs-utils
[root@localhost ~]# mount 192.168.10.103:/opt/share /var/www/html/

使用浏览器访问192.168.10.101/install 进入论坛安装页面,根据提示安装论坛系统

安装完成后,访问192.168.10.101,Web服务器会自动跳转到论坛首页,完成部署

上一篇:uniapp动态计算并设置元素高度


下一篇:掌握Xcode Storyboard:iOS UI设计的可视化之旅