一、LNMP环境概述
1、什么是LNMP环境
LNMP 是 Linux + Nginx + MySQL/Mariadb + PHP 的组合缩写。
Nginx:是一个web服务器,提供HTTP 服务。
MySQL/MariaDB:关系型数据库,用来存放数据(例如账号信息等)
PHP:是一种编程语言。常用来做网站(例如qq.com 、 baidu.com)。
2、网站访问原理
用户通过web浏览器访问网站,即访问Nginx服务。此时会处理图片、js、css(叫做静态请求);接收PHP请求但不处理,会将PHP的请求转发给php-fpm服务,由此服务来处理PHP请求(叫做动态请求)
3、静态请求 & 动态请求
静态请求:指Nginx可以直接处理的图片、js、css、视频、音频、flash等
动态请求:指需要和数据库打交道的请求。例如:用户登录过程,查看文章或者写一篇文章。
二、Mariadb数据库安装
1、Mariadb数据库概述
Mariadb数据库是MySQL的一个分支。MySQL被 SUN公司收购后,又被 Oracle公司收购,因为Oracle公司专门做关系型商业收费数据库,所以很有可能在未来的某年MySQL也会变成商业版收费软件。为了避免这一情况,现在很多公司开始转向使用Mariadb数据库。
Mariadb数据库完全兼容MySQL数据库,包括API和命令行。目前最新的稳定版是10.3版。
2、下载
官方网站 https://mariadb.org/
下载界面 https://downloads.mariadb.org/ 本次学习使用10.3版本
可以保存对应的下载链接在Linux中使用wget命令获取镜像。
3、解压缩文件
tar zxvf mariadb-10.3.13-linux-x86_64.tar.gz
3.1 常用的解压缩命令
解压.tar.gz文件 tar zxvf mariadb-10.3.13-linux-x86_64.tar.gz
解压.tar.bz2文件 tar jxvf mariadb-10.3.13-linux-x86_64.tar.bz2
解压.tar.xz文件 tar Jxvf mariadb-10.3.13-linux-x86_64.tar.xz
3.2 常用的压缩打包命令
tar zcvf mariadb-10.tar.gz 123/
tar jcvf mariadb-10.tar.bz2 123/
命令解析:将目录123/ 压缩打包为mariadb-10.tar.gz/bz2
4、拷贝解压后的文件至对应的目录并改名,方便后期维护
mv mariadb-10.3.13-linux-x86_64 /usr/local/mysql
5、查看安装步骤
[root@JSH-01 local]# cd mysql/
[root@JSH-01 mysql]# less INSTALL-BINARY
6、创建目录
mkdir -p /data/mysql (其中参数 -p 是级联创建)
7、创建用户
useradd -M -s /sbin/nologin mysql
(其中参数 -M 不创建家目录;-s 指定shell)
8、改变文件的拥有者和群组
chown -R mysql:mysql /data/mysql
(其中参数 -R 指定目录以及其子目录下的所有文件)
命令解析:
目录/data/mysql及其子目录下的所有文件的拥有者和群组都是mysql。
8、初始化mariadb 生成自己的库文件
报错信息如下:此时需要安装 yum install -y libaio-devel
安装完依赖包后,再次执行初始化命令。输入 echo $? 查看安装结果
9、拷贝启动脚本并改名为mysqld,编辑拷贝后的文件。
[root@JSH-01 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@JSH-01 mysql]# vi /etc/init.d/mysqld
basedir=/usr/local/mysql #定义mysql程序存放目录
datadir=/data/mysql #定义mysql数据库存放位置
10、系统服务与启动
10.1 chkconfig --list 列出系统所有的服务(针对 CentOS 6系统)
增加mysqld服务至系统服务列表 chkconfig --add mysqld
前提:mysqld 在/etc/init.d 目录下;其次mysqld的权限为 755
设置其随系统启动而启动:chkconfig mysqld on
10.2 systemctl list-unit-files 列出系统所有的服务(针对 CentOS 7系统)
11、启动mysqld服务
/etc/init.d/mysqld start 或者 service mysqld start
(只要将其加入系统服务列表,就可以用后者启动)
报错信息:
编辑默认配置文件 vi /etc/my.cnf 修改对应的参数(如图)
一般讲socket放在 /tmp/ 目录下;
修改完成后,再次启动mysqld 如图所示,表示成功
12、查看进程 ps aux|grep mysql
13、查看3306端口 netstat -lnp
14、连接MySQL/MariaDB服务
15、首次连接需要输入的命令太长,怎么办?
解决方法1:软连接
解决方法2:系统环境变量(重启系统后会失效)
只有存在于/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
里面的命令才可以直接用。
将 /usr/local/mysql/bin 目录添加至系统环境变量中
解决方法3:系统环境变量(永久有效)
[root@JSH-01 mysql]# echo "PATH=$PATH:usr/local/mysql/bin" >> /etc/profile
解析:/etc/profile 初始环境系统变量配置文件
16、别名 alias (可以理解为外号)
例如1:定义别名(仅针对当前窗口有效;重启或重新连接后就失效了)
[root@JSH-01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
[root@JSH-01 ~]# alias vieth0='vi /etc/sysconfig/network-scripts/ifcfg-eth0'
##当重启或重新连接后就失效了
[root@JSH-01 ~]# ls -a
. .bash_history .bash_profile .cache .mysql_history .pydistutils.cfg .tcshrc
.. .bash_logout .bashrc .cshrc .pip .ssh
[root@JSH-01 ~]# vi .bashrc
需要将别名写入当前用户家目录下的 .bashrc 文件中才能永久有效(针对当前用户)
需要将别名写入root用户/etc/bashrc 文件中才能永久有效(针对所有用户)
三、编译安装PHP
1、下载
官网 www.php.net
点击对应的文件格式后,会跳转至镜像站,选择国家后点击下载。复制对应的下载链接,在Linux中使用wget命令获取。
2、解压缩
[root@JSH-01 src]# tar zxvf php-7.3.2.tar.gz
[root@JSH-01 src]# ls
mariadb-10.3.13-linux-x86_64.tar.gz php-7.3.2 php-7.3.2.tar.gz
3、编译
3.1 编译第一步: ./configure配置编辑参数
进入PHP目录,vi INSTALL 可以看到编译指引链接https://php.net/install
编译参数如下:
./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl --with-openssl
编译参数详解:
--prefix=/usr/local/php-fpm 指定安装路径
--with-config-file-path=/usr/local/php-fpm/etc 指定配置文件路径
--enable-fpm 开启fpm功能(因为要对接Nginx)
--with-fpm-user=php-fpm 指定fpm的用户
--with-fpm-group=php-fpm 指定fpm的组
--with-mysql=/usr/local/mysql 连接MySQL(兼容老版本)
--with-mysqli=/usr/local/mysql/bin/mysql_config 连接MySQL(新版本)
--with-pdo-mysql=/usr/local/mysql 连接MySQL的一种方式
--with-mysql-sock=/tmp/mysql.sock 指定MySQL的socket
添加PHP的各种模块
--with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl --with-openssl
编译过程中的错误与解决方法
错误1:
checking for cc ... no
checking for gcc ... no
解决方法:安装编译器 yum install -y gcc
错误2:
configure: error: libxml2 not found. Please check your libxml2 installation.
解决方法:yum list |grep libxml2(一般都是缺少开发包devel,所以此处安装 yum install -y libxml2-devel )
[root@JSH-01 php-7.3.2]# yum list |grep libxml2
libxml2.x86_64 2.9.1-6.el7_2.3 @anaconda
libxml2.i686 2.9.1-6.el7_2.3 base
libxml2-devel.i686 2.9.1-6.el7_2.3 base
libxml2-devel.x86_64 2.9.1-6.el7_2.3 base
libxml2-python.x86_64 2.9.1-6.el7_2.3 base
libxml2-static.i686 2.9.1-6.el7_2.3 base
libxml2-static.x86_64 2.9.1-6.el7_2.3 base
mingw32-libxml2.noarch 2.9.3-1.el7 epel
mingw32-libxml2-static.noarch 2.9.3-1.el7 epel
mingw64-libxml2.noarch 2.9.3-1.el7 epel
mingw64-libxml2-static.noarch 2.9.3-1.el7 epel
错误3:
configure: error: Cannot find OpenSSL's <evp.h>
解决方法:yum install -y openssl-devel
[root@JSH-01 php-7.3.2]# yum list |grep -i OpenSSL (-i参数:忽略大小写)
openssl.x86_64 1:1.0.2k-8.el7 @anaconda
openssl-libs.x86_64 1:1.0.2k-8.el7 @anaconda
apr-util-openssl.x86_64 1.5.2-6.el7 base
globus-gsi-openssl-error.x86_64 4.0-1.el7 epel
globus-gsi-openssl-error-devel.x86_64 4.0-1.el7 epel
globus-gsi-openssl-error-doc.noarch 4.0-1.el7 epel
globus-openssl-module.x86_64 5.0-1.el7 epel
globus-openssl-module-devel.x86_64 5.0-1.el7 epel
globus-openssl-module-doc.noarch 5.0-1.el7 epel
mingw32-openssl.noarch 1.0.2h-1.el7 epel
mingw32-openssl-static.noarch 1.0.2h-1.el7 epel
mingw64-openssl.noarch 1.0.2h-1.el7 epel
mingw64-openssl-static.noarch 1.0.2h-1.el7 epel
openssl.x86_64 1:1.0.2k-16.el7 base
openssl-devel.i686 1:1.0.2k-16.el7 base
openssl-devel.x86_64 1:1.0.2k-16.el7 base
openssl-libs.i686 1:1.0.2k-16.el7 base
openssl-libs.x86_64 1:1.0.2k-16.el7 base
openssl-perl.x86_64 1:1.0.2k-16.el7 base
openssl-pkcs11.x86_64 0.4.8-1.el7 epel
openssl-static.i686 1:1.0.2k-16.el7 base
openssl-static.x86_64 1:1.0.2k-16.el7 base
openssl098e.i686 0.9.8e-29.el7.centos.3 base
openssl098e.x86_64 0.9.8e-29.el7.centos.3 base
perl-Crypt-OpenSSL-Bignum.x86_64 0.04-18.el7 base
perl-Crypt-OpenSSL-RSA.x86_64 0.28-7.el7 base
perl-Crypt-OpenSSL-Random.x86_64 0.04-21.el7 base
perl-Crypt-OpenSSL-X509.x86_64 1.803-4.el7 epel
pyOpenSSL.x86_64 0.13.1-4.el7 base
pyOpenSSL-doc.noarch 0.13.1-4.el7 base
rubygem-openssl_cms_2_0_0.x86_64 0.0.2-1.20140212git7fea071.el7 epel
rubygem-openssl_cms_2_0_0-doc.noarch 0.0.2-1.20140212git7fea071.el7 epel
xmlsec1-openssl.i686 1.2.20-7.el7_4 base
xmlsec1-openssl.x86_64 1.2.20-7.el7_4 base
xmlsec1-openssl-devel.i686 1.2.20-7.el7_4 base
xmlsec1-openssl-devel.x86_64 1.2.20-7.el7_4 base
错误4:
checking for cURL 7.15.5 or greater... configure: error: cURL version 7.15.5 or later is required to compile php with cURL support
解决方法:yum install -y libcurl-devel
[root@JSH-01 ~]# yum list |grep curl
curl.x86_64 7.29.0-42.el7 @anaconda
libcurl.x86_64 7.29.0-42.el7 @anaconda
python-pycurl.x86_64 7.19.0-19.el7 @anaconda
collectd-curl.x86_64 5.8.1-1.el7 epel
collectd-curl_json.x86_64 5.8.1-1.el7 epel
collectd-curl_xml.x86_64 5.8.1-1.el7 epel
curl.x86_64 7.29.0-51.el7 base
curlftpfs.x86_64 0.9.2-14.el7 epel
flickcurl.x86_64 1.25-2.el7 epel
flickcurl-devel.x86_64 1.25-2.el7 epel
libcurl.i686 7.29.0-51.el7 base
libcurl.x86_64 7.29.0-51.el7 base
libcurl-devel.i686 7.29.0-51.el7 base
libcurl-devel.x86_64 7.29.0-51.el7 base
mingw32-curl.noarch 7.47.0-1.el7 epel
mingw32-curl-static.noarch 7.47.0-1.el7 epel
mingw64-curl.noarch 7.47.0-1.el7 epel
mingw64-curl-static.noarch 7.47.0-1.el7 epel
nbdkit-plugin-curl.x86_64 1.2.7-2.el7 epel
ocaml-curl.x86_64 0.7.5-3.el7 epel
ocaml-curl-devel.x86_64 0.7.5-3.el7 epel
python34-pycurl.x86_64 7.43.0-5.el7 epel
uwsgi-alarm-curl.x86_64 2.0.17.1-1.el7 epel
uwsgi-plugin-curl-cron.x86_64 2.0.17.1-1.el7 epel
[root@JSH-01 ~]# yum install -y libcurl-devel
错误5:
configure: error: jpeglib.h not found.
解决方法:yum install -y libjpeg-turbo-devel
[root@JSH-01 php-7.3.2]# yum list |grep jpeg
jpeginfo.x86_64 1.6.1-2.el7 epel
jpegoptim.x86_64 1.4.6-1.el7 epel
libjpeg-turbo.i686 1.2.90-6.el7 base
libjpeg-turbo.x86_64 1.2.90-6.el7 base
libjpeg-turbo-devel.i686 1.2.90-6.el7 base
libjpeg-turbo-devel.x86_64 1.2.90-6.el7 base
libjpeg-turbo-static.i686 1.2.90-6.el7 base
libjpeg-turbo-static.x86_64 1.2.90-6.el7 base
libjpeg-turbo-utils.x86_64 1.2.90-6.el7 base
mingw32-libjpeg-turbo.noarch 1.3.1-4.el7 epel
mingw32-libjpeg-turbo-static.noarch 1.3.1-4.el7 epel
mingw64-libjpeg-turbo.noarch 1.3.1-4.el7 epel
mingw64-libjpeg-turbo-static.noarch 1.3.1-4.el7 epel
openjpeg.x86_64 1.5.1-18.el7 base
openjpeg-devel.i686 1.5.1-18.el7 base
openjpeg-devel.x86_64 1.5.1-18.el7 base
openjpeg-libs.i686 1.5.1-18.el7 base
openjpeg-libs.x86_64 1.5.1-18.el7 base
openjpeg2.x86_64 2.3.0-6.el7 epel
openjpeg2-devel.x86_64 2.3.0-6.el7 epel
openjpeg2-devel-docs.noarch 2.3.0-6.el7 epel
openjpeg2-tools.x86_64 2.3.0-6.el7 epel
turbojpeg.i686 1.2.90-6.el7 base
turbojpeg.x86_64 1.2.90-6.el7 base
turbojpeg-devel.i686 1.2.90-6.el7 base
turbojpeg-devel.x86_64 1.2.90-6.el7 base
错误6:
configure: error: png.h not found.
解决方法: yum install -y libpng-devel
[root@JSH-01 php-7.3.2]# yum list |grep png|grep devel
libpng-devel.i686 2:1.5.13-7.el7_2 base
libpng-devel.x86_64 2:1.5.13-7.el7_2 base
libpng12-devel.i686 1.2.50-10.el7 base
libpng12-devel.x86_64 1.2.50-10.el7 base
pnglite-devel.x86_64 0.1.17-1.el7.8 epel
错误7:
configure: error: freetype-config not found.
解决方法:yum install -y freetype-devel
[root@JSH-01 php-7.3.2]# yum list |grep freetype|grep devel
freetype-devel.i686 2.8-12.el7_6.1 updates
freetype-devel.x86_64 2.8-12.el7_6.1 updates
错误8:提示mysql的版本不对,即安装的mysql版本太新
configure: error: wrong mysql library version or lib not found. Check config.log for more information.
解决方法:下载一个低版本的MySQL或者MariaDB(不需要安装)
在 /usr/local/src/ 目录中下载MySQL5.6版本的二进制包、并解压缩,修改编译参数
[root@JSH-01 src]# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz
[root@JSH-01 src]# tar zxf mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz
[root@JSH-01 src]# mv mysql-5.6.43-linux-glibc2.12-x86_64 /usr/local/mysql5.6
新编译参数:
./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql5.6 --with-mysqli=/usr/local/mysql5.6/bin/mysql_config --with-pdo-mysql=/usr/local/mysql5.6 --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl --with-openssl
警告:新版本的编译已经不需要如下的参数。所以可以在编译参数中删除。当然加上也不影响编译。
configure: WARNING: unrecognized options: --with-mysql, --with-mcrypt, --enable-gd-native-ttf
3.2 编译第二步:make将源码文件编译为二进制文件(通过使用GCC编译)
Build complete. #看到该提示,表示编译完成
Don't forget to run 'make test'.
[root@JSH-01 php-7.3.2]# echo $? #查看编译过程是够成功,如果是0则表示成功
0
3.3 编译第三步:make install 安装
[root@JSH-01 php-7.3.2]# ls /usr/local/php-fpm/ #安装完成后查看该目录的内容
bin etc include lib php sbin var #配置文件在 /etc/目录中
[root@JSH-01 php-7.3.2]# cd /usr/local/php-fpm/etc/
[root@JSH-01 etc]# ls
pear.conf php-fpm.conf.default php-fpm.d
4、拷贝生成配置文件 php-fpm.conf 否则PHP无法启动
[root@JSH-01 etc]# cp php-fpm.conf.default php-fpm.conf #复制生成配置文件,否则PHP无法启动
[root@JSH-01 etc]# ls
pear.conf php-fpm.conf php-fpm.conf.default php-fpm.d
5、拷贝生成配置文件 php.ini 到 /usr/local/php-fpm/etc/目录下
默认PHP的源码包中有:php.ini-development(开发环境) 和 php.ini-production(生产环境)根据需要拷贝生成。
如果用于开发、测试环境则拷贝php.ini-development(开发环境)生成配置文件 php.ini;
如果用于生产环境则拷贝php.ini-production(生产环境)生成配置文件 php.ini;
[root@JSH-01 php-7.3.2]# cp php.ini-development /usr/local/php-fpm/etc/php.ini
5、配置启动脚本并设置权限
[root@JSH-01 php-7.3.2]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@JSH-01 php-7.3.2]# chmod 755 /etc/init.d/php-fpm
6、设置PHP开机启动
[root@JSH-01 php-7.3.2]# chkconfig --add php-fpm
[root@JSH-01 php-7.3.2]# chkconfig php-fpm on
7、启动PHP服务 service php-fpm start
报错1:
[root@JSH-01 php-7.3.2]# service php-fpm start
Starting php-fpm [01-Mar-2019 11:17:58] WARNING: Nothing matches the include pattern '/usr/local/php-fpm/etc/php-fpm.d/*.conf' from /usr/local/php-fpm/etc/php-fpm.conf at line 143.
[01-Mar-2019 11:17:58] ERROR: No pool defined. at least one pool section must be specified in config file
[01-Mar-2019 11:17:58] ERROR: failed to post process the configuration
[01-Mar-2019 11:17:58] ERROR: FPM initialization failed
failed
解决方法:在目录 /usr/local/php-fpm/etc/php-fpm.d/ 拷贝生成配置文件 www.conf
[root@JSH-01 php-7.3.2]# cd /usr/local/php-fpm/etc/php-fpm.d/
[root@JSH-01 php-fpm.d]# ls
www.conf.default
[root@JSH-01 php-fpm.d]# cp www.conf.default www.conf
报错2:
[root@JSH-01 php-fpm.d]# service php-fpm start
Starting php-fpm [01-Mar-2019 11:28:07] ERROR: [pool www] cannot get uid for user 'php-fpm'
[01-Mar-2019 11:28:07] ERROR: FPM initialization failed
failed
解决方法:创建用户 php-fpm (因为编译的时候未创建)
[root@JSH-01 php-fpm.d]# useradd php-fpm
8、再次启动,成功后检查服务及端口 9000
[root@JSH-01 php-fpm.d]# service php-fpm start
Starting php-fpm done
[root@JSH-01 php-fpm.d]# ps aux |grep php-fpm
root 15099 0.0 0.2 127020 4220 ? Ss 11:29 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 15100 0.0 0.2 127020 4152 ? S 11:29 0:00 php-fpm: pool www
php-fpm 15101 0.0 0.2 127020 4152 ? S 11:29 0:00 php-fpm: pool www
root 16510 0.0 0.0 112632 660 pts/0 D+ 11:31 0:00 grep --color=auto php-fpm
[root@JSH-01 php-fpm.d]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3207/sshd
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 15099/php-fpm: mast
tcp6 0 0 :::3306 :::* LISTEN 19939/mysqld
四、编译安装Nginx
1、Nginx官网 http://nginx.org/
Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
Stable version:最新稳定版,生产环境上建议使用的版本
Legacy versions:遗留的老版本的稳定版
2、下载
[root@JSH-01 php-fpm.d]# cd /usr/local/src
[root@JSH-01 src]# wget http://nginx.org/download/nginx-1.14.2.tar.gz
本次学习安装使用 Stable version 1.14.2 版本
3、解压缩
[root@JSH-01 src]# tar zxvf nginx-1.14.2.tar.gz
4、编译
编译参数如下:
./configure --prefix=/usr/local/nginx --with-http_ssl_module
[root@JSH-01 src]# cd nginx-1.14.2 #进入文件目录
[root@JSH-01 nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module #编译
[root@JSH-01 nginx-1.14.2]# echo $? #检查编译过程是否成功,0表示成功
0
5、编译 make
6、编译安装 make install
7、Nginx配置脚本
[root@JSH-01 ~]# ls /usr/local/nginx/conf/nginx.conf
8、启动Nginx服务: /usr/local/nginx/sbin/nginx
[root@JSH-01 nginx]# /usr/local/nginx/sbin/nginx
[root@JSH-01 nginx]# ps aux|grep nginx #访问网站时使用的为 worker process 进程
root 12167 0.0 0.0 45896 1120 ? Ss 16:10 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody 12168 0.0 0.1 46344 1896 ? S 16:10 0:00 nginx: worker process
root 13114 0.0 0.0 112660 968 pts/0 R+ 16:11 0:00 grep --color=auto nginx
[root@JSH-01 nginx]# netstat -lntp |grep nginx #监控的为80端口
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 12167/nginx: master