Ubuntu 16.04.4 LTS 搭建 LNMP


Ubuntu 16.04.4 LTS 搭建 LNMP

  • 安装 mysql

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

  1. 为确保获取最新的 Nginx 先更新源列表(有些文档说的是更新系统)

    sudo apt-get update
  2. 安装 nginx

    apt-get install nginx
  3. 检查 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 虚拟主机配置

  1. 修改 user

    sudo vim /etc/nginx/nginx.conf
    # 将 user 改为 www-data 因为 php 默认是这个 user
    # 但是我看我自己的 nginx.conf 配置文件第一行直接是
    # user www-data; 因此我没有修改
  2. 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
  1. 端口-代码映射,方法有三种:
  • 方法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
  • Nginx 配置文件需要注意位置讲解

  1. 如果不确定 fastcgi_pass 这一段怎么填写

    #fastcgi_pass为fpm地址,可查看/etc/php/7.2/fpm/pool.d/www.conf中的listen确定(www.conf配置文件中第36行)
  2. 安装 php 的时候一定要安装 php-fpm 扩展(也称为:PHPFastCGI管理器),要连接数据库则必须安装 php-mysql 扩展

    # 我在这里安装的 php7.2 因为 Laravel5.5核心代码中需要php7.1以上
    sudo apt-get install php7.2-fpm php7.2-mysql
  3. 可以使用如下命令查看端口监听情况

    netstat -anp
    
    // 直接查看80端口可以使用命令:
    sudo lsof -i :80
  4. 一定要在 php.ini 配置文件中修改 cgi.fix_pathinfo=0

    sudo vim /etc/php7.2/fpm/php.ini

    查找到 cgi.fix_pathinfo 字段(第776行),将值设为0

    这个参数用来对设置cgi模式下为php是否提供绝对路径信息或PATH_INFO信息

  5. 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方式:
  1. 修改 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
  1. 修改 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 方式:
  1. 修改 fpm 的配置文件

    sudo vim /etc/php/7.2/fpm/pool.d/www.conf

    修改成如下:

    # 配置文件第36行
    listen = 127.0.0.1:9000
  2. 修改 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         }

文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
评论
  目录