Linux系统——LNMP架构

目录

一、LNMP架构定义

1.LNMP定义

1.1LNMP工作原理 

2.FASTCGI

2.1CGI的由来

2.2为什么会有FastCGI

3.PHP

3.1什么是PHP-FPM

3.2PHP配置

3.1.1对配置文件的修改生效方法

3.1.2/etc/php.ini配置文件格式

3.1.3注释符:

3.1.4php.ini配置参考文档

3.1.5php常见设置

二、搭建LNMP架构

1.编译安装Nginx

2.编译安装Mysql

3.编译安装php

4.修改Nginx配置

5.安装论坛

6.搭建博客


一、LNMP架构定义

1.LNMP定义

LNMP(Linux Nginx Mysql Php)是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写;Linux系统下Nginx+MySQL+PHP这种网站服务器架构。

  • Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
  • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好
  • MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。MySQL不仅是开放源代码的,也因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
  • PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。因为PHP的开源性、免费性、快捷性等特点使其成为目前最流行的编程语言。

四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。Nginx使用更少的资源,支持更多的并发连接,体现更高的效率;Nginx 既可以在内部直接支持Rails和PHP,也可以支持作为 HTTP代理服务器对外进行服务;Nginx 安装非常的简单,配置文件非常简洁(还能够支持perl语法);Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。

1.1LNMP工作原理 

  • 第一步:用户在浏览器输入域名或者IP访问网站
  • 第二步:用户在访问网站的时候,向web服务器发出http request请求,服务器响应并处理web请求,返回静态网页资源,如CSS、picture、video等,然后缓存在用户主机上。
  • 第三步:服务器调用动态资源,PHP脚本调用fastCGI传输给php-fpm,然后php-fpm调用PHP解释器进程解析PHP脚本。
  • 第四步:出现大流量高并发情况,PHP解析器也可以开启多进程处理高并发,将解析后的脚本返回给php-fpm,然后php-fpm再调给fast-cgi将脚本解析信息传送给nginx,服务器再通过http response传送给用户浏览器。
  • 第五步:浏览器再将服务器传送的信息进行解析与渲染,呈现给用户。

2.FASTCGI

2.1CGI的由来

最早的Web服务器只能简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给测览器,也就是静态html文件,但是后期随着网站功能增多网站开发也越来越复杂,以至于出现动态技术,比如像php(1995年)、java(1995)、python(1991)语言开发的网站,但是nginx/apache服务器并不能直接运行 php、java这样的文件,apache实现的方式是打补丁,但是nginx却通过与第三方基于协议实现,即通过某种特定协议将客户端请求转发给第三方服务处理,第三方服务器会新建新的进程处理用户的请求,处理完成后返回数据给Nginx并回收进程**,最后nginx在返回给客户端,那这个约定就是通用网关接口(common gateway interface,简称CGI),CGI(协议)是web服务器和外部应用程序之间的接口标准,是cgi程序和web服务器之间传递信息的标准化接口。

CGI全称"通用网关接口"(Common Gateway Interface),用于HTTP服务器与其它机器上的程序服务通信交流的一种工具,CGI程序须运行在网络服务器上。

传统CGI接口方式的主要缺点是性能较差,因为每次HTTP服务器遇到动态程序时都需要重启解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问几乎是不可用的,因此就诞生了FastCGI。另外传统的CGI接口方式安全性也很差。

FastCGI特点:

  • FastCGI是HTTP服务器和动态脚本语言间通信的接口或者工具。
  • FastCGI优点是把动态语言解析和HTTP服务器分离开来。
  • Nginx、Apache、Lighttpd以及多数动态语言都支持FastCGI。
  • FastCGI接口方式采用C/S架构,分为客户端(HTTP服务器)和服务端(动态语言解析服务器)。
  • PHP动态语言服务端可以启动多个FastCGI的守护进程。
  • HTTP服务器通过FastCGI客户端和动态语言FastCGI服务端通信。

2.2为什么会有FastCGI

FastCGI是一个可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口(FastCGI接口在Linux下是socket(可以是文件socket,也可以是ip socket)),主要优点是把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FastCGI,包括Apache、Nginx和lightpd。

CGI协议虽然解决了语言解析器和 Web Server 之间通讯的问题,但是它的效率很低,因为 Web Server每收到一个请求都会创建一个CGl进程,PHP解析器都会解析php.ini文件,初始化环境,请求结束的时候再关闭进程,对于每一个创建的CG进程都会执行这些操作,所以效率很低,而FastCGI是用来提高CGI性能的,FastCG!每次处理完请求之后不会关闭掉进程,而是保留这个进程,使这个进程可以处理多个请求。这样的话每个请求都不用再重新创建一个进程了,大大提升了处理效率。

CGI相当于兼职,一次性的过河拆桥式的服务;FASTCGI相当于专职,全周期的持续式的服务 

  • Nginx不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。
  • FastCGI接口在Linux下是socket(可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper,这个wrapper绑定在某个固定socket上,如端口或者文件socket。
  • 当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。
名称在Web服务器方面在对数据进行处理的进程方面
CGIfork一个新的进程进行处理读取参数,处理数据,然后就结束生命周期
FASTCGI用tcp方式跟远程机子的进程或本地进程建立连接要开启tcp端口,进入循环,等待数据的到来,处理数据

3.PHP

3.1什么是PHP-FPM

PHP官网:http://www.php.net/

PHP-FPM(FastCGl Process Manager:FastCG!进程管理器)是一个实现了Fastcgi的程序,并且提供进程管理的功能。进程包括master进程和worker进程。master进程只有一个,负责监听端口,接受来自web server的请求。worker进程一般会有多个,每个进程中会嵌入一个PHP解析器,进行PHP代码的处理。
PHP(Hypertext Preprocessor 超文本预处理器)是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用
Rasmus Lerdor于1994年开始开发PHP,最初是一组被Rasmus Lerdor称作“PersonalHome Page Too”的Per)脚本,可以用于显示作者的简历并记录用户对其网站的访问。后来,RasmusLerdorf使用C语言将这些Perl脚本重写为CG!程序,还为其增加了运行Web forms的能力以及与数据库交互的特性,并将其重命名为“Personal Home Page/Forms Interpreter”或“PHP/EI”。此时,PHP/F!已经可以用于开comp.infosystems.www.authoring.cgi Usenet讨论组,从此PHP开始走进人们的视野。1997年,其2.0版本发布

1997年,两名以色列程序员Zeev Suraski和Andi Gutmans重写的PHP的分析器(parser)成为PHP发展到3.0的基础,而且从此将PHP重命名为PHP: Hypertext Preprocessor。此后,这两名程序员开始重写整个PHP核心,并于1999年发布了Zend Engine 1.0,这也意味着PHP 4.0的诞生,2004年7月,Zend Engine2.0发布,由此也将PHP带入了PHP5时代。PHP5包含了许多重要的新特性,如增强的面向对象编程的支持、支持PDO(PHP Data Obiects)扩展机制以及一系列对PHP性能的改进

Zend Engine是开源的、PHP脚本语言的解释器,它最早是由以色列理工学院(Technion)的学生Andi Gutmans和Zeev suraski所开发,Zend也正是此二人名字的合称。后来两人联合创立了Zend Technologies公司

Zend Engine 1.0于1999年随PHP4发布,由C语言开发且经过高度优化,并能够做为PHP的后端模块使用。Zend Engine为PHP提供了内存和资源管理的功能以及其它的一些标准服务,其高性能、可靠性和可扩展性在促进PHP成为一种流行的语言方面发挥了重要作用

Zend Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP代码并将其转换为称作Zend opcode的二进制格式opcode(类似Java的字节码),并将其存储于内存中;第二阶段是使用Zend Engine去执行这些转换后的Opcode  

3.2PHP配置

php的配置文件:/etc/php.ini,/etc/php.d/*.ini

配置文件在php解释器启动时被读取

3.1.1对配置文件的修改生效方法
  • Modules:重启httpd服务
  • FastCGI:重启php-fpm服务
3.1.2/etc/php.ini配置文件格式
[foo]:Section Header
directive = value
3.1.3注释符:
  • 以#开头,纯粹的注释信息
  • 以;开头,用于注释可启用的directive

提示:较新的版本中,已经完全使用“ ; ” 进行注释

3.1.4php.ini配置参考文档
  • php.ini的核心配置选项文档:http://php.net/manual/zh/ini.core.php
  • php.ini配置选项列表:http://php.net/manual/zh/ini.list.php
3.1.5php常见设置
expose_php = On
#响应报文显示首部字段x-poered-by:PHP/x.y.z,暴露php版本,建议为off

max_execution_time = 30
#最长执行时间为30s

memory_limit=128M
#可调大

display_errors=off
#调试使用,不要打开,否则可能暴露重要信息

display_startup_errors=off
#建议关闭

post_max_size=8M
#最大上传数据大小,可能调大,比下面的项大

upload_max_filesize=2M
#最大上传文件,可能调大

max_file_uploads = 20
#同时上传最多文件数

date.timezone = Asia/Shanghai
#指定时区

short_open_tag=on
#开启短标签,如:<? phpinfo();?>

二、搭建LNMP架构

1.编译安装Nginx

需要实现准备nginx-1.22.0.tar.gz压缩包

[root@localhost ~]#cd /opt
[root@localhost opt]#ls
Discuz_X3.4_SC_UTF8.zip    nginx-1.22.0.tar.gz
mysql-boost-5.7.20.tar.gz  php-7.1.10.tar.bz2
[root@localhost opt]#tar xf nginx-1.22.0.tar.gz 
[root@localhost opt]#cd nginx-1.22.0/
[root@localhost nginx-1.22.0]#yum -y install pcre-devel zlib-devel gcc gcc-c++ make
#安装依赖包
[root@localhost nginx-1.22.0]#useradd -M -s /sbin/nologin nginx
#(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
[root@localhost nginx-1.22.0]#./configure \
> --prefix=/usr/local/nginx \
#指定nginx的安装路径
> --user=nginx \
#指定用户名
> --group=nginx \
#指定组名
> --with-http_stub_status_module
#启用http_stub_status_module 模块以支持状态统计
[root@localhost nginx-1.22.0]#make -j2
[root@localhost nginx-1.22.0]#make install
[root@localhost nginx-1.22.0]#ln -s /usr/local/nginx/sbin/nginx /usr/bin
#让系统识别nginx的操作命令可以自动补全   nginx     $PATH
[root@localhost nginx-1.22.0]#tee /lib/systemd/system/nginx.service   <<eof
> [Unit]
> Description=nginx
> After=network.target
> [Service]
> Type=forking
> PIDFile=/usr/local/nginx/logs/nginx.pid
> ExecStart=/usr/local/nginx/sbin/nginx
> ExecReload=/bin/kill -1 $MAINPID
> ExecStop=/bin/kill -3 $MAINPID
> PrivateTmp=true
> [Install]
> WantedBy=multi-user.target
> eof
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -1 
ExecStop=/bin/kill -3 
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@localhost nginx-1.22.0]#systemctl daemon-reload
[root@localhost nginx-1.22.0]#systemctl enable --now nginx.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@localhost nginx-1.22.0]#systemctl status nginx

2.编译安装Mysql

需要事先准备mysql-boost-5.7.20.tar.gz压缩包

#安装Mysql环境依赖包
[root@localhost nginx-1.22.0]#yum -y install \
> ncurses \
> ncurses-devel \
> bison \
> cmake


[root@localhost nginx-1.22.0]#yum -y install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel   ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel

#创建运行用户
[root@localhost nginx-1.22.0]#useradd -M -s /sbin/nologin  mysql

#编译安装
[root@localhost nginx-1.22.0]#cd /opt
[root@localhost opt]#ls
Discuz_X3.4_SC_UTF8.zip    nginx-1.22.0         php-7.1.10.tar.bz2
mysql-boost-5.7.20.tar.gz  nginx-1.22.0.tar.gz
[root@localhost opt]#tar xf mysql-boost-5.7.20.tar.gz 
[root@localhost opt]#cd mysql-5.7.20/
[root@localhost mysql-5.7.20]#ls
boost            Doxyfile-perfschema  mysql-test  storage
BUILD            extra                mysys       strings
client           include              mysys_ssl   support-files
cmake            INSTALL              packaging   testclients
CMakeLists.txt   libbinlogevents      plugin      unittest
cmd-line-utils   libbinlogstandalone  rapid       VERSION
config.h.cmake   libevent             README      vio
configure.cmake  libmysql             regex       win
COPYING          libmysqld            scripts     zlib
dbug             libservices          sql
Docs             man                  sql-common
[root@localhost mysql-5.7.20]#cmake \
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
> -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
> -DSYSCONFDIR=/etc \
> -DSYSTEMD_PID_DIR=/usr/local/mysql \
> -DDEFAULT_CHARSET=utf8  \
> -DDEFAULT_COLLATION=utf8_general_ci \
> -DWITH_EXTRA_CHARSETS=all \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \
> -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
> -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
> -DMYSQL_DATADIR=/usr/local/mysql/data \
> -DWITH_BOOST=boost \
> -DWITH_SYSTEMD=1
[root@localhost mysql-5.7.20]#make -j2
[root@localhost mysql-5.7.20]#make install
[root@localhost mysql-5.7.20]#ls /usr/local/mysql/
bin      COPYING-test  include  man         README       share          usr
COPYING  docs          lib      mysql-test  README-test  support-files


#修改mysql 配置文件

[root@localhost mysql-5.7.20]#vim /etc/my.cnf


[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
 
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES



#更改mysql安装目录和配置文件的属主属组
[root@localhost mysql-5.7.20]#chown -R mysql:mysql /usr/local/mysql/
[root@localhost mysql-5.7.20]#chown mysql:mysql /etc/my.cnf


#设置路径环境变量
[root@localhost mysql-5.7.20]#echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
[root@localhost mysql-5.7.20]#source /etc/profile
[root@localhost mysql-5.7.20]#echo $PATH
/usr/local/mysql/bin:/usr/local/mysql/lib:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin


#初始化数据库
[root@localhost mysql-5.7.20]#cd /usr/local/mysql/bin/
[root@localhost bin]#ls
innochecksum                mysql_config               mysqlslap
lz4_decompress              mysql_config_editor        mysql_ssl_rsa_setup
myisamchk                   mysqld                     mysqltest
myisam_ftdump               mysqld_pre_systemd         mysqltest_embedded
myisamlog                   mysqldump                  mysql_tzinfo_to_sql
myisampack                  mysqldumpslow              mysql_upgrade
my_print_defaults           mysql_embedded             mysqlxtest
mysql                       mysqlimport                perror
mysqladmin                  mysql_install_db           replace
mysqlbinlog                 mysql_plugin               resolveip
mysqlcheck                  mysqlpump                  resolve_stack_dump
mysql_client_test           mysql_secure_installation  zlib_decompress
mysql_client_test_embedded  mysqlshow
[root@localhost bin]#./mysqld \
> --initialize-insecure \
> --user=mysql \
> --basedir=/usr/local/mysql \
> --datadir=/usr/local/mysql/data
> --datadir=/usr/local/mysql/data
[root@localhost bin]#cd ..
[root@localhost mysql]#ls
bin      COPYING-test  docs     lib  mysql-test  README-test  support-files
COPYING  data          include  man  README      share        usr


#添加mysqld系统服务
[root@localhost mysql]#cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
[root@localhost mysql]#systemctl daemon-reload
[root@localhost mysql]#systemctl start mysqld.service
[root@localhost mysql]#systemctl enable mysqld
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
[root@localhost mysql]#systemctl status mysqld.service 


#修改mysql 的登录密码
[root@localhost mysql]#mysqladmin -u root -p password "abc123"
Enter password: 
#给root账号设置密码为abc123,提示输入的是原始密码(为空)要求输入的是原密码直接回车即
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

3.编译安装php

事先要准备好php-7.1.10.tar.bz2 压缩包

[root@localhost mysql]#cd /opt
[root@localhost opt]#ls
Discuz_X3.4_SC_UTF8.zip  mysql-boost-5.7.20.tar.gz  nginx-1.22.0.tar.gz
mysql-5.7.20             nginx-1.22.0               php-7.1.10.tar.bz2
[root@localhost opt]#tar xf php-7.1.10.tar.bz2 
[root@localhost opt]#cd php-7.1.10/


#安装环境依赖包
[root@localhost php-7.1.10]#yum -y install gd \
> libjpeg libjpeg-devel \
> libpng libpng-devel \
> freetype freetype-devel \
> libxml2 libxml2-devel \
> zlib zlib-devel \
> curl curl-devel \
> openssl openssl-devel


#编译安装
[root@localhost php-7.1.10]#./configure \
> --prefix=/usr/local/php \
> --with-mysql-sock=/usr/local/mysql/mysql.sock \
> --with-mysqli \
> --with-zlib \
> --with-curl \
> --with-gd \
> --with-jpeg-dir \
> --with-png-dir \
> --with-freetype-dir \
> --with-openssl \
> --enable-fpm \
> --enable-mbstring \
> --enable-xml \
> --enable-session \
> --enable-ftp \
> --enable-pdo \
> --enable-tokenizer \
> --enable-zip
[root@localhost php-7.1.10]#make -j2
[root@localhost php-7.1.10]#make install
[root@localhost php-7.1.10]#ls php.ini-development 
php.ini-development


#调整主配置文件
[root@localhost php-7.1.10]#cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini
[root@localhost php-7.1.10]#vim /usr/local/php/lib/php.ini 

[root@localhost php-7.1.10]#cd /usr/local/php/
[root@localhost php]#ls
bin  etc  include  lib  php  sbin  var
[root@localhost php]#cd etc/
[root@localhost etc]#ls
pear.conf  php-fpm.conf.default  php-fpm.d

#调整进程服务配置文件
[root@localhost etc]#cp  php-fpm.conf.default php-fpm.conf
[root@localhost etc]#ls
pear.conf  php-fpm.conf  php-fpm.conf.default  php-fpm.d
[root@localhost etc]#vim php-fpm.conf

#调整扩展配置文件
[root@localhost etc]#cd php-fpm.d/
[root@localhost php-fpm.d]#ls
www.conf.default
[root@localhost php-fpm.d]#cp www.conf.default www.conf
[root@localhost php-fpm.d]#ln -s /usr/local/php/bin/* /usr/local/bin/
[root@localhost php-fpm.d]#ln -s /usr/local/php/sbin/* /usr/local/sbin/
#路径优化
[root@localhost fpm]#cp /opt/php-7.1.10/sapi/fpm/php-fpm.service /usr/lib/systemd/system/
[root@localhost php-fpm.d]#cd /opt/php-7.1.10/sapi/
[root@localhost sapi]#ls
apache2handler  cgi  cli  embed  fpm  litespeed  phpdbg  tests
[root@localhost sapi]#cd fpm/
[root@localhost fpm]#systemctl daemon-reload 
[root@localhost fpm]#systemctl start php-fpm.service
[root@localhost fpm]#systemctl status php-fpm.service
● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled)
   Active: active (running) since 三 2024-02-28 13:03:35 CST; 5s ago
 Main PID: 34991 (php-fpm)
   CGroup: /system.slice/php-fpm.service
           ├─34991 php-fpm: master process (/usr/local/php/etc/php-fpm.conf...
           ├─34993 php-fpm: pool www
           └─34994 php-fpm: pool www

2月 28 13:03:35 localhost.localdomain systemd[1]: Started The PHP FastCGI ...
2月 28 13:03:35 localhost.localdomain systemd[1]: Starting The PHP FastCGI...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost fpm]#ss -natp|grep 9000
LISTEN     0      128    127.0.0.1:9000                     *:*                   users:(("php-fpm",pid=34994,fd=0),("php-fpm",pid=34993,fd=0),("php-fpm",pid=34991,fd=6))
#PHP-FPM(FastCGI Process Manager:FastCGI 进程管理器)是一个 PHPFastCGI 管理器, 由于Nginx服务器不能处理动态页面,需要由 Nginx 把动态请求交给 php-fpm 进程进行解析

4.修改Nginx配置

[root@localhost fpm]#vim /usr/local/nginx/conf/nginx.conf

[root@localhost fpm]#cd /usr/local/nginx/
[root@localhost nginx]#ls
client_body_temp  fastcgi_temp  logs        sbin       uwsgi_temp
conf              html          proxy_temp  scgi_temp
[root@localhost nginx]#nginx -s reload
[root@localhost html]#vim /usr/local/nginx/conf/nginx.conf
[root@localhost nginx]#nginx -s reload

[root@localhost html]#ls
50x.html  index.html
[root@localhost html]#vim index.php

使用浏览器去访问该主机的php页面,出现下面的页面服务

[root@localhost html]#mysql -uroot -pabc123
#验证数据库是否正常
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.20 Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database bbs;
#创建一个数据库文件
Query OK, 1 row affected (0.01 sec)

mysql> GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';
#授权 +  新建文件
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';
#授权 +  新建文件
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> flush privileges;
#刷新数据库
Query OK, 0 rows affected (0.00 sec)
mysql> ^DBye
[root@localhost html]#vim /usr/local/nginx/html/index.php


<?php
$link=mysqli_connect('192.168.241.11','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>

使用浏览器再次访问php页面服务

5.安装论坛

事先需要有Discuz_X3.4_SC_UTF8.zip压缩包

[root@localhost html]#cd /opt
[root@localhost opt]#ls
Discuz_X3.4_SC_UTF8.zip    nginx-1.22.0         php-7.1.10.tar.bz2
mysql-5.7.20               nginx-1.22.0.tar.gz
mysql-boost-5.7.20.tar.gz  php-7.1.10
[root@localhost opt]#unzip Discuz_X3.4_SC_UTF8.zip
[root@localhost opt]#cd dir_SC_UTF8/
[root@localhost dir_SC_UTF8]#cp -r upload/   /usr/local/nginx/html/bbs/
[root@localhost dir_SC_UTF8]#cd /usr/local/nginx/html/bbs/
[root@localhost bbs]#ls
admin.php  connect.php      group.php  member.php  search.php  uc_server
api        crossdomain.xml  home.php   misc.php    source
api.php    data             index.php  plugin.php  static
archiver   favicon.ico      install    portal.php  template
config     forum.php        m          robots.txt  uc_client

[root@localhost bbs]#chmod -R 777 ./config/
[root@localhost bbs]#chmod -R 777 ./data/
[root@localhost bbs]#chmod -R 777 ./uc_client/
[root@localhost bbs]#chmod -R 777 ./uc_server/
[root@localhost bbs]#ll
总用量 68
-rw-r--r--  1 root  root  2748 2月  28 13:20 admin.php
drwxr-xr-x 10 root  root   149 2月  28 13:20 api
-rw-r--r--  1 root  root   727 2月  28 13:20 api.php
drwxr-xr-x  2 root  root    23 2月  28 13:20 archiver
drwxrwxrwx  2 nginx nginx   90 2月  28 13:20 config
-rw-r--r--  1 root  root  1017 2月  28 13:20 connect.php
-rw-r--r--  1 root  root   106 2月  28 13:20 crossdomain.xml
drwxrwxrwx 12 nginx nginx  202 2月  28 13:20 data
-rw-r--r--  1 root  root  5558 2月  28 13:20 favicon.ico
-rw-r--r--  1 root  root  2245 2月  28 13:20 forum.php
-rw-r--r--  1 root  root   821 2月  28 13:20 group.php
-rw-r--r--  1 root  root  1280 2月  28 13:20 home.php
-rw-r--r--  1 root  root  5885 2月  28 13:20 index.php
drwxr-xr-x  5 root  root    64 2月  28 13:20 install
drwxr-xr-x  2 root  root    23 2月  28 13:20 m
-rw-r--r--  1 root  root  1025 2月  28 13:20 member.php
-rw-r--r--  1 root  root  2435 2月  28 13:20 misc.php
-rw-r--r--  1 root  root  1788 2月  28 13:20 plugin.php
-rw-r--r--  1 root  root   977 2月  28 13:20 portal.php
-rw-r--r--  1 root  root   582 2月  28 13:20 robots.txt
-rw-r--r--  1 root  root  1155 2月  28 13:20 search.php
drwxr-xr-x 10 root  root   168 2月  28 13:20 source
drwxr-xr-x  7 root  root    86 2月  28 13:20 static
drwxr-xr-x  3 root  root    38 2月  28 13:20 template
drwxrwxrwx  7 nginx nginx  106 2月  28 13:20 uc_client
drwxrwxrwx 14 nginx nginx  256 2月  28 13:20 uc_server

目前论坛就搭好了,可以去测试一下

本地架设就用localhost,如何不是在在本机上就要填写IP地址和端口号 

然后可以看到我们搭建好的论坛的页面

目前是以新建的王一博用户进行登录;如果我们切换到管理员用户

6.搭建博客

事先我们要准备好wordpress-6.1.1-zh_CN.zip

[root@localhost bbs]#cd /opt
[root@localhost opt]#ls
dir_SC_UTF8              mysql-boost-5.7.20.tar.gz  php-7.1.10
Discuz_X3.4_SC_UTF8.zip  nginx-1.22.0               php-7.1.10.tar.bz2
mysql-5.7.20             nginx-1.22.0.tar.gz        说明.htm
[root@localhost opt]#rz -E
rz waiting to receive.
[root@localhost opt]#ls
dir_SC_UTF8                nginx-1.22.0         wordpress-6.1.1-zh_CN.zip
Discuz_X3.4_SC_UTF8.zip    nginx-1.22.0.tar.gz  说明.htm
mysql-5.7.20               php-7.1.10
mysql-boost-5.7.20.tar.gz  php-7.1.10.tar.bz2
[root@localhost opt]#unzip wordpress-6.1.1-zh_CN.zip
[root@localhost opt]#ls
dir_SC_UTF8                nginx-1.22.0         wordpress
Discuz_X3.4_SC_UTF8.zip    nginx-1.22.0.tar.gz  wordpress-6.1.1-zh_CN.zip
mysql-5.7.20               php-7.1.10           说明.htm
mysql-boost-5.7.20.tar.gz  php-7.1.10.tar.bz2
[root@localhost opt]#cp -r wordpress/   /usr/local/nginx/html/
[root@localhost opt]#cd /usr/local/nginx/html/
[root@localhost html]#ls
50x.html  bbs  index.html  index.php  wordpress
[root@localhost html]#chmod 777 wordpress/ -R
[root@localhost html]#ll
总用量 20
-rw-r--r--  1 root root  497 2月  28 11:36 50x.html
drwxr-xr-x 13 root root 4096 2月  28 13:20 bbs
-rw-r--r--  1 root root  615 2月  28 11:36 index.html
-rw-r--r--  1 root root  127 2月  28 13:15 index.php
drwxrwxrwx  5 root root 4096 2月  28 13:44 wordpress

[root@localhost html]#mysql -uroot -pabc123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 69
Server version: 5.7.20 Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE blog;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT all ON blog.* TO 'bloguser'@'%' IDENTIFIED BY 'admin123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> GRANT all ON blog.* TO 'bloguser'@'localhost' IDENTIFIED BY 'admin123'; 
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> ^DBye

现在我们就可以在自己搭建的博客上面写博客了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/426974.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux取经路】文件系统——inode与软硬链接

文章目录 一、前言二、认识硬件——磁盘2.1 磁盘的存储构成2.2 磁盘的逻辑抽象 三、操作系统对磁盘的使用3.1 再来理解创建文件3.2 再来理解删除文件3.3 再来理解目录 四、硬链接五、软链接六、结语 一、前言 在之前的【Linux取经路】文件系统之被打开的文件——文件描述符的引…

自动驾驶加速落地,激光雷达放量可期(上)

1 激光雷达应用广泛&#xff0c;汽车有望成最大催化 激光雷达&#xff08;LiDAR&#xff09;是一种主动遥感技术&#xff0c;通过测定传感器发出的激光在传感器与目标物体之间的传播距离&#xff0c;来分析目标地物表面的反射能量大小、反射波谱的幅度、频率和相位等信息&#…

python基础使用之记录日志模块

我们在编写Python 程序时&#xff0c;记录日志信息是一种非常重要的需求&#xff0c;日志可以帮助调试和跟踪程序的执行过程。那么Python中提供了内置的logging模块&#xff0c;用于记录各种级别的日志信息。本文主要介绍Python日志信息输出的实现过程。 1. 导入 logging 模块…

C++入门全集(4):类与对象【下】

一、再谈构造函数 1.1 构造函数体内赋值 我们知道&#xff0c;在创建对象时&#xff0c;编译器会自动调用构造函数给对象中的各个成员变量一个合适的初始值 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;}private:int _yea…

开源项目:智能化图像分类技术在新能源发电监控中的应用与实践

一、引言 在当今世界&#xff0c;能源的转型和升级是推动社会可持续发展的关键因素。随着技术的进步&#xff0c;新能源发电逐渐成为能源结构调整的重要力量。在众多发电方式中&#xff0c;新能源发电技术如风力、太阳能等因其清洁、可再生的特性而备受青睐。然而&#xff0c;…

百度文库旋转验证码识别

最近研究了一下图像识别&#xff0c;一直找到很好的应用场景&#xff0c;今天我就发现可以用百度的旋转验证码来做一个实验。没想到效果还挺好&#xff0c;下面就是实际的识别效果。 1、效果演示 2、如何识别 2.1准备数据集 首先需要使用爬虫&#xff0c;对验证码图片进行采…

MATLAB中sigmoid函数用法

目录 语法 说明 示例 应用 sigmoid 激活 sigmoid函数的功能是应用sigmoid激活 语法 Y sigmoid(X) 说明 sigmoid 激活运算将 sigmoid 函数应用于输入数据。此运算等效于&#xff1a; 注意 此函数将 sigmoid 运算应用于 dlarray 数据。如果要在 layerGraph 对象或 Layer …

Git 版本控制

Git 版本控制 1. About Version Control (关于版本控制)1.1. Local Version Control Systems (本地版本控制系统)1.2. Centralized Version Control Systems (集中化的版本控制系统)1.3. Distributed Version Control Systems (分布式版本控制系统) 2. 换行符的处理3. keyboard…

深入理解Docker自定义网络:构建高效的容器网络环境

目录 博客前言: 一.docker自定义网络介绍 1.docker自定义网络介绍 2.使用技术的优势 3.基本使用流程 二.实战操作 1.模式理论介绍 bridge模式(默认模式) host模式 2.模式特点 查看桥接模式的特点 查看仅主机模式的特点 3.实战操作 bridge模式 host模式 自定义网络…

Android Compose - PlainTooltipBox(已废弃)的替代方案

Android Compose - PlainTooltipBox 的替代方案 TooltipBox(positionProvider TooltipDefaults.rememberPlainTooltipPositionProvider(),tooltip {PlainTooltip {Text(/* tooltip content */)}},state rememberTooltipState(), ) {// tooltip anchorIconButton(onClick {…

EdgeX Foundry - MQTT 设备服务

文章目录 一、MQTT 设备服务1.概述2.服务配置3.协议属性4.多级 Topics4.1.异步数据4.2.命令 二、连接 MQTT 设备1.docker-comepse2.设备配置文件3.安装自定义配置4.启动 EdgeX Foundry5.创建 MQTT 设备模拟器6.访问 UI6.1. consul6.2. EdgeX Console 7.测试7.1.命令7.2.事件7.3…

【踏雪无痕的痕五】——一年级数学题映射动态规划

目录 一、背景介绍三、过程1.那是什么样的一个数学题&#xff1f;2.动态规划是个啥&#xff1f;3.为啥联系到动态规划了&#xff1f;4.拿01背包算法做个小例子练练手吧5.感受 四、总结 一、背景介绍 小编发烧并发症一周了&#xff0c;这一周从最开始的轻飘飘找不到灵魂在哪里—…

【心理】程序人生之情绪与压力篇,附心理学相关证书备考指南(心理学312统考,心理治疗师,中科院心理咨询师,家庭教育指导师,企业培训证书)

程序员生活指南&#xff08;情绪与压力篇&#xff09;之 【心理】程序人生之情绪与压力专项&#xff0c;附心理学相关证书备考指南&#xff08;心理学312统考&#xff0c;心理治疗师&#xff0c;中科院心理咨询师&#xff0c;家庭教育指导师&#xff0c;企业培训证书&#xff0…

Linux之进程信号

目录 一、概念引入 1、生活中的信号 2、Linux中的信号 二、信号处理常见方式 三、信号的产生 1、键盘产生信号 2、系统调用接口产生信号 3、软件条件产生信号 4、硬件异常产生信号 四、信号的保存 相关概念 信号保存——三个数据结构 信号集——sigset_t 信号集操…

程序员如何选择职业赛道?

程序员选择职业赛道就像是在一个充满挑战和机遇的迷宫中探索。不同的职业赛道代表着不同的路径&#xff0c;每条路径都有其独特的风景和挑战。我愿意为大家提供一些关于如何选择职业赛道的建议。本文将分为几个部分&#xff0c;包括了解自己、了解行业、职业规划、技能提升和持…

单片机独立按键控制LED状态

一、前言 这幅图是按键的抖动与时间的联系 按键抖动&#xff1a;对于机械开关&#xff0c;当机械鮑点断开、闭合时&#xff0c;由于机械触点的弹性作用&#xff0c;一个开关在闭合时不会马上稳定地接通&#xff0c;在断开时也不会一下子断开&#xff0c;所以在开关闭合及断开的…

加密与安全_探索数字证书

文章目录 Pre概述使用keytool生成证书使用Openssl生成证书 &#xff08;推荐&#xff09;证书的吊销小结 Pre PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证 PKI - 04 证书授权颁发机构&#xff08;CA&#xff09; & 数字证书 PKI - 数字签名与数字证…

matplotlib散点图

matplotlib散点图 假设通过爬虫你获取到了北京2016年3, 10月份每天白天的最高气温(分别位于列表a, b), 那么此时如何寻找出气温和随时间(天)变化的某种规律? from matplotlib import pyplot as pltx_3 range(1, 32) x_10 range(51, 82)y_3 [11,17,16,11,12,11,12,6,6,7,8…

GEE:使用双曲正切(tanh)激活函数对单波段图像进行变换(以NDVI为例)

作者:CSDN @ _养乐多_ 本文将介绍在 Google Earth Engine (GEE)平台上,对任意单波段影像进行 双曲正切(tanh)激活函数 变换的代码。并以对 NDVI 影像中像素值的变换为例。 文章目录 一、tanh激活函数1.1 tanh激活函数1.2 用到遥感图像上有什么用?二、代码链接三、完整代…

STL——queue

queue 1. 队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其中从容器一端插入元素&#xff0c;另一端提取元素。 2. 队列作为容器适配器实现&#xff0c;容器适配器即将特定容器类封装作为其底层容器类&#xff0c;queue提供一组特…