近期需要搭建个简易的小型网站,原想着用服务器面板解决,但是网站程序要求苛刻(如使用PHP函数、安装模块、资源性能分配等),环视了一圈服务器面板也没有找到中意的,不是限制太多就是自身占用过大,因此决定自己搭建配置LNMP三件套来部署网站程序,以达到最佳性能与最小损耗...

预备

LNMP是一种用于配置网站前端程序的运行环境组合。‘L’指Linux系统环境,‘N’指Nginx,‘M’指MySQL或者MariaDB数据库,‘P’指PHP程序。类似的环境组合还有LAMP,该包使用Apache作为网页服务器驱动程序,与Nginx相比占用较大但是相对稳定,但是近年来搭建小型网站项目依然是Nginx更加流行。

此处我预备的环境版本为:

Linux = Debian 10.2 64bit
Nginx = 稳定版1.20.2
MySQL = 8.0.29
PHP = 8.1/7.4

服务器使用腾讯云的香港区域服务器,配置为2C2G,搭建小型网站性能足够使用

LNMP环境包之‘L’——Linux

服务器使用腾讯云提供的纯净Debian 10.2镜像,无预装其他环境

进入系统后先更新软件包:

apt update
apt upgrade

由于腾讯云的服务器都是预置好软件源的,因此购买大厂的机器后一般无需手动换源即可开箱即用

LNMP环境包之‘N’——Nginx

本文使用的Nginx版本官网下载链接(适用于Debian buster系统): nginx_1.20.2-1~buster_amd64.deb

CentOS 8系统Nginx下载链接: nginx-1.20.2-1.el8.ngx.x86_64.rpm

其他系统或者版本下载链接可见列表: http://nginx.org/packages/

安装步骤

通过SSH连接至服务器,并获取root权限:

su

下载Nginx 1.20.2软件安装包(下载链接可根据自己的系统环境从上方列表查找),本文以Debian 10.2为例:

wget http://nginx.org/packages/debian/pool/nginx/n/nginx/nginx_1.20.2-1~buster_amd64.deb

安装Nginx软件包:

dpkg -i nginx_1.20.2-1~buster_amd64.deb

安装完成后查看版本:

nginx -v

如果显示为nginx version: nginx/1.20.2即为安装成功,删除软件包即可

初始化配置

Nginx的配置文件一般存放于/etc/nginx/conf.d/文件夹内,编辑里面的文件即可

默认网站配置文件名为default.conf,使用nano编辑器进行初始配置:

nano /etc/nginx/conf.d/default.conf

文件内容有这几处需要修改:

在"location"项的index内需要添加 index.php ,root项内的路径可指定好也可保持默认,后面配置网页时可再修改。如图所示:

找到"location ~ .php$"项,将其与大括号内的内容注释取消掉,并修改:

  • root项指定好网站根目录
  • 修改 fastcgi_pass 项为 unix:/run/php-fpm/www.sock;,Nginx 通过 UNIX 套接字与 PHP-FPM 建立联系,该配置与 /etc/php-fpm.d/www.conf 文件内的 listen 配置一致。
  • fastcgi_param SCRIPT_FILENAME 后的 /scripts$fastcgi_script_name; 替换为 $document_root$fastcgi_script_name;

修改完成后如下图所示:

按Ctrl+O写入文件,Ctrl+X退出编辑

最后将Nginx配置为开机启动即可:

systemctl start nginx
systemctl enable nginx

验证配置

本文修改后的配置文件如图:

由于测试所用的为一个静态页面,因此只需要指定根目录与域名即可。另存为test.conf,重启Nginx,检查无报错后所用浏览器访问域名,网页加载正常,说明Nginx配置验证成功。

拓展:多网站配置

如果要配置多个网站,只需要在域名服务商多解析几个到服务器IP的域名,然后将/etc/nginx/conf.d/default.conf文件重复拷贝作为模板使用,每次修改完配置文件,需要重新启动Nginx服务使其生效,同时要确保Nginx没有报错。

在配置文件时,只需要使location项内的root所指定的网站根目录不相同、server_name所指定的域名不相同,即可通过不同域名访问到不同站点根目录的index文件。

反代、伪静态本文暂且不提及。