前言#
lamp 的全称是linux + apache + mysql +php lnmp 的全称是linux + nginx + mysql + php (国外喜欢简称为LEMP,搜英文资料需要搜LEMP) Nginx 特性Nginx 性能稳定、功能丰富、运维简单、处理静态文件速度快且消耗系统资源极少。
- 相比 Apache,用 Nginx 作为 Web 服务器:使用资源更少,支持更多并发连接,效率更高。
- 作为负载均衡服务器:Nginx 既可在内部直接支持 Rails 和 PHP,也可支持作为 HTTP 代理服务器对外进行服务。Nginx 用 C 编写而成, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
- 作为邮件代理服务器:Nginx 同时也是一款非常优秀的邮件代理服务器(最早开发这个产品的目的之一,是作为邮件代理服务器)。
- 反向代理可以根据url将请求转向于不同用途的集群,比如图片请求,转向图片服务器集群;视频请求,转身视频服务器集群。
nginx是一款轻量级的web服务器/反向代理服务器/电子邮件代理服务器,安装非常简单,配置文件也很简洁(还支持 perl 语法)。Nginx 支持平滑加载新配置,还能够在不间断服务的情况下进行软件版本升级。
作者:西蒙宫 链接:https://www.zhihu.com/question/19697826/answer/142110770 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在本指南中,我们将安装一个 LNMP Stack (Nginx,MySQL,PHP) ,并在 Ubuntu Server 18.04 / 19.10上配置一个 web 服务器。#
先决条件:#
你应该使用具有sudo权限的用户账户,或者root账户#
1. Install Nginx#
让我们从更新软件包列表和在 Ubuntu 18.04 / 19.10上安装 Nginx 开始。 下面我们用 & & 分隔两个命令。 第一个命令将更新包列表,以确保您获得 Nginx 的最新版本和依赖项。 然后,第二个命令将下载并安装 Nginx。
sudo apt update && sudo apt install nginx
安装后,检查 Nginx 服务是否正在运行
sudo service nginx status
如果 Nginx 正常运行,您应该会看到下面的绿色活动状态。
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-05-09 20:42:29 UTC; 2min 39s ago
Docs: man:nginx(8)
Process: 27688 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 27681 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 27693 (nginx)
Tasks: 2 (limit: 1153)
CGroup: /system.slice/nginx.service
├─27693 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─27695 nginx: worker process
您可能需要按 q 退出服务状态。
2. Configure Firewall#
配置防火墙
如果您还没有这样做,建议您启用 ufw 防火墙并为 Nginx 添加一个规则。 在启用 ufw 防火墙之前,请确保为 SSH 添加了一个规则,否则,如果远程连接,可能会被锁定在服务器之外。
sudo ufw allow OpenSSH
查看可以开放的应用
sudo ufw app list
现在为Nginx
增加一条规则
sudo ufw allow 'Nginx HTTP'
可以看到
Rule added
Rule added (v6)
启用ufw
firewall
sudo ufw enable
按y
允许启用
现在检查防火墙状态
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
就是这样! 你在 Ubuntu 18.04 / 19.10上的 Nginx 网络服务器现在应该准备好了。
3. Test Nginx#
进入你的网页浏览器,访问你的域名或 IP 地址。 如果你还没有域名,并且不知道你的 IP 地址,你可以通过运行:
ip a | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'
如果使用的是云服务器 则可以直接使用公网ip在本地的浏览器输入
您可以在文档根目录 / var / www / html 中找到这个 Nginx 默认欢迎页面。 要在文本编辑器中编辑这个文件:
sudo vim /var/www/html/index.nginx-debian.html
你的 Nginx 网络服务器已经准备好了! 现在可以在 / var / www / html 目录中添加自己的 html 文件和图像。
4. Install MySQL#
让我们从更新软件包列表和在 Ubuntu 18.04 / 19.10上安装 MySQL 开始。 下面我们用 & & 分隔两个命令。 第一个命令将更新包列表,以确保您获得 MySQL 的最新版本和依赖项。 然后,第二个命令将下载并安装 MySQL。
sudo apt update && apt install mysql-server
当提示安装 MySQL 包时,按 y 键和 ENTER 键。 一旦包安装程序完成,我们就可以检查 MySQL 服务是否正在运行。
sudo service mysql status
如果运行,你会看到一个绿色的活动状态,如下所示。
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since since Wed 2018-05-09 21:10:24 UTC; 16s ago
Main PID: 30545 (mysqld)
Tasks: 27 (limit: 1153)
CGroup: /system.slice/mysql.service
└─30545 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
您可能需要按 q 退出服务状态。
5.配置 MySQL Security#
现在应该运行 MySQL 安全安装来配置 MySQL 服务器的安全性。
sudo mysql_secure_installation
如果您在步骤1中创建了根密码,可能会提示您在这里输入它。 否则你将被要求创建一个。 (在这里输入密码)
您将被问及是否需要设置验证密码插件。 除非您出于某种原因希望实施严格的密码策略,否则实际上没有必要这样做。
Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
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:
如果您不想设置验证密码插件,请在这里按 n 和 ENTER。
Please set the password for root here.
New password:
Re-enter new password:
如果在步骤1中没有创建 root 密码,那么现在必须在这里创建一个。 生成一个强密码并输入它。 请注意,当您在 Linux 中输入密码时,输入时不会显示任何信息(没有星号或点)。
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL 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? (Press y|Y for Yes, any other key for No) :
按 y 和 ENTER 以删除匿名用户。
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? (Press y|Y for Yes, any other key for No) :
按 y 和 ENTER 远程禁止 root 登录。 这将防止僵尸和黑客试图猜测根密码。
By default, MySQL 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? (Press y|Y for Yes, any other key for No) :
按 y 和 ENTER 以删除测试数据库。
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :
按 y 和 ENTER 重新加载特权表。
完成
作为测试,您可以登录到 MySQL 服务器并运行 version 命令。
sudo mysqladmin -p -u root version
输入您先前创建的 MySQL root 密码,您应该会看到以下内容:
mysqladmin Ver 8.42 Distrib 5.7.22, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version 5.7.22-0ubuntu18.04.1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 4 min 28 sec
Threads: 1 Questions: 15 Slow queries: 0 Opens: 113 Flush tables: 1 Open tables: 106 Queries per second avg: 0.055
您现在已经成功地为 Ubuntu 18.04 / 19.10安装和配置了 MySQL! 继续下一步安装 PHP。
6. Install PHP#
与 Apache 不同,Nginx 不包含本地 PHP 处理。 为此,我们必须安装 PHP-FPM (FastCGI 流程管理器)。 Fpm 是一种替代的 PHP FastCGI 实现,具有一些对重载站点有用的附加特性。
让我们首先更新软件包列表并在 Ubuntu 18.04 / 19.10上安装 PHP-FPM。 我们还将安装 PHP-MySQL,以允许 PHP 与 MySQL 数据库通信。 下面我们用 & & 分隔两个命令。 第一个命令将更新包列表,以确保您获得 PHP-FPM 和 php-mysql 的最新版本和依赖项。 然后,第二个命令将下载并安装 PHP-FPM 和 php-mysql。 请求继续时按 y 和 ENTER。
sudo apt update && sudo apt install php-fpm php-mysql
一旦安装,请检查 PHP 版本。
php --version
如果 PHP 安装正确,您应该会看到与下面类似的内容。
PHP 7.2.3-1ubuntu1 (cli) (built: Mar 14 2018 22:03:58) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.3-1ubuntu1, Copyright (c) 1999-2018, by Zend Technologies
上面我们使用的是 PHP 版本7.2,不过这可能是一个更新的版本,具体取决于存储库中的哪个包。
根据您安装的是哪个版本的 Nginx 和 PHP,您可能需要手动配置 Nginx 将连接到的 PHP 套接字的位置。
列出目录 / var / run / php / 的内容
ls /var/run/php/
你应该在这里看到一些条目。
php7.2-fpm.pid php7.2-fpm.sock
上面我们可以看到这个接口被称为 php7.2-fpm.sock。请记住这一点,因为下一步可能需要它。
7. Configure Nginx for PHP#
现在我们需要对 Nginx 服务器块进行一些更改。
服务器块的位置可能根据您的设置而有所不同。默认情况下,它位于 / etc / nginx / sites-available / default。
但是,如果您以前在我们前面的一个指南中为多个域设置了自定义服务器块,那么您将需要将 PHP 指令分别添加到每个服务器块中。 典型的自定义服务器块文件位置是 / etc / nginx / sites-available / mytest1. com。
目前,我们假设您正在使用默认值。
sudo vim /etc/nginx/sites-availiable/default
查找index.html
在index.html
前添加index.php
index index.php index.html index.htm index.nginx-debian.html;
查找server_name
在这里输入您的服务器 IP 或域名(如果有的话)。
server_name YOUR_DOMAIN_OR_IP_HERE;
查找location ~ \.php
在这里,您需要通过删除下面用红色标记的行前的 # 符号来取消某些行的注释。
还要确保 fastcgi 传递套接字路径的值是正确的。 例如,如果您安装了 PHP 版本7.2,套接字应该是: / var / run / PHP / php7.2-fpm。 袜子
...
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000; 这一行不应该取消注释否则会与上一行冲突
}
...
保存关闭
现在检查配置文件以确保没有语法错误。 任何错误都可能导致 web 服务器在重启时崩溃。
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果没有错误,可以重新加载 Nginx 配置。
sudo service nginx reload
8. Test PHP#
要查看在 Ubuntu 18.04 / 19.10上 PHP 是否正常工作,让我们在文档根目录中创建一个名为 info.PHP 的新 PHP 文件。 默认情况下,它位于 / var / www / html / ,或者如果您在以前的指南中设置了多个域,它可能位于像 / var / www / mytest1这样的地方。 Com / public html
一旦你有了正确的文档根目录,使用 nano 文本编辑器创建一个新的 info.php 文件
sudo vim /var/www/html/info.php
在新文件中键入或粘贴以下代码(如果在 Windows 中使用 PuTTY,右键单击粘贴)
<?php
phpinfo();
保存退出现在,你可以通过浏览服务器的域名或公共 IP 地址,然后是 / info.php: http://your_domain_or_ip/info.php 地址,在你的网页浏览器中查看这个页面
您现在已经在 Ubuntu 18.04 / 19.10上成功安装了针对 Nginx 的 PHP-FPM。