关键字

Linux、Nginx、MySQL、PHP、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架构部署wordpress lnmp架构拓扑图_linux

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的界面则安装成功

lnmp架构部署wordpress lnmp架构拓扑图_服务器_02

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

修改http{server{ }}中的配置,连接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”则安装成功。

lnmp架构部署wordpress lnmp架构拓扑图_linux_03

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的参数信息,则配置成功

lnmp架构部署wordpress lnmp架构拓扑图_lnmp架构部署wordpress_04

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。