首页 > 其他分享 >LNMP

LNMP

时间:2024-06-30 17:22:29浏览次数:3  
标签:-- LNMP nginx usr mysql local fastcgi

LNMP

FastCGI

CGI的由来:

最早的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服务器之间传递信息的标准化接口。

为什么会有FastCGI?

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

什么是PHP-FPM?

PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个实现了Fastcgi的程序,并且提供进程管理的功能。进程包括master进程和worker进程。master进程只有一个,负责监听端口,接受来自web server的请求。worker进程一般会有多个,每个进程中会嵌入一个PHP解析器,进行PHP代码的处理。

Nginx基于模块ngx_http_fastcgi_module实现通过fastcgi协议将指定的客户端请求转发至php-fpm处理,其配置指令如下:

fastcgi_pass address:port;
#转发请求到后端服务器,address为后端的fastcgi server的地址,可用位置:location, if in location

fastcgi_index name;
#fastcgi默认的主页资源,示例:fastcgi_index index.php;


fastcgi_param parameter value [if_not_empty];
#设置传递给FastCGI服务器的参数值,可以是文本,变量或组合,可用于将Nginx的内置变量赋值给自定义key

fastcgi_param REMOTE_ADDR        $remote_addr; #客户端源IP
fastcgi_param REMOTE_PORT        $remote_port; #客户端源端口
fastcgi_param SERVER_ADDR        $server_addr; #请求的服务器IP地址
fastcgi_param SERVER_PORT        $server_port; #请求的服务器端口
fastcgi_param SERVER_NAME        $server_name; #请求的server name


Nginx默认配置示例:
   location ~ \.php$ {
     root           /scripts;
     fastcgi_pass   127.0.0.1:9000;
     fastcgi_index index.php;
     fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #默认脚本路径,去后端服务器的哪个目录下找php程序
      #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     include       fastcgi_params;
   }

搭建nginx

安装环境

yum -y install pcre-devel zlib-devel gcc gcc-c++ make

创建运行用户、组

 useradd -M -s /sbin/nologin nginx

编译安装

cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/


cd nginx-1.22.0/
./configure \
--prefix=/usr/local/nginx \				            #指定nginx的安装路径
--user=nginx \										#指定用户名
--group=nginx \										#指定组名
--with-http_stub_status_module						#启用 http_stub_status_module 模块以支持状态统计

cd nginx-1.22.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/		
#让系统识别nginx的操作命令可以自动补全   nginx     $PATH

添加Nginx系统服务   systemctl  start   nginx
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


systemctl   daemon-relaod
chmod 777 /lib/systemd/system/nginx.service

systemctl enable --now nginx.service

搭建MySQL

新建mysql用户

useradd mysql -s /sbin/nologin 

安装环境

yum -y install \  
ncurses \              #字符终端下图形互动功能的动态库
ncurses-devel \        #ncurses开发包
bison \                #语法分析器
cmake                  #mysql需要用到的cmake编译安装包

解压软件包并切换到编译目录,并编译安装

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_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


##注释
####配置选项含义###
1、DCMAKE_INSTALL_PREFIX:指定将 mysql 数据库程序安装到某目录下,
如目录/usr/local/ mysql。
2、DMYSQL_UNIX_ADDR:指定套接字文件的存储路径,数据库连接的文件
3、DSYSCONFDIR:指定初始化参数文件目录
3、DDEFAULT_CHARSET:指定默认使用的字符集编码,如 utf8。
5、DDEFAULT_COLLATION:指定默认使用的字符集校对规则,utf8_general_ci 是适用于 UTF-8 字符集的通用规则。
6、DWITH_INNOBASE_STORAGE_ENGINE=1 :安装INNOBASE存储引擎
7、DWITH_ARCHIVE_STORAGE_ENGINE=1 :安装ARCHIVE存储引擎 
8、DWITH_BLACKHOLE_STORAGE_ENGINE=1 :安装BLACKHOLE存储引擎 
9、DWITH_PERFSCHEMA_STORAGE_ENGINE :安装FEDERATED存储引擎 

指定安装文件的安装路径时常用的选项:

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql         指定安装路径 
-DMYSQL_DATADIR=/data/mysql                     数据安装路径 
-DSYSCONFDIR=/etc                               配置文件的安装路径

由于MySQL支持很多的存储引擎而默认编译的存储引擎包括:csv、myisam、myisammrg和heap。若要安装其它存储引擎,可以使用类似如下编译选项:

-DWITH_INNOBASE_STORAGE_ENGINE=1          安装INNOBASE存储引擎 
-DWITH_ARCHIVE_STORAGE_ENGINE=1           安装ARCHIVE存储引擎 
-DWITH_BLACKHOLE_STORAGE_ENGINE=1         安装BLACKHOLE存储引擎 
-DWITH_FEDERATED_STORAGE_ENGINE=1         安装FEDERATED存储引擎 


若要明确指定不编译某存储引擎,可以使用类似如下的选项:

-DWITHOUT_<ENGINE>_STORAGE_ENGINE=1 

比如:

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1        不启用或不编译EXAMPLE存储引擎 
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1 
 -DWITHOUT_PARTITION_STORAGE_ENGINE=1

如若要编译进其它功能,如SSL等,则可使用类似如下选项来实现编译时使用某库或不使用某库:

-DWITH_READLINE=1 
 -DWITH_SSL=system           表示使用系统上的自带的SSL库 
-DWITH_ZLIB=system 
 -DWITH_LIBWRAP=0

其它常用的选项:

-DMYSQL_TCP_PORT=3306                       设置默认端口的 
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock           MySQL进程间通信的套接字的位置 
-DENABLED_LOCAL_INFILE=1                    是否启动本地的LOCAL_INFILE 
 -DEXTRA_CHARSETS=all                       支持哪些额外的字符集 
-DDEFAULT_CHARSET=utf8                      默认字符集 
-DDEFAULT_COLLATION=utf8_general_ci         默认的字符集排序规则 
-DWITH_DEBUG=0                              是否启动DEBUG功能 
-DENABLE_PROFILING=1                        是否启用性能分析功能

##################################################################################################

------注意:如果在CMAKE的过程中有报错---
        当报错解决后,需要把源码目录中的CMakeCache.txt文件删除,然后再重新CMAKE,否则错误依旧
------注意:make: *** No targets specified and no makefile found. Stop.解决方法
        1、wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz
        2.、tar zxvf ncurses-5.6.tar.gz
        3、 ./configure -prefix=/usr/local -with-shared-without-debug
        4、make
        5、make install

###############################################################################################

编译安装

make -j4 && make install

数据库目录进行权限调整

chown -R mysql:mysql /usr/local/mysql/

配置文件

vim /etc/my.cnf

[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysql]
port = 3306
default-character-set=utf8
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
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

修改配置文件权限

chown mysql:mysql /etc/my.cnf

设置环境变量

echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile

初始化 数据库

cd /usr/local/mysql/

bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

准备systemctl 配置文件

cp /usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl enable --now mysqld
systemctl status mysqld

修改数据库密码

mysqladmin -u root -p password "abc123"  ##刚开始没密码是空的直接回车

登录数据库

mysql -u root -p     ##这个命令敲下,提示要输入密码,这个就是刚才设置的密码abc123

新建数据库

mysql  -uroot   -pabc123
mysql> CREATE DATABASE bbs;  ##创建一个数据库

mysql> GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';   ##把bbs数据库里面所有表的权限授予给bbsuser,并设置密码


mysql>flush privileges; ##刷新数据库##

搭建php

安装依赖包

##安装GD库和GD库关联程序,用来处理和生成图片
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

解压php安装包并进入文件夹中编译安装

./configure \
--prefix=/usr/local/php7 \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-config-file-path=/usr/local/php7 \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip


##注释
./configure \
--prefix=/usr/local/php7 \							指定将 PHP 程序的安装路径
--with-apxs2=/usr/local/httpd/bin/apxs \			指定Apache httpd服务提供的apxs 模块支持程序的文件位置
--with-mysql-sock=/usr/local/mysql/mysql.sock \		指定mysql 数据库连接文件的存储路径
--with-config-file-path=/usr/local/php7				设置 PHP 的配置文件 php.ini 将要存放的位置
--with-mysqli \										添加 MySQL 扩展支持 #mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,而且还可以使访问数据库工作变得更加稳定
--with-zlib \										支持zlib功能,提供数据压缩
--with-curl \										开启curl扩展功能,实现HTTP的Get下载和Post请求的方法
--with-gd \											激活gd 库的支持
--with-jpeg-dir \									激活jpeg 的支持
--with-png-dir \									激活png 的支持
--with-freetype-dir \
--with-openssl \
--enable-mbstring \									启用多字节字符串功能,以便支持中文等代码
--enable-xml \										开启扩展性标记语言模块
--enable-session \									会话
--enable-ftp \										文本传输协议
--enable-pdo \										函数库
--enable-tokenizer \								令牌解释器
--enable-zip										ZIP压缩格式

编译

make -j2 && make install

修改配置文件

cp /data/php-7.1.10/php.ini-development /usr/local/php7/php.ini	
#复制模版文件作为PHP 的主配置文件,并进行修改

vim /usr/local/php7/php.ini
mysqli.default_socket = /usr/local/mysql/mysql.sock   --1170行--修改 1170 G,大写的G,直接跳转
date.timezone = Asia/Shanghai                         --939行---修改     

建立软连接

ln -s /usr/local/php7/bin/* /usr/local/bin/

配置 Nginx 支持 PHP 解析

vim /usr/local/nginx/conf/nginx.conf
--65行--取消注释,修改
location ~ \.php$ {
	root           html;   $document_root
	fastcgi_pass   127.0.0.1:9000;
	fastcgi_index  index.php;
	fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;	#将 /scripts 修改为nginx的工作目录
   #fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;  #$document_root 代表当前请求在root指令中指定的值
	include        fastcgi_params;
}
 
systemctl restart nginx.service

验证PHP 测试页
vim /usr/local/nginx/html/index.php
<?php
phpinfo();
?>

验证lnmp的是否搭建成功:

数据库的用户名
用户名@主机名
[email protected]
[email protected]

验证数据库工作是否正常
mysql -u root -p
CREATE DATABASE bbs;
GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';
GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;

vim /usr/local/nginx/html/index.php      		#替换原来的测试页内容
<?php
$link=mysqli_connect('192.168.91.100','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>
 
浏览器访问
http://192.168.233.21/index.php

标签:--,LNMP,nginx,usr,mysql,local,fastcgi
From: https://www.cnblogs.com/GrandOB/p/18276661

相关文章

  • 搭建LNMP架构
    搭建LNMP架构1.关闭防火墙,安装依赖包,创建运行用户、组点击查看代码[root@localhost~]#systemctldisable--nowfirewalld[root@localhost~]#setenforce0[root@localhost~]#yum-yinstallpcre-develzlib-develgccgcc-c++make[root@localhost~]#usera......
  • lnmp
    一、编译安装Nginx1.前期准备#安装依赖yum-yinstallpcre-develzlib-develgccgcc-c++make#创建用户useradd-M-s/sbin/nologinnginx#获取源码包wgethttps://nginx.org/download/nginx-1.24.0.tar.gzcd/opttarxfnginx-1.24.0.tar.gz#解压2.开始编......
  • Zabbix 7.0 LTS OVF (build with LNMP based on Rocky 8.10) - VMware 虚拟机模板
    Zabbix7.0LTSOVF(buildwithLNMPbasedonRocky8.10)-VMware虚拟机模板Zabbix7.0LTS|企业级开源监控解决方案请访问原文链接:https://sysin.org/blog/zabbix-7-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgZabbix简介全方位监控获取整个IT......
  • LNMP 环境下使用 Zstd 压缩优化网站备份脚本
    网站的备份一直都是网站运营、服务器运维中很重要的一环,明月无论是在自己的服务器还是客户的代运维服务器上都是非常重视网站备份的,尤其热衷于优化网站备份这块儿,毕竟明月自己的服务器配置一直都是最低的1H1G呀,就这配置常年都是4-5个网站放着呢!明月的博客毕竟有十来年了,单......
  • LNMP网站架构部署
     目录一、LNMP架构部署(源码编译安装)①实验准备②安装nginx服务③安装mysql服务,配置文件④安装php服务,修改配置文件⑤验证静态页面测试访问动态页面测试访问调用数据库测试二、LNMP架构应用实例1.论坛网站应用①nginx服务器上传压缩包并解压 ②php服务器上修改论......
  • 在Linux中,什么是LAMP和LNMP堆栈?
    LAMP和LNMP都是用于搭建动态网站的常用软件堆栈,它们分别代表不同的组件组合,旨在提供高效、稳定的Web服务环境。下面是这两个堆栈的详细介绍:1.LAMP堆栈LAMP是一个开源软件堆栈的首字母缩写,代表Linux(操作系统)、Apache(Web服务器)、MySQL(数据库管理系统)和PHP(服务器......
  • 详细:docker手动部署lnmp以及记录遇到的问题
    一、基本思路(背景)部署时间:2024.04.25主机为deepin20.9安装好docker,从官网下载nginxphpmysql三个镜像设置并启动相应三个容器,并配置portainer二、安装docker1.如果以前安装过老版本,请先卸载以前版本sudoaptremovedockerdocker-engine2.安装docker-ce与密钥管理与下......
  • 部署LNMP环境-QQ农场
    day4.3部署LNMP环境-QQ农场1准备环境1.1准备一台新的服务器,修改主机名为qqfarm​通过命令修改:hostnamectlset-hostnameqqfa!rm​通过vim编辑hostname文件修改1.2使用远程连接工具连接服务器1.3关闭防火墙与SELinuxsystemctlstopfirewalld--nowvim/e......
  • Docker搭建LNMP环境实战(05):CentOS环境安装Docker-CE
    前面几篇文章讲了那么多似乎和Docker无关的实战操作,本篇总算开始说到Docker了。1、关于Docker1.1、什么是DockerDocker概念就是大概了解一下就可以,还是引用一下百度百科吧:Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然......
  • lnmp集群拆分
    集群拆分数据库拆分+php远程访问实践1,拆分数据库1.拆分背景,单机的各个组件,容易抢夺资源,导致服务器压力较大,拆的第一步,吧数据库拆出去测试ab命令,对网站的整体压力具体的拆分步骤1.基于以有数据的web-7开始操作导出当前数据库的数据(还得数据库锁表,防止数据写入,备份时候,......