首页 > 系统相关 >Nginx、LNMP万字详解

Nginx、LNMP万字详解

时间:2024-07-17 17:55:25浏览次数:18  
标签:nginx LNMP Nginx 详解 usr php root localhost

目录

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也可以通过 cgi 或 fast-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服务器会自动跳转到论坛首页,完成部署

标签:nginx,LNMP,Nginx,详解,usr,php,root,localhost
From: https://blog.csdn.net/m0_65551023/article/details/140500789

相关文章

  • 小一保姆级 Python 文件操作与管理详解
    Python文件操作与管理在Python编程中,文件操作是日常任务中不可或缺的一部分。本文将介绍Python中三个重要的文件相关模块和功能:open函数、json与pickle库、以及os模块的使用。1. open 函数的使用Python中的open函数是用来打开文件的核心函数。它提供了多种......
  • TCP/IP网络模型详解
    在计算机网络领域,网络模型通常指的是OSI(OpenSystemsInterconnection)参考模型或TCP/IP(TransmissionControlProtocol/InternetProtocol)模型。这些模型描述了网络中数据传输的层次结构,便于理解和设计网络系统。1.OSI七层网络模型OSI(OpenSystemsInterconnection)七层网络......
  • 基于QEMU的LCD驱动详解
    1.使用QEMU的优点概述:使用QEMU模型LCD屏幕,可以只写驱动程序,不需要设置LCD硬件相关,也不需要映射Framebuffer。使用QEMU可以非常方便地调试内核、查看驱动程序执行过程有助于深入研究内核及驱动Linux驱动=驱动框架+硬件操作。如果硬件操作足够简单,我们就可以把精力......
  • FastJson详解
    文章目录一、FastJson介绍二、FastJson序列化API1、序列化Java对象2、序列化List集合3、序列化Map集合三、FashJson反序列化API1、反序列化Java对象2、反序列化List集合3、反序列化Map集合(带泛型)四、SerializerFeature枚举1、默认字段为null的不显示2、格式化五、@JSo......
  • 以电商、消费行业为例,详解火山引擎数智平台如何应用湖仓一体架构
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群。 随着互联网的不断发展,企业数据的使用场景也发生巨大变化,湖仓一体逐渐成为一种被广泛应用的底层数据架构。 详细来说,湖仓一体架构是一种将数据湖和数据仓库的优势结合起来的新型数据架......
  • SIP消息结构详解
    SIP协议的消息由三部分构成,分别是起始行(请求行+状态行)、消息头和消息体(正文)一.起始行1.请求消息起始行 起始行:由方法名、请求URI和协议版本组成,自身内部用逗号分割,三者之间用空格分隔。例如:INVITE sip:[email protected];user=phone SIP/2.0方法名:SIP协议定义了一系列......
  • centos7 安装nginx
    一.安装必要的依赖yuminstallgcc-c++-yyuminstall-yopensslopenssl-develyuminstall-yzlibzlib-develyuminstall-ypcrepcre-devel二.下载nginx安装包进入usr/local里面创建nginx文件,方便后期删除干净cd/usr/localmkdirnginxcdnginxwget下载安装包w......
  • linux下使用fdisk进行磁盘分区详解
     转载:https://www.cnblogs.com/renshengdezheli/p/13941563.html目录一.前言二.关于磁盘分区的结构三.fdisk命令详解四.使用fdisk进行磁盘分区4.1磁盘分区规划4.2fdisk进行磁盘分区4.3格式化分区4.4创建挂载点/挂载目录4.5挂载分区4.6设置开机自动挂载分区......
  • 【数据结构与算法】选择排序篇----详解直接插入排序和哈希排序【图文讲解】
     欢迎来到CILMY23的博客......
  • icacls 命令使用详解
    icacls(InteractiveCommand-LineAccessControlLists)是Windows系统中用于查看和修改文件、目录权限的命令行工具。它允许管理员或具有适当权限的用户对文件和目录的访问控制列表(ACL)进行细粒度控制。以下是icacls命令的详细使用说明及操作实例。一、icacls命令的基本语法icacls......