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