前言
主要还是对于整个服务器如何配置做一个整理。(本人菜鸡。。如有不对,请指出。。勿喷)
也可以去本人的博客看看。
tips: 整个环境是搭建在阿里云服务器上的。(Ubuntu 14.04 64位)
简介
LNMP是Linux、Nginx、MySQL和PHP的缩写,是最常见的服务器配置之一。(之后还想去试试Node.js😝)
安装Nginx
我们采用 apt-get
的方式安装。
在终端里输入以下命令,系统就会自动帮我们安装好Nginx。
sudo apt-get install nginx -y
Nginx的配置文件在/etc/nginx目录下。
我们可以使用以下命令来启动Nginx
sudo service nginx start
由于我只是在云端的服务器配置的,所以我可以通过浏览器访问 http://<外网IP地址>
来确定Nginx是否已启动。如果在本地配置的,可以在浏览器中输入 http://localhost:80
安装MySQL
同样的我们也使用 apt-get
的方式安装。
sudo apt-get install mysql-server -y
安装的过程中要输入两次root密码。这就是之后你登录你的数据库的密码。
MySQL登录方式如下:
mysql -u root -p
接着按照要求输入密码即可登录。
安装完成后MySQL默认监听127.0.0.1的3306端口,这样只能在本机访问MySQL。由于这是在云服务器上安装的MySQL,所以要远程访问数据库的话,就必须修改一下配置文件。需要在配置文件/etc/mysql/my.cnf中修改bind-address 参数的值。找到bind-address并修改为你的服务器的内网地址。
#bind-address = 127.0.0.1
bind-address = 你服务器的内网地址
然后重启MySQL使配置生效:
sudo service mysql restart
安装PHP
同样的我们使用 apt-get
的方式来安装:
sudo apt-get install -y php5 php5-fpm php5-mysql
我们可以通过一下命令来启动 php-fpm
:
/etc/init.d/php5-fpm start
我觉得有必要解释一下这里的 php5-fpm
和 php5-mysql
,因为很有必要。
首先,
Nginx
和PHP
是两个独立的程序,它们之间在正常的情况系是没有任何关系的,但是我们又希望Nginx
在收到PHP
的动态请求时,可以将请求发送到 PHP的解析器并将结果返回给用户的浏览器。那么就需要有一个通用的交互协议来处理它们间的交互流程,这个协议就叫FastCGI
协议。当Nginx
碰到需要PHP
处理的请求后,都会通过FastCGI
协议传递到PHP
的FastCGI
解析器上,然后会由这个解析器来执行这个请求,并将结果返回给Nginx
,再由Nginx
将结果返回给用户的浏览器。那么在执行这个FastCGI
协议的时候,就需要一个进程来解析这个协议并且调用PHP FastCGI 解析器
,这个进程就叫php-fpm(php-fastcgi process manager)
。
PHP5-FPM
这里说一下我碰到的坑,首先我们打开以下 php-fpm
的配置文件。通过以下命令:
sudo vim /etc/php5/fpm/pool.d/www.conf
其中有一行是 listen = 127.0.0.1:9000
,现在我改为了下面的格式。
listen = /var/run/php5-fpm.sock
这行命令的含义是:php-fpm这个进程启动后会绑定在listen 后面的IP的端口上或者是别的应用上监听。
Nginx
在碰到 PHP
类型的请求后会把请求转发到listen后面绑定的IP的端口上或者应用。那么久要求这个listen绑定的 必须 和 Nginx
配置文件里所绑定的必须一致,不然就会出现以下问题:
那这里 listen
后面为什么会有两种不同的 “参数”呢?Nginx
和 FastCGI
的通信方式有两种,一种是TCP的方式,一种是unix socket方式。这里就通过 php-fpm
来设置这两者的通讯方式。
TCP
使用TCP的方式连接就是使用TCP端口连接127.0.0.1:9000。
listen = 127.0.0.1:9000
Socket
Socket是使用unix domain socket连接套接字 /var/run/php5-fpm.sock
listen = /var/run/php5-fpm.sock
OK ! 配置完 php-fpm
后 我们要配置一下 Nginx
来支持 PHP
。
通过以下命令打开 Nginx
配置文件:
sudo vim /etc/nginx/sites-available/default
首先,在 index 后添加 index.php:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
//在这后面添加 index.php
index index.php index.html index.htm;
这里 Nginx
考虑到我们需要用到 php-fpm
所以提前将配置文件写好,我们只要将前面的注释去掉即可。
location ~ \.php$ {
# fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# root /usr/share/nginx/html;
//fastcgi_pass 必须和前面的 php-fpm listen 监听的一致
fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
这样 Nginx
就配置好了。我们需要重新启动一下,参照以下代码:
#这一句虽然没必要但可以给你检查配置文件的错误
sudo nginx -s reload
#重启 php5-fpm
sudo /etc/init.d/php5-fpm restart
#重启 nginx
sudo /etc/init.d/nginx restart
```
接下来我们可以测试一下,Nginx 和 PHP-FPM 是否都配置成功。
我们来写一段代码测试一下:
```
//首先在Nginx 的html 目录下创建 index.php 文件
vim /usr/share/nginx/html/index.php
```
```
//我们来输入以下内容
<?php
phpinfo();
?> //这行可以不写,这TM居然可以不用写,一脸懵逼ing。。。。(勿喷。。。)
```
然后保存退出 `:wq`。
然后我们可以用浏览器来访问以下 `index.php` 页面来看看结果。由于我是在云端服务器配置的,所以就可以输入服务器外网地址来访问。
![图片来自网络](http://upload-images.jianshu.io/upload_images/1679835-715aafbcabd98783.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
###PHP5-MySQL
`PHP` 和 `MySQL` 的关系就 `PHP` 和 `Nginx` 一样, 都需要一些扩展来使得两者相互操作。那么 `PHP-MySQL` 就是这样的东西。
我们可以测试一下是否可以通过 `PHP` 访问 `MySQL` 数据库。
我们可以在 /usr/share/php5目录下新建一个名为db.php
```
<?php
$servername = "localhost";
// 这里填写数据库的用户名和密码
$username = "xxxxxxx";
$password = "xxxxxxx";
$conn = new mysqli($servername, $username, $password);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
```
我们从浏览器打开 http://<外网IP地址>/index.php,如果能看到"Connected Successfully",说明我们php环境已经部署成功。
那么到此,环境搭完了。累累累。。。参考了好多大神的博客才终于搭好的。。。
##补充
一开始搭建环境对于各种的新名词也是各种不懂,不过经过一段时间的学习后了解了不少。。不过也可以参考[这里](https://segmentfault.com/q/1010000000256516),这篇很好的解释了一些。。。
##参考文章
[Ubuntu 下安装 Nginx ( Nginx + Php5-fpm )](http://blog.csdn.net/jcjc918/article/details/42931035)
[Ubuntu系统搭建部署LNMP环境](https://mos.meituan.com/library/24/how-to-install-lnmp-on-ubuntu/)