LNMP是代表软件堆栈的首字母缩写:Linux内核,Nginx Web服务器,MariaDB数据库(或MySQL)和PHP服务器端编程语言。这些软件在当今的互联网服务器上广泛使用,以部署动态网站或交互式Web应用程序。

Nginx是一种现代且资源高效的Web服务器,正在积极开发中,由于使用异步事件驱动的方法来处理请求,因此在Internet上仅次于Apache HTTP服务器成为第二大使用量。

本教程将指导您如何在最新版本的Debian 9上安装和配置LNMP环境(带有MariaDB和PHP7的Nginx)。

要求

  • 最新版本的Debian 9操作系统可从以下链接https://www.debian.org/CD/http-ftp/获得,可从头安装在VPS,虚拟机上或直接安装在专用的上机。
  • 直接访问服务器的控制台或远程SSH连接
  • 为机器配置了静态IP地址的网络接口
  • 在名称服务器端配置了A和CNAME(www)DNS记录的注册公共域名。在本指南中,我们将使用  linuxbox.cf 作为示例域。服务器的IP地址配置有属于C类私有空间的IP地址,并通过主路由器在Internet中进行NAT转换。通过将Apache 80和443端口从主路由器转发到内部服务器的IP地址,该域将从Internet可见。

步骤1:初始配置

第一步,以root用户或具有root特权的用户登录系统,并通过发出以下命令来更新Debian 9组件(内核升级,软件包更新和安全补丁)。

sudo apt  update
sudo apt upgrade
sudo apt dist-upgrade

接下来,确保通过运行以下命令为计算机主机名添加一个描述性名称。随后,您应该重新启动系统,以便相应地应用新的主机名。

sudo hostnamectl set-hostname hostname.yourdomain.com
sudo init 6

接下来,继续安装net-tools wget,curl和bash-completion实用程序,以便以后使用它们轻松管理您的Debian服务器。

sudo apt install net-tools sudo wget curl bash-completion

步骤2:安装Nginx Web服务器

Nginx是一种现代且资源高效的Web服务器,用于向Internet上的访问者显示网页。通过在服务器控制台中运行以下命令,从Debian 9官方存储库安装Nginx Web服务器。

sudo apt-get install nginx

如上图所示,apt软件包管理器将检查该软件包的其他依赖性,并询问您是否同意继续安装过程。回答是(y)以安装Nginx。

接下来,运行  netstat  命令以在系统上显示网络套接字,并验证nginx守护程序是否正在侦听端口80 / TCP。另外,您可能要发出systemctl  命令以检查nginx守护程序的状态,如下图所示。

sudo netstat -tlp
sudo netstat –tlpn
sudo systemctl status nginx.service

检查nginx服务

一旦nginx服务器启动并在系统中运行,请发出ifconfig命令以显示网络接口信息并列出计算机的IP地址。然后,打开浏览器,并通过在浏览器中添加IP地址,通过HTTP协议访问Nginx默认网页。消息“欢迎使用Nginx!” 应该显示在浏览器窗口中。

http://www.linuxbox.cf

要么

http://192.168.1.14

Nginx欢迎页面

步骤3:激活Nginx HTTP / 2.0协议

默认情况下,Debian 9仓库提供的Nginx二进制文件的最新版本是使用HTTP / 2.0协议构建的。HTTP / 2.0被合并到TSL / SSL协议中,并且可以通过安全交易提高网页的加载速度。

默认情况下,所有现代浏览器(例如Chrome或Firefox)都应支持此协议。但是,请注意Microsoft Internet Explorer和Microsoft Edge浏览器尚无法解析http2协议。

为了在Debian 9上的Nginx中启用HTTP / 2.0协议,您需要对nginx默认配置文件进行一些更改或创建一个新的配置文件,并为443服务器添加TLS代码块。为了做到这一点,首先,通过发出以下命令来备份Nginx网站-可用的默认配置。通过列出站点可用的目录内容来确认备份已成功。

sudo cp /etc/nginx/sites-available/default{,.backup}

ls /etc/nginx/sites-available/

接下来,使用文本编辑器创建Nginx TLS配置文件,并添加以下内容。

sudo nano /etc/nginx/sites-available/default-ssl

default-ssl文件摘录:

    server {
                listen 443 ssl http2 default_server;
                listen [::]:443 ssl http2 default_server;
                #server_name  www.domain.tld;
                server_name _;
                                
                root /var/www/html;
                                
                access_log /var/log/nginx/access.log;
                error_log /var/log/nginx/error.log;
                
                #SSL Certificates
                ssl_certificate "/etc/nginx/ssl/cert.pem";
                ssl_certificate_key "/etc/nginx/ssl/privekey.pem";
                ssl_dhparam /etc/nginx/ssl/dhparam.pem;
                
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
 
                ssl_session_cache shared:SSL:1m;
                ssl_session_timeout 10m;
                ssl_ciphers HIGH:!aNULL:!MD5;
                ssl_prefer_server_ciphers  on;
               
                add_header Strict-Transport-Security "max-age=31536000;
                #includeSubDomains" always;
 
                location / {
                index index.php index.html index.htm;
                    try_files $uri $uri/ /index.php?$args $uri/ =404;
                }
 
                                set $cache_uri $request_uri;
                
                location ~ /.well-known {
                allow all;
                               }
               location ~ \.php$ {
                                include snippets/fastcgi-php.conf;
                #
                #             # With php-fpm (or other unix sockets):
                              fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                #             # With php-cgi (or other tcp sockets):
                #             fastcgi_pass 127.0.0.1:9000;
                }
 
                # deny access to .htaccess files, if Apache's document root
                # concurs with nginx's one
                #
                #location ~ /\.ht {
                #             deny all;
                #}
                   }

下一  行的单词http2表示启用HTTP / 2.0协议的语句  。

listen 443 ssl http2 default_server;

如果您的访问者的浏览器不支持HTTP2协议,请从服务器配置中删除http2单词以禁用该协议,然后重新启动nginx服务以应用更改。

如果您有一个注册域或使用基于IP地址的虚拟主机,则应在server_name  指令后添加域名或IP地址  ,如下例所示。

server_name www.linuxbox.cf linuxbox.cf;

使用以上设置完成编辑Nginx默认配置文件后

在Nginx中配置SSL

在上面的Nginx TSL配置文件中,我们指定了TLS证书和密钥的路径。由于我们实际上尚未在您的系统中安装密钥,因此发出以下命令以生成自签名SSL证书文件和密钥。在生成SSL证书时,系统会询问您一系列问题。添加两个字母代码,分别代表您所在的国家/地区,州或省,城市名称,组织名称,组织单位名称,服务器的通用名称以及有效的电子邮件地址。您应该注意  通用名称 设置,使其与来自DNS服务器的计算机FQDN记录或将用于访问网页的服务器IP地址相匹配。证书和密钥将存储在名为ssl的nginx目录下的新目录中,如下面的屏幕快照所示。

sudo mkdir /etc/nginx/ssl

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/privekey.pem -out /etc/nginx/ssl/cert.pem

ls /etc/nginx/ssl/
创建SSL证书

另外, 通过发出以下命令,生成新的强Diffie-Hellman密码,该密码可在ssl_dhparam语句行的上述配置文件中找到  :

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
SSL证书已创建

最后,在生成Diffie-Hellman密钥后,通过发出以下命令,为default-ssl配置文件创建符号链接,以从站点可用目录到启用站点的目录中,来激活TLS配置文件。

ln -s /etc/nginx/sites-available/default-ssl /etc/nginx/sites-enabled/

接下来,测试Nginx配置文件是否存在语法错误,如果一切正常,请重新启动Nginx守护程序,以通过运行以下命令来应用所有更改。

sudo nginx -t

sudo systemctl restart nginx.service

检查SSL配置是否成功

为了确认Nginx Web服务器是否在SSL端口上绑定,请发出netstat命令并检查端口443是否以侦听模式显示。

netstat –tlpn | grep nginx

 下面的屏幕快照说明了上述步骤。

使用netstat检查服务

然后,从浏览器通过HTTP协议导航到您的域名或服务器的IP地址,以显示nginx默认页面。因为您使用的是自签名证书,所以浏览器中应该显示错误。确认错误以便传递到Nginx默认主页。

自签名SSL证书警告

如果Nginx 在Web根目录中没有提供默认的index.html页面,请发出以下命令来创建索引页面。

echo “test page” | tee /var/www/html/index.html
SSL测试页

为了确认Nginx通告的HTTP / 2.0协议的存在,请发出以下命令。在服务器发布的协议中查找h2字。

 openssl s_client -connect localhost:443 -nextprotoneg ”
使用openssl命令测试SSL证书

您还可以通过按F12功能键并请求页面来可视化连接状态,并检查Nginx是否通过Chrome浏览器发布了http2协议。为了显示请求使用的协议,请转到“网络”选项卡,右键单击“类型”菜单,然后选中“协议字段”。HTTP2协议应在当前协议列中显示为h2,如以下屏幕截图所示。

在浏览器中测试证书

步骤4:安装PHP 7

Nginx Web服务器可以在PHP编程语言解释器的帮助下,通过PHP FastCGI进程管理器来提供动态Web内容,Nginx将处理请求传递给该服务器。可以通过安装 Debian 9官方存储库提供的php-fpm预编译软件包来获得FastCGI进程管理器  。

为了在系统中安装php-fpm进程管理器和PHP7.0解释器,以及允许PHP与Nginx Web服务器通信的其他软件包,请在服务器控制台上发出以下命令:

sudo apt install php7.0 php7.0-fpm php7.0-curl php7.0-gd

启动PHP-FPM

在系统上成功安装PHP7.0解释器后,通过发出以下命令启动并检查php7.0-fpm守护程序:

sudo systemctl start php7.0-fpm

sudo systemctl status php7.0-fpm

在上面的Nginx TLS配置文件中,我们已经为PHP FastCGI进程管理器添加了块配置,以便提供动态内容。以下摘录中显示了使Nginx使用PHP解释器的代码块,因此不需要进一步的步骤来修改Nginx TSL配置文件。以下屏幕快照中各行开头的#号#符号为注释。Nginx Web服务器默认会忽略配置文件中的注释行。

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
在Nginx中启用PHP

测试PHP配置

为了测试和验证Nginx是否可以正确地将php文件传递给PHP处理器,请 通过发出以下命令来创建PHP  info.php测试配置文件

sudo su -c ‘echo “<?php phpinfo(); ?>” > /var/www/html/info.php’

然后,通过导航到服务器的域名或公共IP地址,后跟/info.php来访问Web浏览器中的php信息页面,如下图所示。

https://www.linuxbox.cf/info.php

要么

http://192.168.1.14/info.php

phpinfo输出

您还可以通过 在PHP变量上搜索$ _SERVER [‘SERVER_PROTOCOL’]行来检查服务器是否宣告了HTTP / 2.0协议  。

要安装其他PHP7.0模块,请运行  apt search  php7.0  命令以找到特定的PHP模块并进行安装。如果您打算在LEMP堆栈的顶部安装诸如WordPress之类的内容管理系统,请发出以下命令来安装一些额外的PHP模块。

sudo apt install php7.0-mcrypt php7.0-mbstring

但是,默认情况下,系统上未启用新安装的PHP模块。为了为Nginx激活一个新安装的PHP模块,您应该通过发出以下命令来重新启动PHP-FPM服务。

sudo systemctl restart php7.0-fpm.service

步骤5:安装MariaDB数据库

最后,数据库中缺少LAMP堆栈难题的最后一部分。MariaDB数据库LEMP组件用于将记录存储在表和列中,并动态管理Web应用程序的数据。为了使用所需的PHP模块在Debian 9中安装MariaDB数据库管理系统,以从PHP文件访问数据库,请在服务器的控制台中发出以下命令。随后,重新启动PHP-FPM守护程序,以激活访问数据库所需的PHP MySQL模块。

sudo apt install mariadb-server mariadb-client php7.0-mysql

sudo systemctl restart php7.0-fpm.service

默认情况下,系统root帐户或具有root特权的用户可以在不提供密码的情况下访问数据库。为了更改此行为,以便每次系统用户尝试访问数据库时,MySQL都要求输入密码,以root权限从命令行界面登录到MySQL数据库,并在MySQL控制台中执行以下命令:

sudo mysql
MariaDB> use mysql;
MariaDB> update user set plugin='' where User='root';
MariaDB> flush privileges;
MariaDB> exit
玛丽亚数据库

在MariaDB中设置root密码

在下一步中,请确保通过执行Debian Stretch存储库中的安装包提供的安全脚本mysql_secure_installation来保护MariaDB的安全。在运行脚本时,将询问一系列旨在保护MariaDB数据库的问题,例如:更改MySQL根密码,删除匿名用户,禁用远程root登录并删除测试数据库。通过发出以下命令来执行脚本,并确保对要完全保护MySQL守护程序的所有问题都回答“是”。除指导外,使用以下脚本输出。

sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB

      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we’ll need the current

password for the root user.  If you’ve just installed MariaDB, and

you haven’t set the root password yet, the password will be blank,

so you should just press enter here.

Enter current password for root (enter for none):

OK, successfully used password, moving on…

Setting the root password ensures that nobody can log into the MariaDB

root user without the proper authorisation.

You already have a root password set, so you can safely answer ‘n’.

Change the root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

 … Success!

By default, a MariaDB installation has an anonymous user, allowing anyone

to log into MariaDB without having to have a user account created for

them.  This is intended only for testing, and to make the installation

go a bit smoother.  You should remove them before moving into a

production environment.

Remove anonymous users? [Y/n] y

 … Success!

Normally, root should only be allowed to connect from ‘localhost’.  This

ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y

 … Success!

By default, MariaDB comes with a database named ‘test’ that anyone can

access.  This is also intended only for testing, and should be removed

before moving into a production environment.

Remove test database and access to it? [Y/n] y

 – Dropping test database…

 … Success!

 – Removing privileges on test database…

 … Success!

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

Reload privilege tables now? [Y/n] y

 … Success!

Cleaning up…

All done!  If you’ve completed all of the above steps, your MariaDB

installation should now be secure.

Thanks for using MariaDB!

最后,为了测试MariaDB功能,请从控制台登录数据库并执行以下命令。默认数据库列表应显示在MariaDB控制台中。保留退出语句的MariaDB控制台。

mysql -u root –p

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
 
MariaDB [(none)]> exit
 
MariaDB显示数据库

仅此而已!Nginx Web服务器,MariaDB数据库和PHP编程语言已安装在Debian 9计算机上。您现在可以开始为访问者构建动态网站或Web应用程序。

在Debian上安装LNMP(Linux、Mysql、Nginx、PHP)
Tagged on:                 

发表评论

电子邮件地址不会被公开。 必填项已用*标注