LNMP架构的介绍和搭建

Posted limited_sky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LNMP架构的介绍和搭建相关的知识,希望对你有一定的参考价值。

关键字

Linux、nginxmysqlphp、LNMP、网络服务器

前言

我去年搭建网站服务器的时候,对网站服务器没啥具体概念,就觉得只是本地应用程序加上了网络通信,在这种前提下进行网站服务器搭建,结果其实不太理想。所以最近我又学习了LNMP架构,试着解决上一个网站服务器中存在的问题。

在我的上一个网站服务器中,服务器对于静态网页的部署、维护没有太大的问题,开发过程基本能逐步推进,而对于动态网页则存在一些问题:服务器和客户端之间的接口管理低效,数据存储管理困难。

基于之前的问题,我开始寻找解决方法,之后我决定使用LNMP架构。LNMP架构在09年提出,到了12年左右后功能基本完善。这个架构足够成熟,在接口管理和数据管理这两方面都有相应的措施。

摘要

LNMP架构是一个由Linux、Nginx、MySQL和PHP组成的网站服务器架构。下图展示了LNMP的结构和业务逻辑,Linux是操作系统,在LInux有Nginx、PHP、MySQL这三个组件,Nginx负责转发网页,其中,静态网页由Nginx自己进行转发,而动态网页则在Nginx将请求转发给PHP后交由PHP进行转发;PHP server解析动态网页的请求,根据情况调用MySQL。MySQL是数据库。

LNMP的结构和业务逻辑

LNMP架构搭建

搭建之前稍微介绍一下LNMP的几个组件。L是Linux操作系统,相信这个不用赘述;N是Nginx,Nginx是毛子开发的一个开源、高性能且高可靠的一个http中间件、代理服务,与Nginx功能接近的软件有httpd、IIS、GWE、tomcat等,在LNMP架构中,Nginx主要负责静态网页转发;M是MySQL,也可以是MariaDB,我用的服务器是ubuntu系统,所以是MySQL;PHP是脚本语言,能够嵌入到html中,在LNMP中用于处理动态网页请求和链接数据库。

  1. Linux操作系统
  2. Nginx环境搭建
  3. PHP环境搭建
  4. MySQL环境搭建

Linux操作系统

Ubuntu 20.04 64位,服务由阿里云提供

Nginx环境搭建

Nginx版本:1.18.0 (Ubuntu)

安装Nginx

# apt-get install Nginx

检查Nginx是否安装成功和版本

# Nginx -V
nginx version: nginx/1.18.0 (Ubuntu)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --with-cc-......

通过客户端的浏览器访问服务器的IP,查看显示网页,若显示Nginx的界面则安装成功

修改配置文件 /etc/nginx/nginx.conf

修改httpserver 中的配置,连接Nginx和PHP。其它的代码段是其它优化,可以忽略。


http 

	server 
		listen 80;

		location / 
			root /var/www/html/;
			index index.nginx-debian.html index.html index.htm index.php; # 修改索引文件,使得包含index.php
		
		
		# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  
		#  设置php-fpm转接口 
		location ~ \\.php$  
        		root /var/www/html;  
			fastcgi_pass 127.0.0.1:9000;  
			fastcgi_index index.php;  
			fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
			include fastcgi_params;   
		

		#error_page ***                  /***.html;
	

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# SSL Settings
	##

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on; # 压缩文件,节省流量和加快网页下载,增加CPU负载,服务器过载时会导致处理的请求数量减少
	gzip_disable "msie6";
	
	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/x-javascript;

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;

检查配置文件的语法

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重启nginx,让修改后的配置生效

# service nginx reload

在/var/www/html/下创建index.php文件,输入文本“this is a php file”,通过客户端的浏览器访问服务器(IP地址/index.php),查看显示网页,若显示“this is a php file”则安装成功。

PHP环境搭建

php版本:php7.2(7.2.34-30+ubuntu20.04.1+deb.sury.org+1)

安装php和相关组件(高版本的php已经封装了fpm,不适用这里的步骤),fpm用于接收动态网页请求,mysql是连接MySQL的端口库。

# apt-get install apt-get install php7.2-fpm php7.2-mysql

检查php是否安装成功和版本

# php --version
PHP 7.2.34-30+ubuntu20.04.1+deb.sury.org+1 (cli) (built: Jun 10 2022 13:57:14) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.34-30+ubuntu20.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

检验Nginx是否能转发到php:在/var/www/html(即Nginx配置的网页根目录)下创建index.php,写入下列文本,保存

<?php phpinfo(); ?>

在浏览器打开服务器的对应网址,若显示php的参数信息,则配置成功

MySQL环境搭建

MySQL版本:Ver 8.0.29-0ubuntu0.20.04.3 for Linux on x86_64 (Ubuntu)

安装Nginx

# apt-get install mysql-server

检查MySQL是否安装成功和版本

# mysql -V
mysql Ver 8.0.29-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))

安装MySQL安全组件

mysql_secure_installation

总结

在Linux上安装Nginx、PHP server和MySQL,并进行对接,这样LNMP架构就搭好了。LNMP架构一个常见的用途是使用wordpress搭建博客论坛。LNMP本身是具备拓展性的,比如,将Nginx更换为Apache或者两者结合使用;PHP也可以换成Python或Perl;MySQL也可以换成MariaDB。

运维基本技能之--搭建LNMP架构

Nginx的介绍 

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP/FTP 代理服务器。Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过年半了。Igor Sysoev在建立的项目时,使用基于BSD许可。自Nginx 发布以来Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Netcraft的统计显示Nginx(绿线)上升趋势明显,在不久的将来有可能超越Apache

技术分享

Mysql介绍

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。在全球排名前1万位的网站中,开源软件使用率超过75%,其中比较受欢迎的开源组合是LAMP(LNMP)。加上阿里带头发展IOE运动(IMBORACLEEMC),加上之前的棱镜门事件,使得Mysql大受欢迎,哈哈,扯远了。


PHP介绍

PHP作为网络开发的强大语言之一,现在应用非常广泛,具有开放源代码,跨平台性强,开发快捷,效率高,面向对象,并且易于上手,专业专注等诸多优点。各种PHP开发框架也让程序开发变的简单有效。


实验环境:CentOS release 6.4 (Final) IP:192.168.2.100


依赖包安装

# yum -y install   ncurses ncurses-devel cmake make perl bison openssl openssl-devel gcc* libxml2 libxml2-devel curl-devel  pcre-devel libjpeg-devel libpng-devel freetype-devel  libcurl-devel
# tar xf libmcrypt-2.5.6.tar.gz 
# cd libmcrypt-2.5.6
# ./configure && make && make install

Nginx安装

#groupadd www
#useradd -g www www
#tar xf nginx-1.6.2.tar.gz
#cd nginx-1.6.2
#./configure --prefix=/usr/local/webserver/nginx1.6 --user=www --group=www --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre
#主要参数说明:
--with-http_ssl_module           #启用ttps协议模块。
--with-http_stub_status_module   #用来监控Nginx当前状态。
# make && make install

Nginx第一种启动方法

# /usr/local/webserver/nginx1.6/sbin/nginx -t   #检查配置文件是否错误。
nginx: the configuration file /usr/local/webserver/nginx1.6/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/webserver/nginx1.6/conf/nginx.conf test is successful
# /usr/local/webserver/nginx1.6/sbin/nginx -c /usr/local/webserver/nginx1.6/conf/nginx.conf
# netstat -anlp |grep nginx
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      4618/nginx          
unix  3      [ ]         STREAM     CONNECTED     28076  4618/nginx          
unix  3      [ ]         STREAM     CONNECTED     28075  4618/nginx

Nginx第二种启动方法,做成服务启动(推荐),篇幅有限,脚本看附件。

# vim /etc/init.d/nginx        #脚本内容看附件。
# chmod +x /etc/init.d/nginx 
# chkconfig --add nginx
# chkconfig nginx on
# service nginx start

输入IP地址若返回如下页面,说明已经安装成功了。

技术分享

Mysql安装

# groupadd mysql
# useradd -r -g mysql mysql
# tar xf mysql-5.6.14.tar.gz 
# cd mysql-5.6.14
# mkdir -p /usr/local/webserver/mysql5.6
# cmake > -DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql5.6/ \  #指定安装目录
> -DMYSQL_DATADIR=/usr/local/webserver/mysql5.6/data \     #指定数据存在目录
> -DWITH_MYISAM_STORAGE_ENGINE=1 \                         #支持MyIASM引擎
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \                       #支持InnoDB引擎
> -DWITH_MEMORY_STORAGE_ENGINE=1 \                         #支持Memory引擎
> -DWITH_READLINE=1 \                                      #快捷键功能
> -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \            #连接数据库socket路径
> -DMYSQL_TCP_PORT=3306 \                                  #指定端口
> -DENABLED_LOCAL_INFILE=1 \                               #允许从本地导入数据
> -DWITH_PARTITION_STORAGE_ENGINE=1 \                      #安装支持数据库分区
> -DEXTRA_CHARSETS=all \                                   #安装所有的字符集
> -DDEFAULT_CHARSET=utf8 \                                 #指定默认字符
> -DDEFAULT_COLLATION=utf8_general_ci                      #指定字符集的校对规则
#make && make install
# chown mysql.mysql /usr/local/webserver/mysql5.6/ -R
# cd /usr/local/webserver/mysql5.6/scripts/
# ./mysql_install_db --basedir=/usr/local/webserver/mysql5.6/ --datadir=/usr/local/webserver/mysql5.6/data/
# rm -rf /etc/my.cnf
# cp -a /usr/local/webserver/mysql5.6/support-files/mysql.server /etc/init.d/mysqld
# cp -a /usr/local/webserver/mysql5.6/support-files/my-default.cnf /usr/local/webserver/mysql5.6/my.cnf 
# chkconfig --add mysqld
# chkconfig mysqld on
# vi /usr/local/webserver/mysql5.6/my.cnf  #这里先指定mysql的目录和数据的存放目录,其他参数再根据需求来调整。
basedir = /usr/local/webserver/mysql5.6/
datadir = /usr/local/webserver/mysql5.6/data

# service mysqld start
Starting MySQL..........[  OK  ]
# netstat -anlp |grep mysqld
tcp        0      0 :::3306                     :::*                        LISTEN      17411/mysqld        
unix  2      [ ACC ]     STREAM     LISTENING     97702  17411/mysqld        /var/lib/mysql/mysql.sock

PHP安装

# tar xf php-5.6.11.tar.gz 
# cd php-5.6.11
#./configure --prefix=/usr/local/webserver/php5.6 --enable-fpm --with-mcrypt --enable-mbstring --with-mysql=/usr/local/webserver/mysql5.6/ --with-mysqli=/usr/local/webserver/mysql5.6/bin/mysql_config

#重要参数说明
--enable-fpm的作用是开启php的fastcgi功能即开启php-fpm功能。
--enable- mbstring表示启用mbstring模块mbstring模块的主要作用在于检测和转换编码,提供对应的多字节操作的字符串函数。

#make && make install
# cp -a php.ini-production /usr/local/webserver/php5.6/etc/php.ini
# cp -a /usr/local/webserver/php5.6/etc/php-fpm.conf.default /usr/local/webserver/php5.6/etc/php-fpm.conf
# cp -a sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm  #做成服务启动
# chkconfig --add php-fpm
# chkconfig php-fpm on
# chmod +x /etc/init.d/php-fpm 
# service php-fpm start
Starting php-fpm  done
# netstat -anlp |grep php-fpm
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      32657/php-fpm       
unix  3      [ ]         STREAM     CONNECTED     218072 32657/php-fpm       
unix  3      [ ]         STREAM     CONNECTED     218071 32657/php-fpm

重点来了,整合LNMP。

技术分享

#/usr/local/webserver/nginx1.6/conf/nginx.conf       #启用下面这几行。
location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

include test.conf;        #同时在配置文件添加一个虚拟主机。

添加一个虚拟主机。

#vi /usr/local/webserver/nginx1.6/conf/fastcgi.conf               #在后面添加一行。
fastcgi_index index.php;
#mkdir -p /data/web/www.test.com
# chown www:www /data/web/ -R
# vim  /usr/local/webserver/nginx1.6/conf/test.conf
server
{
    listen       80;
    server_name www.test.com;
    index index.html index.htm index.php default.html default.htm default.php;
    root  /data/web/www.test.com/;
    if (!-f $request_filename){
            rewrite ^/(.+)$ /index.php?$1& last;
        }
    location ~ .*\.(php|php5)?$
    {
        try_files $uri =404;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param APPLICATION_ENV development;
        include fastcgi.conf;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
    }
}

重启Nginx
# service nginx reload
nginx: the configuration file /usr/local/webserver/nginx1.6/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/webserver/nginx1.6/conf/nginx.conf test is successful
Reloading nginx: [  OK  ]

测试结果

# cat /data/web/www.test.com/phpinfo.php 
<?php
      phpinfo();
?>

#cat /data/web/www.test.com/index.php 
<?php
$link=mysql_connect(‘localhost‘,‘root‘,‘redhat‘); #用root连接本地的数据,密码是redhat。
if ($link)
             echo "Successfuly";
else
             echo "Faile";
mysql_close();
?>

查看结果,看到如下的返回结果,证明整合LNMP成功了。

技术分享

技术分享

LNMP架构已经安装完成,安装并不难,难在对于架构的维护!!!

本文出自 “Share Linux” 博客,请务必保留此出处http://sharelinux.blog.51cto.com/11163444/1740196

以上是关于LNMP架构的介绍和搭建的主要内容,如果未能解决你的问题,请参考以下文章

LNMP架构

CentOS 7 搭建 LNMP 架构详细过程 + Discuz 论坛安装 (手工编译)

LNMP架构搭建

LNMP架构搭建(基础入门级)

LNMP架构搭建(一键部署)

LNMP架构搭建详细部署