LEMP是用来搭建动态网站的一组软件,首字母缩写分别表示Linux、Nginx(Engine-X)、MySQL和PHP。
本文将讲述如何在Ubuntu18.04上安装LEMP套件。当然,首先要安装Ubuntu18.04操作系统,接着按照以下方法完成其他组建的安装。
以下演示将通过非管理员账号进行,即通过sudo
命令完成安装,如果是普通账号(非管理员)可继续往下看。
$ sudo apt update
$ sudo apt install nginx
在Ubuntu18.04上,使用以上两条命令完成nginx安装就可以通过localhost
访问了,若访问失败,可能是已经安装了Apache等占用80端口的服务,或者是防火墙问题,若访问成功,应该如下图所示。
$ sudo apt install mysql-server-5.7
执行该条命令安装MySQL
,但仍为能使用,需要进行配置。考虑到安全问题,这里将通过一个脚本程序来完成MySQL
的权限配置。
$ sudo mysql_secure_installation
执行该条命令,将会提示是否开启密码验证,如下所示,输入Y后按回车。
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
然后,就会问设置密码的强度,可以根据提示按实际需要选择,这里选择0。
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
接着,提示设置密码,连续输入两次密码后,会提示是否重新修改,输入N后回车完成密码设置。
MySQL5.7
默认情况下,root
用户使用的是auth_socket
插件进行身份认证,所以通过账号密码的方式是无法登陆的,比如php
通过root
和password
的方式连接数据库会失败。
为了能够使MySQL5.7
的root
账号能够使用密码进行登陆,可以按照以下方法修改权限。
$ sudo mysql
通过该条命令使用MySQL
自带的客户端连接数据库服务器,然后输入以下命令查看root
的登陆验证方式。
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
可以看到,root
账号使用的auto_socket
登陆验证方式,需要将它改为mysql_native_password
方式。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root密码';
注意:将
root密码
修改为实际密码再执行以上命令,如该密码可用于php
连接数据库时使用。
mysql> FLUSH PRIVILEGES;
执行该条命令更新下配置,输入以下命令,再次查看root
账号的登陆验证方式。
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
可以看到,root
的登陆验证方式已经从auto_socket
变成mysql_native_password
了。
mysql> exit
退出MySQL
客户端,届时,完成了MySQL
安装和配置。
通过以上操作,完成Nginx
和MySQL
的安装,而动态网页则是PHP
的工作。
Nginx
不想其他网站服务器自带PHP
处理器,需要自己安装php-fpm
,即fastCGI process manager
,然后配置Nginx
将客户端PHP
请求传给它进行处理。
$ sudo apt install php-fpm php-mysql
此时,LEMP
全部所需的软件都安装好了,接着就是配置的工作了。
首先配置Nginx
服务器区块的等级(服务器区块类似Apache
服务器的虚拟站点)。服务器区块配置文件在/etc/nginx/sites-available
目录下,这里新建的服务器区块的配置文件名为localhost
,如下命令,创建localhost
文件并进行编辑。
$ sudo nano /etc/nginx/sites-available/localhost
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
上述配置大概意思是:
listen
—— 网站监听端口,这里设置为80,即浏览器默认的HTTP端口号。root
—— 网站根目录。index
—— 默认访问页。server_name
—— 网站访问域名,若是其他域名访问时,则不会响应,这里设置为localhost
用于本地调试。location /
—— 该区块有一个try_files
命令,当客户端请求找不到对应文件时,将会返回404页面。location ~\.php$
—— 该区块匹配.php
后缀的文件并传给php-fpm
进行处理。location ~ /\.ht
—— 该区块禁止.htaccess
的访问。保存以上配置后,通过创建软连接的方式,使配置文件能够被Nginx
加载。
$ sudo ln -s /etc/nginx/sites-available/localhost /etc/nginx/sites-enabled/
然后测试配置文件是否正常。
$ sudo nginx -t
配置正常的话,就可以重新启动nginx
使配置生效了。
$ sudo systemctl reload nginx
在配置nginx
时定义了网站根目录为/var/www/html/
,可以在此目录创建PHP
网页供访问测试。
$ sudo nano /var/www/html/info.php
phpinfo();
保存后,打开浏览器输入http://localhost/info.php
,访问成功的话,可以看到如下截图的类似界面。
为了安全,该信息不应该被客户端看到,当测试访问正常后,应当将该文件删除。
$ sudo rm /var/www/html/info.php
通过以上步骤的操作,LEMP已经能够正常使用了,但真正在网站发布时,仍需要根据实际情况进行配置部署。另外,Nginx
能够支持https
协议,使网站更安全。