记录下CentOS7下手动部署Nginx+MySQL+PHP的方法[附修改Nginx的Hearder名称]

介绍:

Nginx (读“engine x”)是一款免费、开源、高性能的HTTP服务器。
Nginx 因性能稳定、功能丰富、配置简单、资源消耗低而著称。
本文介绍如何在Linux服务器(CentOS 7)上安装Nginx、MySQL和PHP7(或者PHP5),这个环境也简称LNMP或LEMP。
其中,Nginx和PHP的采用PHP-FPM方式通信。

更新系统

[[email protected] ~]# yum -y update && yum -y update

安装用到的工具

安装开发工具

$ yum -y update && yum -y upgrade  //更新系统组件
$ yum install -y vim screen //安装实用工具
$ screen -S install //使用screen防止ssh链路故障导致后续的编译步骤中断
$ yum install -y gcc gcc-c++ make cmake libxml2 libxml2-devel openssl-devel bison bison-devel make autoconf automake curl-devel gcc zlib-devel openssl pcre-devel gd kernel keyutils patch perl kernel-headers compat* mpfr cpp glibc libgomp libstdc++-devel ppl cloog-ppl keyutils-libs-devel libcom_err-devel libsepol-devel libselinux-devel krb5-devel zlib-devel libXpm* freetype libjpeg* libpng* ncurses* libtool* libxml2 libxml2-devel freetype-devel --skip-broken

建立运行网站和数据库必要的用户和组

添加运行nginx服务进程的用户

groupadd -r nginx 
useradd -r -g nginx nginx

建立安装临时目录

$ mkdir /make

下载源码包

【以下源码截至2018年11月9日均为最新】

Nginx:http://nginx.org/en/download.html
PHP:http://php.net/downloads.php
MySQL-5.7:https://dev.mysql.com/get/Downloads/MySQL-5.7/

$ wget http://nginx.org/download/nginx-1.15.6.tar.gz
$ wget http://au1.php.net/distributions/php-7.2.12.tar.gz
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-el7-x86_64.tar.gz

编译Nginx

安装 vim 和 unzip

下载软件用于编辑和解压缩文件。运行命令:

$ yum install -y vim unzip

linux 终端颜色修改

$ yum install -y vim
$ vim ~/.bashrc
PS1="\[\e[36;40m\][\[\e[31;40m\]\h\[\e[33;40m\]@\[\e[32;40m\]\u\[\e[33;40m\]@\[\e[36;40m\]\w\[\e[33;40m\]@\[\e[35;40m\]\#\[\e[36;40m\]]\[\e[34;40m\]~$ \[\e[0m\]"

在PS1中设置字符颜色的格式为:\[\e[F;Bm\]........\[\e[0m\],其中“F“为字体颜色,编号为30-37,“B”为背景颜色,编号为40-47,\[\e[0m\]作为颜色设定的结束。

颜色对照表:

F B color 备注
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色 在cmd里显示效果很差
35 45 紫红色 和powershell的紫色背景完全融为一体
36 46 青蓝色
37 47 白色

要使用颜色只需将对应数字套入设置格式中即可。 比如要设置命令行的格式为绿字黑底(\[\e[32;40m\]),显示当前用户的账号名称(\u)、主机的第一个名字(\h)、完整的当前工作目录名称(\w)、24小时格式时间(\t)。

设置vim 行号

$ vim   ~/.vimrc

在里面输入

set nu

下载完成后目录如下

[[email protected] make]$ ls
php-7.2.12.tar.gz nginx-1.15.6.tar.gz mysql-5.7.24-el7-x86_64.tar.gz

修改Nginx+编译

[[email protected] make]$ tar zxvf nginx-1.15.6.tar.gz

以下为修改nginx名称和版本号步骤【无需要可跳过】

以下选做

nginx.h

[[email protected] make]$ cd nginx-1.15.6/src/core
[[email protected] core]$ vi nginx.h

/*
* Copyright (C) Igor Sysoev
* Copyright (C) Nginx, Inc.
*/


#ifndef _NGINX_H_INCLUDED_
#define _NGINX_H_INCLUDED_


#define nginx_version 1013008
#define NGINX_VERSION "1.13.8" //版本号
#define NGINX_VER "nginx/" NGINX_VERSION //Nginx名称

#ifdef NGX_BUILD
#define NGINX_VER_BUILD NGINX_VER " (" NGX_BUILD ")"
#else
#define NGINX_VER_BUILD NGINX_VER
#endif

#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"


#endif /* _NGINX_H_INCLUDED_ */

ngx_http_header_filter_module.c

[[email protected] core]$ cd nginx-1.15.6/src/http
[[email protected] http]$ vi ngx_http_header_filter_module.c
/*
* Copyright (C) Igor Sysoev
* Copyright (C) Nginx, Inc.
*/


#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
#include <nginx.h>


static ngx_int_t ngx_http_header_filter_init(ngx_conf_t *cf);
static ngx_int_t ngx_http_header_filter(ngx_http_request_t *r);


static ngx_http_module_t ngx_http_header_filter_module_ctx = {
NULL, /* preconfiguration */
ngx_http_header_filter_init, /* postconfiguration */

NULL, /* create main configuration */
NULL, /* init main configuration */

NULL, /* create server configuration */
NULL, /* merge server configuration */

NULL, /* create location configuration */
NULL, /* merge location configuration */
};


ngx_module_t ngx_http_header_filter_module = {
NGX_MODULE_V1,
&ngx_http_header_filter_module_ctx, /* module context */
NULL, /* module directives */
NGX_HTTP_MODULE, /* module type */
NULL, /* init master */
NULL, /* init module */
NULL, /* init process */
NULL, /* init thread */
NULL, /* exit thread */
NULL, /* exit process */
NULL, /* exit master */
NGX_MODULE_V1_PADDING
};


static u_char ngx_http_server_string[] = "Server: nginx" CRLF; //改这里
static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;
………………………………

ngx_http_special_response.c

[[email protected] http]$ vi ngx_http_special_response.c
/*
* Copyright (C) Igor Sysoev
* Copyright (C) Nginx, Inc.
*/


#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
#include <nginx.h>

static ngx_int_t ngx_http_send_error_page(ngx_http_request_t *r,
ngx_http_err_page_t *err_page);
static ngx_int_t ngx_http_send_special_response(ngx_http_request_t *r,
ngx_http_core_loc_conf_t *clcf, ngx_uint_t err);
static ngx_int_t ngx_http_send_refresh(ngx_http_request_t *r);


static u_char ngx_http_error_full_tail[] =
"<hr><center>" NGINX_VER "</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;


static u_char ngx_http_error_build_tail[] =
"<hr><center>" NGINX_VER_BUILD "</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;


static u_char ngx_http_error_tail[] =
"<hr><center>nginx</center>" CRLF //改这里
"</body>" CRLF
"</html>" CRLF
;

编译Nginx

下面一步注意,如果你想搭建HTTPS站点,并想添加CHACHA20-Ploy1305 Cipher支持,请参考别的文章编译您的Nginx,以便和LiberSSL一起编译加入CHACHA20支持

在configure中可能遇到的问题:

  1. /configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using –without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using –with-pcre= option.

解决办法:安装pcre-devel
yum -y install pcre-devel

  1. /configure: error: the HTTP gzip module requires the zlib library. You can either disable the module by using –without-http_gzip_module option, or install the zlib library into the system, or build the zlib library statically from the source with nginx by using –with-zlib= option.

解决办法:安装zlib-devel
yum install -y zlib-devel

[[email protected] http]$ cd 
[[email protected] http]$ yum groupinstall "Development tools"
[[email protected] http]$ yum -y install gcc wget gcc-c++ automake autoconf libtool libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed pcre-devel openssl-devel
[[email protected] http]$./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--user=nginx \
--group=nginx \
--with-pcre \
--with-http_v2_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-threads \
--with-stream \
--with-stream_ssl_module
[[email protected] nginx-1.15.6]$ make -j2 && make install
[[email protected] nginx-1.15.6]$ mkdir -pv /var/tmp/nginx/client

配置Nginx

进入conf目录

[[email protected] nginx-1.15.6]$ cd /etc/nginx/

然后编辑nginx.conf为如下内容

user nginx www;
worker_processes auto;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

pid /var/run/nginx.pid;


events {
worker_connections 1024;
}


http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;

# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;

# location / {
# root html;
# index index.html index.htm;
# }
#}


# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;

# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;

# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;

# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

# location / {
# root html;
# index index.html index.htm;
# }
#}
#虚拟主机
include /home/wwwroot/vhost/*.conf;
}

看到配置文件的最后一句,大家应该能想到这么做是为了多虚拟主机支持,可以分别管理每个虚拟主机的配置文件。当然如果你确定你的服务器上不会有第二个网站,也可以把server节配置都写到nginx.conf文件里。

配置虚拟主机

虚拟主机目录为:/home/wwwroot/vhost/

Demo:

server
{
listen 80; #监听端口
listen [::]:80; #IPV6支持
#listen 443 spdy; #https
#listen [::]:443 spdy; #IPV6 HTTPS
server_name www.example.com; #您的域名
index index.html index.php;

set $subdomain '';
root /home/www/www.example.com$subdomain;
#include /home/www/rewrite/xxx.conf; #包含rewrite规则文件

### SSL 配置,如果您需要,请取消本段的注释并做好配置
#ssl on;
#ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
#ssl_ciphers CHACHA20:GCM:CFB:HIGH:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
#add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
#ssl_prefer_server_ciphers on;
#ssl_stapling on;
#ssl_stapling_verify on;
#ssl_certificate /path/to/public.crt;
#ssl_certificate_key /path/to/private.key;
############

location ~ .*.php(/.*)*$
{
fastcgi_pass unix:/tmp/php-cgi-www.example.com.sock;
fastcgi_index index.php;
include fastcgi.conf;
#fastcgi_param HTTPS $https if_not_empty; #如果是HTTPS站点请取消此行注释
fastcgi_param DOCUMENT_ROOT /home/wwwroot/domain/www.example.com$subdomain;
fastcgi_param SCRIPT_FILENAME /home/wwwroot/domain/www.example.com$subdomain$fastcgi_script_name;
}

location ~ .*.(gif|jpg|jpeg|png|bmp|swf|flv|mp3|wma)$
{
expires 30d;
}

location ~ .*.(js|css)$
{
expires 12h;
}

access_log off;
error_log /dev/null;
}

添加SysV 启动脚本

[[email protected] nginx-1.15.6]$ vim /etc/init.d/nginx

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
killall -9 nginx
}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac

赋予脚本执行权限

[[email protected] nginx-1.15.6]$ chmod +x /etc/init.d/nginx

添加至服务管理列表,设置开机启动

[[email protected] nginx-1.15.6]$ chkconfig --add nginx
[[email protected] nginx-1.15.6]$ chkconfig nginx on

启动服务

[[email protected] nginx-1.15.6]$ service nginx start

编译安装MySQL

依次执行以下命令检查系统中是否存在使用 rpm 安装的 MySQL 或者 MariaDB。

$ rpm -qa | grep mysql
$ rpm -qa | grep mariadb

如果已经安装,则运行以下任一个命令删除。

$ rpm -e 软件名    #注意:这里的软件名必须包含软件的版本信息,如rpm -e mariadb-libs-5.5.52-1.el7.x86_64。一般使用此命令即可卸载成功。
$ rpm -e --nodeps 软件名 #卸载不成功时使用此命令强制卸载

依次运行以下命令安装 MySQL。

$ yum install -y libaio-*    #安装依赖
$ mkdir -p /usr/local/mysql
$ cd /make
$ tar -xzvf mysql-5.7.24-el7-x86_64.tar.gz
$ mv mysql-5.7.24-el7-x86_64/* /usr/local/mysql/

依次运行以下命令建立 mysql 组和用户,并将 mysql 用户添加到 mysql 组。

$ groupadd mysql
$ useradd -g mysql -s /sbin/nologin mysql

运行命令初始化 MySQL 数据库。

$ /usr/local/mysql/bin/mysqld --initialize-insecure --datadir=/usr/local/mysql/data/ --user=mysql

这一步可能会报错:/usr/local/mysql/bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
这是缺少numactl。这个时候运行yum -y install numactl就可以解决这个问题了. 

更改 mysql 安装目录的属性

$ chown -R mysql:mysql /usr/local/mysql

依次运行以下命令设置开机自启动

$ cd /usr/local/mysql/support-files/
$ cp mysql.server /etc/init.d/mysqld
$ chmod +x /etc/init.d/mysqld
$ chkconfig --add mysqld
$ chkconfig mysqld on

设置环境变量

$ vim /root/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/mysql/lib
# 再原来的基础上加入mysql
$ source /root/.bash_profile #重新执行文件

启动服务

$ service mysqld start

编译安装PHP-fpm

Nginx本身不能处理PHP,作为web服务器,当它接收到请求后,不支持对外部程序的直接调用或者解析,必须通过FastCGI进行调用。如果是PHP请求,则交给PHP解释器处理,并把结果返回给客户端。PHP-FPM是支持解析php的一个FastCGI进程管理器。提供了更好管理PHP进程的方式,可以有效控制内存和进程、可以平滑重载PHP配置。

安装依赖包

[[email protected]@/home/[email protected]]$ yum install -y libmcrypt* mhash* libxml2 libxml2-devel bzip2 bzip2-devel freetype.x86_64 freetype-devel.x86_64 libjpeg-turbo-devel libcurl-devel libpng libpng-devel

可能会提示:No package libmcrypt* available.
此时拓展下更新源然后更新下就OK了

[[email protected]@/home/[email protected]]$ yum  install epel-release
[[email protected]@/home/[email protected]]$ yum update
[[email protected]@/home/[email protected]]$ yum install libmcrypt libmcrypt-devel mcrypt mhash

然后进入make目录 解压php并编译安装

[[email protected]@/[email protected]]~$ cd php-7.2.12
[[email protected]@/make/[email protected]]~$ ./configure \
--prefix=/usr/local/php \
--enable-mysqlnd \
--with-mysqli=mysqlnd --with-openssl \
--with-pdo-mysql=mysqlnd \
--enable-mbstring \
--with-freetype-dir \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-zlib --with-libxml-dir=/usr \
--enable-xml --enable-sockets \
--with-mcrypt --with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-maintainer-zts \
--disable-fileinfo --with-bz2\
--enable-fpm\
--with-curl\
--enable-pcntl\
--without-pear

可能会提示configure: WARNING: unrecognized options: --with-mcrypt
根据:https://github.com/kasparsd/php-7-debian/issues/55

In PHP 7.2 the following configuration options are no longer supported

  • with-mcrypt
  • with-mysql

Remove ‘with-mcrypt’ - it’s deprecated since PHP 7.1

PHP7.1开始已经移除了mcrypt
因此删除上面的 --with-mcrypt --with-config-file-path=/etc \再执行遍

[[email protected]@/make/[email protected]]~$ ./configure \
--prefix=/usr/local/php \
--enable-mysqlnd \
--with-mysqli=mysqlnd --with-openssl \
--with-pdo-mysql=mysqlnd \
--enable-mbstring \
--with-freetype-dir \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-zlib --with-libxml-dir=/usr \
--enable-xml --enable-sockets \
--with-config-file-scan-dir=/etc/php.d \
--enable-maintainer-zts \
--disable-fileinfo --with-bz2\
--enable-fpm\
--with-curl\
--enable-pcntl\
--without-pear

然后make -j6 && make -j6 install

添加php和php-fpm配置文件

[[email protected]@/[email protected]]~$ cp /make/php-7.2.12/php.ini-production /etc/php.ini
[[email protected]@/[email protected]]~$ cd /usr/local/php/etc/
[[email protected]@/[email protected]]~$ cp php-fpm.conf.default php-fpm.conf
[[email protected]@/usr/local/php/[email protected]]~$ sed -i '[email protected];pid = run/[email protected] = /usr/local/php/var/run/[email protected]' php-fpm.conf

设置PHP环境变量

[[email protected]@/usr/local/php/[email protected]]~$ vi /root/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/mysql/lib:/usr/local/php/bin

在PATH后面加上 /usr/local/php/bin

[[email protected]@/usr/local/php/[email protected]]~$ source /root/.bash_profile  #重新执行文件

添加php-fpm启动脚本

[[email protected]@/usr/local/php/[email protected]]~$ cp /make/php-7.2.12/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[[email protected]@/usr/local/php/[email protected]]~$ chmod +x /etc/init.d/php-fpm

添加php-fpm至服务列表并设置开机自启

[[email protected]@/usr/local/php/[email protected]]~$ chkconfig --add php-fpm  
[[email protected]@/usr/local/php/[email protected]]~$ chkconfig --list php-fpm

Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.

If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.

php-fpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[[email protected]@/usr/local/php/[email protected]]~$ chkconfig php-fpm on
[[email protected]@/usr/local/php/[email protected]]~$ cd /usr/local/php/etc/php-fpm.d
[[email protected]@/usr/local/php/etc/[email protected]]~$ cp www.conf.default www.conf

启动服务

[[email protected]@/usr/local/php/etc/[email protected]]~$ service php-fpm start
Starting php-fpm done

添加nginx对fastcgi的支持

主文件模式

该步骤选做
默认的配置文件

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf

编辑/etc/nginx/nginx.conf,在所支持的主页面格式中添加php格式的主页,类似如下:

location / {
root /usr/local/nginx/html;
index index.php index.html index.htm;
}

取消一下内容前面的注释

location ~ \.php$ {
root /usr/local/nginx/html/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $doucment_root$fastcgi_script_name;
include fastcgi_params;
}

重新载入nginx的配置文件。

service nginx reload

虚拟主机模式

server
{
listen 80; #监听端口
listen [::]:80; #IPV6支持
#listen 443 spdy; #https
#listen [::]:443 spdy; #IPV6 HTTPS
server_name www.example.com; #您的域名
index index.php index.html index.php;

set $subdomain '';
root /home/www/www_example_com$subdomain;
#include /home/www/rewrite/xxx.conf; #包含rewrite规则文件

### SSL 配置,如果您需要,请取消本段的注释并做好配置
#ssl on;
#ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
#ssl_ciphers CHACHA20:GCM:CFB:HIGH:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
#add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
#ssl_prefer_server_ciphers on;
#ssl_stapling on;
#ssl_stapling_verify on;
#ssl_certificate /path/to/public.crt;
#ssl_certificate_key /path/to/private.key;
############

location ~ \.php$
{
root /home/www/www_example_com/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/www_example_com/$fastcgi_script_name;
include fastcgi_params;
}

location ~ .*.(gif|jpg|jpeg|png|bmp|swf|flv|mp3|wma)$
{
expires 30d;
}

location ~ .*.(js|css)$
{
expires 12h;
}

access_log off;
error_log /dev/null;
}

安装composer

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

注意

此时mysql是空密码。

安全起见,需要设置密码

mysql> set password for 'root'@'localhost'=password('123');
mysql> flush privileges;

nginx设置后可能会出现报错File not found
检查location ~ .php$ 配置项,发现了一行fastcgi_param的配置,然后将其改成了nginx的默认web目录,再次重启nginx服务后,发现可以进行访问了。
fastcgi_param SCRIPT_FILENAME /home/www/www_example_com/$fastcgi_script_name;

至此 LNMP部署完毕