Ubuntu 16.04.4 LTS 搭建 LNMP
sudo apt-get install mysql-server mysql-client
测试:mysql -u root -p
查看 Mysql 状态:
service mysql status/start/stop/retart
查看监听端口的情况:
netstat -tunpl
或 netstat -tap
如果之前有装 APACHE 要改下端口,或者直接移除 apache2
apt-get remove apache2
为确保获取最新的 Nginx 先更新源列表(有些文档说的是更新系统)
sudo apt-get update
安装 nginx
apt-get install nginx
检查 nginx 安装是否成功
# 方法01、 直接输入以下命令可以看到 nginx 的版本号 /usr/sbin/nginx -v # 方法02、使用浏览器访问 IP 地址,出现 Nginx 的欢迎页面
可以使用 dpkg -S nginx 命令来搜索 nginx 的相关文件
nginx 的配置目录位于:/etc/nginx
其他文档说的是 Nginx 的默认网站目录在 /usr/share/nginx/html/ 下,但是我安装的在 /var/www/html 下,和 apache2 默认的网站目录一样
默认Nginx网站配置文件为 /etc/nginx/sites-available/default
Nginx 其他命令
/etc/init.d/nginx status|stop|start|restart
Nginx 虚拟主机配置
修改 user
sudo vim /etc/nginx/nginx.conf # 将 user 改为 www-data 因为 php 默认是这个 user # 但是我看我自己的 nginx.conf 配置文件第一行直接是 # user www-data; 因此我没有修改
Nginx 与 php-fpm 的集成
这里采用UNIX domain socket方式:(这里一定要注意location的位置!!!)
在 /etc/nginx/sites-available/default 配置文件中(网站根目录也在是这里更改), Nginx已经为与 PHP-FPM的整合准备好了,只需要将下面这部分改好就可以了。sock文件路径为 /run/php/php7.2-fpm.sock 。
51 location ~ \.php$ {
52 include snippets/fastcgi-php.conf;
53
54 # With php7.0-cgi alone:
55 #fastcgi_pass 127.0.0.1:9000;
56 # With php7.0-fpm:
57 fastcgi_pass unix:/run/php/php7.2-fpm.sock;
58 }
然后再修改 PHP-FPM 的配置文件 vim /etc/php/7.2/fpm/pool.d/ www.conf
,如下:
# 与 Nginx监听同一个 sock
36 listen = /run/php/php7.2-fpm.sock
- 端口-代码映射,方法有三种:
- 方法01:在 /etc/nginx/sites-available/default 文件末尾处直接添加以下内容
sudo vim /etc/nginx/sites-available/default
提供了两种框架的配置方法
# 以下是针对 thinkphp5.0 框架配置
server {
listen 80;
# 如果希望二级域名指向同一个项目的话,直接在 server_name 后面添加即可
server_name www.drling.xin drling.xin;
root /var/www/html/www.drling.xin/public;
access_log /var/log/nginx/www.drling.xin_access.log;
error_log /var/log/nginx/www.drling.xin_error.log;
index index.html index.php;
## 在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf中配置转发规则实现
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
location ~ \.php?.*$ {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# 以下是针对 Laravel5.5 框架配置
server {
listen 80;
server_name test.drling.xin;
root /var/www/html/test.drling.xin/public;
access_log /var/log/nginx/test.drling.xin_access.log;
error_log /var/log/nginx/test.drling.xin_error.log;
index index.html index.php;
## 如果你使用的是 Nginx,使用如下站点配置指令就可以支持 URL 美化:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php?.*$ {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
- 方法02、直接在 /etc/nginx/sites-available 目录下,单独写自己的项目配置文件,操作方法如下
# 01、比如我写的文件是 www.drling.xin 不需要写 .conf 后缀名
sudo vim /etc/nginx/sites-available/www.drling.xin
# 02、将以上 thinkphp5.0 的配置文件放进去
# 以下是针对 thinkphp5.0 框架配置
server {
listen 80;
server_name www.drling.xin;
root /var/www/html/www.drling.xin/public;
access_log /var/log/nginx/www.drling.xin_access.log;
error_log /var/log/nginx/www.drling.xin_error.log;
index index.html index.php;
## 在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf中配置转发规则实现
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
location ~ \.php?.*$ {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# 03、建立软连接
sudo ln -s /etc/apache2/sites-available/www.drling.xin /etc/apache2/sites-enabled/www.drling.xin
- 方法03、直接在 /etc/nginx/conf.d/ 目录下写以 .conf 为后缀的配置文件
# 01、比如我写的文件是 test.drling.xin 需要写 .conf 后缀名
sudo vim /etc/nginx/conf.d/test.drling.xin.conf
# 02、将以上 Laravel5.5 的配置文件放进去
server {
listen 80;
server_name test.drling.xin;
root /var/www/html/test.drling.xin/public;
access_log /var/log/nginx/test.drling.xin_access.log;
error_log /var/log/nginx/test.drling.xin_error.log;
index index.html index.php;
## 如果你使用的是 Nginx,使用如下站点配置指令就可以支持 URL 美化:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php?.*$ {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
其实 nginx 的配置放置位置多半可以参考 /etc/nginx/nginx.conf 文件中61行和62行
61 include /etc/nginx/conf.d/.conf;
62 include /etc/nginx/sites-enabled/;
sudo service nginx restart
如果不确定 fastcgi_pass 这一段怎么填写
#fastcgi_pass为fpm地址,可查看/etc/php/7.2/fpm/pool.d/www.conf中的listen确定(www.conf配置文件中第36行)
安装 php 的时候一定要安装 php-fpm 扩展(也称为:PHPFastCGI管理器),要连接数据库则必须安装 php-mysql 扩展
# 我在这里安装的 php7.2 因为 Laravel5.5核心代码中需要php7.1以上 sudo apt-get install php7.2-fpm php7.2-mysql
可以使用如下命令查看端口监听情况
netstat -anp // 直接查看80端口可以使用命令: sudo lsof -i :80
一定要在 php.ini 配置文件中修改 cgi.fix_pathinfo=0
sudo vim /etc/php7.2/fpm/php.ini
查找到 cgi.fix_pathinfo 字段(第776行),将值设为0
这个参数用来对设置cgi模式下为php是否提供绝对路径信息或PATH_INFO信息
Nginx 与 PHP-FPM 集成详细讲解
PHP-FPM 与 Nginx 通信方式有两种,一种是基于TCP的 Internet domain socket 方式,一种是 UNIX domain socket 方式。
UNIX domain socket 可以使同一台操作系统上的两个或多个进程进行数据通信。UNIX domain socket 的接口和 Internet domain socket 很像,但它不使用网络底层协议来通信。
服务器压力不大的情况下,这两种方式性能差别不大,但在压力比较满的时候,用UNIX domain socket方式,效果确实比较好。
接下来分别讲解一下两种方式的配置方式:
- 使用默认的 UNIX Socket方式:
- 修改 fpm 的配置文件
修改成如下:sudo vim /etc/php/7.2/fpm/pool.d/www.conf
# 第36行 listen = /run/php/php7.2-fpm.sock
可以使用如下方式检查下配置文件是否有错误
sudo php-fpm7.2 -t
修改完了之后重启一下 php-fpm7.2
sudo service php-fpm7.2 restart
- 修改 nginx 的配置文件
sudo vim /etc/nginx/sites-enabled/default
修改成如下:
51 location ~ \.php$ {
52 include snippets/fastcgi-php.conf;
53
54 # With php7.0-cgi alone:
55 #fastcgi_pass 127.0.0.1:9000;
56 # With php7.0-fpm:
57 fastcgi_pass unix:/run/php/php7.2-fpm.sock;
58 }
修改完了之后重启下 nginx
sudo service nginx restart
再次检查 nginx 的配置文件是否正确
sudo php-fpm7.2 -t
- 使用 TCP 方式:
修改 fpm 的配置文件
sudo vim /etc/php/7.2/fpm/pool.d/www.conf
修改成如下:
# 配置文件第36行 listen = 127.0.0.1:9000
修改 nginx 的配置文件
sudo vim /etc/nginx/sites-enabled/default
修改成如下:
51 location ~ \.php$ {
52 include snippets/fastcgi-php.conf;
53
54 # With php7.0-cgi alone:
55 #fastcgi_pass 127.0.0.1:9000;
56 # With php7.0-fpm:
57 fastcgi_pass 127.0.0.1:9000;
58 }