实验原理
什么是 LNMP
首先这里要简单介绍下 LAMP 和 LNMP,这两个都是在网站服务器架构中的系统环境。
上节中我们简单介绍过:
LAMP 指的是:Linux+Apache+MySQL+Perl/PHP/Python
LNMP 指的是:Linux+Nginx+MySQL+PHP
我们可以从表面看出,这两个框架大致的区别就在于 Apache 和 Nginx 上面(其实,远远不止这些)。我们在上节已经分析了 Nginx 与 Apache 的各种优缺点,这里就不再多加赘述。
这就是 LNMP 的组成:
实验步骤
LNMP 系统安装(L-N-M-P)
前期准备(环境要求,库依赖):
如果你的物理机上用 apt-get 安装了老版的 Nginx,或者你的 Nginx 有问题,可以使用 sudo apt-get purge nginx 命令删除已安装的 Nginx。
针对后面的 nginx 源码编译安装(如果选择 apt-get
的方式则不需要,我们在这里会有简单的库依赖列表,需要读者参照解决。
ssl 功能需要 openssl 库
gzip 模块需要 zlib 库
rewrite 模块需要 pcre 库
这些库可以点击后在相应官网进行下载、解压、编译、安装。(下载最新的最好)
L(Linux 安装)
在 LNMP 中的作用或角色:
Linux 是一类 Unix 计算机操作系统的统称,是目前最流行的免费操作系统。LNMP 中以它作为平台。
Linux 的常见发行版有:debian、centos、ubuntu、fedora、gentoo 等。
我们实验楼的环境本身就是 ubuntu,可直接进行下一步操作。如果想拥有自己的 ubuntu 实验环境,赶紧动手实现
N(Nginx 安装)
在 LNMP 中的作用或角色:Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
安装方式
决定因素:主要针对不同人群、不同需求,对于一般新手而言 apt-get 就够了;如果你乐于折腾,需要定制,那就源码安装吧(这里只会简单叙述)。强烈建议 apt-get 直接安装。
(1)直接 apt-get 安装
sudo apt-get update
sudo apt-get install -y nginx
这里要是安装失败的,很可能就是源的问题了。现在的软件源比较完整,基本都包含了 Nginx,如果源列表实在没有, 进入系统设置-软件更新切换另一个源就好了,ubuntu 官方源(国内速度较慢)、souhu 源、163 都有(更换源最后记得 sudo apt-get update 更新软件包列表数据库,不然不会生效)。
ubuntu 因为安全策略,每次执行安装命令时一般需要加上 sudo 去操作。建议在安装过程中使用 sudo 而不是直接切换到 root 用户,这样虽然表面繁琐,但是安全。
(2)源码安装
这个方法比较繁琐这里简单阐述下,因为 ubuntu 默认的策略是什么库都不安装,经过上面的库依赖解决,可以从中了解到 Nginx 依赖的库有哪些,并且可以定制安装组件或者不安装组件,开机启动或开机不启动等等。
到 nginx 源 下载最新的源代码压缩包,解压编译安装就好。
Linux 中最好把源代码存放在
/usr/local/src
文件夹中
完成安装后的测试
所有的启动配置文件都在 /etc/init.d/nginx 这个目录下,所以相关操作都可以在这个文件夹启动命令,这其实就是一个启动脚本。
启动命令:
sudo /etc/init.d/nginx start
# 或者使用如下的命令
sudo service nginx start
启动完毕后,打开浏览器,访问 http://localhost 一定要刷新以确认。
在实验楼的新版本环境里,由于环境升级的时候安装了 apache,apache 的 html 文件覆盖了 nginx 的文件,所以也可能会展示 apache 的页面:
停止命令:
sudo /etc/init.d/nginx stop
# 或者使用如下的命令
sudo service nginx stop
停止过后,再打开浏览器,访问 http://localhost 同样需要刷新确认
重启命令:
sudo /etc/init.d/nginx restart
# 或者使用如下的命令
sudo service nginx restart
nginx 安装后的初级配置
在后面的章节中,关于 Nginx 的配置有较详细的讲解及实战。这里只是基础的配置
sudo vim /etc/nginx/sites-available/default
PHP 需要配置 location ~ .php$ {},所以要让 php 与 nginx 一起工作,就得在这个配置文件中配置这个模块。
找到 location ~ .php 配置段,修改内部配置为如下内容:
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
紧接着测试配置文件是否正确:
sudo nginx -t
测试成功以后重载配置文件,使配置文件生效:
sudo service nginx reload
关于测试的话要等下面的 php 一同配置好后一起测试
如果对 nginx default 配置还不是很清楚的或者有兴趣的读者可以参考 示例 1、示例 2
M(MySQL 安装)
安装
MySQL 是一个小型关系型数据库管理系统,其安装分为服务端与客户端
安装命令如下:(由于实验楼环境中已经装有 Mysql。安装部分就省略掉。)
sudo apt-get install mysql-server mysql-client
然后你会看见输入密码的界面,你只需接下来输入管理员密码就行。
如果不安装,直接使用环境中的 MySQL,只需要在环境中使用 sudo service mysql start 启动 MySQL,MySQL 用户为 root,密码为空。
修改 MySQL 的配置文件
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
将 bind-address = 127.0.0.1 注释掉(在对应的行前面添加 # ),就可以远程连接数据库了
P(php 安装)
在 LNMP 中的作用或角色:nginx 本身不能处理 PHP,它只是个 web 服务器,当接收到请求后,如果是 php 请求,则发给 php 解释器处理,并把结果返回给客户端。
php-fpm 是一个守护进程(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。
sudo apt-get install -y php7.0-fpm
安装好以后连同上面的 Nginx 一同测试:
现在创建一个探针文件保存在 /var/www/html 目录下(这个目录就是刚刚 nginx 配置文件中 root 目录),以便测试。
sudo vim /var/www/html/phpinfo.php
接下来使用命令启动 php7.0-fpm 服务:
sudo service php7.0-fpm start
然后访问 http://localhost/phpinfo.php (记得刷新)
接下来你就会看见:
修改各模块配置文件
修改各个模块配置文件,达到能互相支持的目的:
(1)首先,要想让 php 支持 MySQL,还需要安装一系列的配套模块。
在刚才打开的网页中,这是没有装模块的界面,搜索可以看出,里面没有任何 MySQL 的启动信息
你需要安装 php-mysql 模块,使用如下命令进行安装:
sudo apt-get install php-mysql
安装好以后,紧接着你需要需要重启 php
sudo service php7.0-fpm restart
这是装好以后的表现:
(2)改变监听端口
在某些情况下我们需要改变服务器监听的端口。
因为套接字是通过绑定 ip 端口连接的,那就只需要将刚才的 Nginx 的 default(所在目录 /etc/nginx/sites-available/)配置中的端口打开,改成你想要监听的端口。
# 这是 Nginx 的 default 文件
sudo vim /etc/nginx/sites-available/default
server {
# 把 80 修改为 9000
listen 9000 default_server;
listen [::]:9000 default_server ipv6only=on;
root /var/www/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
}
命令重载配置文件,使之生效:
sudo service nginx reload
sudo service nginx restart
好了以后直接刷新刚才的页面 http://localhost:9000/phpinfo.php (记得刷新)就完成了
注意事项
如果运行不正常,用 service nginx status 查看运行状态。
启动,重启,关闭 Nginx 记得加 sudo,不然可能会失败。
如果还是不能启动,查看 log,这个文件会告诉你失败的原因。
tail /var/log/nginx/error.log