编译安装LNMP

1. MySQL的编译安装:

1. 增加一个mysql用户:-M就不生成家目录

# useradd -s /sbin/nologin -M mysql

2. 在data目录下面建立一个mysql目录,并修改权限:-p创建级联目录,-R继承权限

# mkdir -p /data/mysql
# chown -R mysql:mysql /data/mysql

3. 下载MySQL安装包:下载地址选择的是搜狐镜像:mirrors.sohu.com,需要其余版本的可以在里面自己找。源码包的大小目前不超过100M(2016年)。

# cd /usr/local/src
# wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.11.tar.gz

4. 下载完成后,将mysql解压并进行cmake和后续操作:

# tar zxvf mysql-5.7.11.tar.gz
# cd mysql-5.7.11
# cmake 
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
-DMYSQL_DATADIR=/data/mysql/
-DSYSCONFDIR=/etc 
-DWITH_MYISAM_STORAGE_ENGINE=1 
-DWITH_INNOBASE_STORAGE_ENGINE=1 
-DWITH_MEMORY_STORAGE_ENGINE=1 
-DWITH_READLINE=1 
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock 
-DMYSQL_TCP_PORT=3306 
-DENABLED_LOCAL_INFILE=1 
-DWITH_PARTITION_STORAGE_ENGINE=1 
-DEXTRA_CHARSETS=all 
-DDEFAULT_CHARSET=utf8 
-DDEFAULT_COLLATION=utf8_general_ci

# make && make install

因为MySQL本身很大,所以,make的时间会非常长。

5. 下面进行初始化:

./scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql

出现错误: bash: ./scripts/mysql_install_db: 权限不够;查询./scripts/mysql_install_db的权限,发现没有x:

# ll ./scripts/mysql_install_db
-rw-r--r-- 1 mysql mysql 33853 12月  3 18:24 ./scripts/mysql_install_db

添加x权限,重新初始化:

# chmod a+x ./scripts/mysql_install_db
# ./scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql

6. 初始化成功,出现两个 OK,说明初始化成功。拷贝配置文件到相应位置:

# cp my.cnf /etc/my.cnf
## 覆盖原来的my.cnf
# cd support-files/
# cp mysql.server /etc/init.d/mysqld
# chmod 755 !$
# /etc/init.d/mysqld start
# ps aux |grep mysqld

启动MySQL服务以后,在进程里面可以看到mysqld。

2. php的编译安装

针对Nginx的php安装和针对apache的php安装是有区别的。区别在于,Nginx中的php是以fastcgi的方式结合nginx的。可以理解为nginx代理了php的fastcgi,而apache是把php作为自己的模块来调用的。
PHP官方下载地址: http://www.php.net/downloads.php,以5.4版本为例:

php和nginx的安装没有顺序,下面就先安装php。

1. 下载和建立用户

# cd /usr/local/src
# wget http://au1.php.net/distributions/php-5.4.44.tar.bz2
# tar jxf php-5.4.44.tar.bz2
# useradd -s /sbin/nologin php-fpm

2. 配置编译参数:

# cd php-5.4.44
./configure 
--prefix=/usr/local/php 
--with-config-file-path=/usr/local/php/etc 
--enable-fpm 
--with-fpm-user=php-fpm 
--with-fpm-group=php-fpm 
--with-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 
--enable-zend-multibyte 
--disable-ipv6 
--with-pear 
--with-curl 
--with-openssl

3. 安装 

# make && make install

4.修改配置文件:

# cp php.ini-production /usr/local/php/etc/php.ini
# > /usr/local/php/etc/php-fpm.conf
## 清空配置
# vim !$ ## 添加如下配置: [global] pid = /usr/local/php/var/run/php-fpm.pid error_log = /usr/local/php/var/log/php-fpm.log [www] listen = /tmp/php-fcgi.sock user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024 ## 保存配置文件后,检验配置是否正确的方法为: # /usr/local/php/sbin/php-fpm -t,可以设立一个alias。

5. 启动php
首先要拷贝一个启动脚本到/etc/init.d/下

# cp /usr/local/src/php-5.3.27/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# chmod 755 /etc/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on
## 上面添加开机启动
# useradd -s /sbin/nologin -M php-fpm
## 在LNMP环境中,php是以一个服务方式来提供的,配置的时候,user = php-fpm; group = php-fpm就指定了这个用户,因此,需要建立一个php-fpm不可登录的账户来运行php-fpm服务。
# service php-fpm start
# ps aux |grep php-fpm

如上,如果可以看到php-fpm的进程(20余个),说明配置成功。

3. Nginx的编译安装

1. 下载、解压Nginx

# cd /usr/local/src/
# wget http://nginx.org/download/nginx-1.8.0.tar.gz
# tar zxvf nginx-1.8.0.tar.gz

2. 配置:

# cd nginx-1.8.0
# ./configure 
--prefix=/usr/local/nginx 
--with-http_realip_module 
--with-http_sub_module 
--with-http_gzip_static_module 
--with-http_stub_status_module 
--with-pcre

3. 编译、安装Nginx

# make && make install

4. 启动nginx,检查nginx是否启动:

# /usr/local/nginx/sbin/nginx
# ps aux |grep nginx

  【1】nginx启动脚本和配置文件

  1. 编写启动脚本:

# vim /etc/init.d/nginx

  将下面内容写入shell脚本:

#!/bin/bash
# chkconfig: - 30 21
# description: http service.
# Source Function Library
. /etc/init.d/functions
# Nginx Settings

NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"

start() {
        echo -n $"Starting $prog: "
        mkdir -p /dev/shm/nginx_temp
        daemon $NGINX_SBIN -c $NGINX_CONF
        RETVAL=$?
        echo
        return $RETVAL
}

stop() {
        echo -n $"Stopping $prog: "
        killproc -p $NGINX_PID $NGINX_SBIN -TERM
        rm -rf /dev/shm/nginx_temp
        RETVAL=$?
        echo
        return $RETVAL
}

reload(){
        echo -n $"Reloading $prog: "
        killproc -p $NGINX_PID $NGINX_SBIN -HUP
        RETVAL=$?
        echo
        return $RETVAL
}

restart(){
        stop
        start
}

configtest(){
    $NGINX_SBIN -c $NGINX_CONF -t
    return 0
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  reload)
        reload
        ;;
  restart)
        restart
        ;;
  configtest)
        configtest
        ;;
  *)
        echo $"Usage: $0 {start|stop|reload|restart|configtest}"
        RETVAL=1
esac

exit $RETVAL

  保存后,更改权限,添加到开机启动:

# chmod 755 /etc/init.d/nginx
# chkconfig --add nginx
# chkconfig nginx on

  【2】Nginx的php解析功能添加

要支持php的解析,首先要修改配置文件,将PHP解析部分注释打开,修改默认的root目录路径,这样就可以在给定的路径下面对php进行解析了。

# vim /usr/local/nginx/conf/nginx.conf 
## 打开如下内容的注释:
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}

注意,上面倒数第三行/usr/local/nginx/html是默认的访问路径,配置错误会显示:502 Bad Gateway!

# cd /usr/local/nginx/html
# vim 1.php
## 写入如下内容:
<?php
phpinfo ();
?>

在浏览器中输入:192.168.220.11/1.php,如果能看到如下图般的php页面,说明配置正确:

4. 参数调优

【1】修改Nginx配置文件:

清空原来的配置文件:

# > /usr/local/nginx/conf/nginx.conf
# vim /usr/local/nginx/conf/nginx.conf
## 写入如下内容:
user nobody nobody;
worker_processes 2;
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;

events
{
    use epoll;
    worker_connections 6000;
}

http
{
    include mime.types;
    default_type application/octet-stream;
    server_names_hash_bucket_size 3526;
    server_names_hash_max_size 4096;
    log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
    '$host "$request_uri" $status'
    '"$http_referer" "$http_user_agent"';
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 30;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    connection_pool_size 256;
    client_header_buffer_size 1k;
    large_client_header_buffers 8 4k;
    request_pool_size 4k;
    output_buffers 4 32k;
    postpone_output 1460;
    client_max_body_size 10m;
    client_body_buffer_size 256k;
    client_body_temp_path /usr/local/nginx/client_body_temp;
    proxy_temp_path /usr/local/nginx/proxy_temp;
    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
    fastcgi_intercept_errors on;
    tcp_nodelay on;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/css text/htm application/xml;
    ## 如下打开vhosts目录的配置开关
    include vhosts/*.conf; 
}

检查配置有无错误的命令:

# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

显示如上内容,说明没有配置错误。另外,我们自定义的Nginx启动脚本也是可以检测语法错误的:

# /etc/init.d/nginx configtest

功能和上面的命令一样。

【2】关闭默认虚拟主机:

建立vhosts目录:

# cd /usr/local/nginx/conf
# mkdir vhosts

建立默认虚拟主机配置文件,禁止ip和非指定域名访问:

# cd vhosts/
# vim default.conf
## 写入如下内容:
server
{
    listen 80 default_server;
    server_name localhost;
    index index.html index.htm index.php;
    root /tmp/123;
    deny all;
}

其中,/tmp/123需要创建,里面不用放文件,空目录即可。deny all表示一切非指定域名、或者ip直接访问的请求全部被禁止。

【3】配置一个可访问域名:

# vim aaa.conf
# 写入如下内容: 
server { listen 80;
   ## 指定网址域名
    server_name aaa.com;
    index index.html index.htm index.php;
   ## 指定家目录,网页文件放在这个目录
    root /usr/local/nginx/html;

    location ~ .php$ {
        include fastcgi_params;
     ## 配置支持socket模式,视情况而定
        fastcgi_pass unix:/tmp/www.sock;
        fastcgi_index index.php;
     ## 指定家目录路径
        fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
    }
}
system32driversetchosts

注意:需要管理员权限才能编辑,写入如下配置:

192.168.220.11   aaa.com

如此在浏览器输入地址:

http://aaa.com/1.php

是否能得到和上面一样的php页面?能的话,说明配置成功。

curl工具的测试方法如下:

# curl -xlocalhost:80 aaa.com/1.php -I
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Wed, 17 Feb 2016 14:47:47 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.4.44

显示200 OK,表示访问成功。如此,自定义的网页域名就设置成功了。

【4】php-fpm.conf的参数优化:

清空原来的php-fpm.conf,写入新内容:

# > /usr/local/php/etc/php-fpm.conf
# vim !$
## 写入如下内容:
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
[www]
listen = /tmp/www.sock
user = php-fpm
group = php-fpm
listen.owner = nobody
listen.group = nobody
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 10240

slowlog = /path/slow.log
request_slowlog_timeout = 1

php_admin_value[open_basedir]=/data/www/:/tmp/

其中,参数中的listen.owner = nobody,listen.group = nobody和的nginx的配置一致,否则,可能因为权限的问题导致无法访问目录,导致502 Bad Gateway! Slowlog的添加也有很重要的作用,可以方便在网页浏览变慢的时候,排除故障;open_basedir是开放的访问目录,用冒号进行扩展。

原文地址:https://www.cnblogs.com/llius/p/5196305.html