LNMP环境搭建

//////////////////////////LNMP环境搭建/////////////////////////////////////////

/////////////////////////////////目录/////////////////////////////////////////////
一、LNMP的安装
(1)MySQL
(2)PHP
(3)Nginx
二、LNMP的配置
(1)MySQL
(2)PHP
(3)Nginx

///////////////////////////////////////////////////////////////////////////////////
(1)Mysql的安装
1.解压后, mv mysql.... /usr/local/mysql
2.useradd -s /sbin/nologin mysql
3.mkdir -p /data/mysql
4.chown -R mysql:mysql /data/mysql
5../scripts/mysql_install_db --user=mysql --datadir=/data/mysql
6.cp support-files/my-large.cnf /etc/init.d/my.cnf
7.cp support-files/mysql.server /etc/init.d/mysqld
8.chmod 755 /etc/init.d/mysqld
9.vim /etc/init.d/mysqld 在里面修改datadir=/data/mysql,basedir=/usr/local/mysql
10.chkconfig --add mysqld
11.chkconfig mysqld on
12.service mysqld start 或者 /etc/init.d/mysqld start

(2)php安装
wget http://cn2.php.net/distributions/php-5.4.37.tar.bz2
tar jxf php-5.4.37.tar.bz2
useradd -s /sbin/nologin php-fpm
cd php-5.4.37
./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --with-fpm-user=daemon --with-fpm-group=daemon --enable-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 --disable-ipv6 --with-curl
make && make install

cp php.ini-development /usr/local/php-fpm/etc/php.ini

拷贝启动脚本:
cp /usr/local/src/php-5.4.37/sapi/fpm/init.d/php-fpm /etc/init.d/php-fpm
mv /usr/local/php-fpm/etc/php-fpm.conf.default /usr/local/php-fpm/etc/php-fpm.conf (其实就是改一下名字而已啦)
chmod 755 /etc/init.d/php-fpm
chkconfig --add php-fpm
service php-fpm start
chkconfig php-fpm on


(3)安装nginx
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.6.2.tar.gz
cd nginx-1.6.2
./configure --prefix=/usr/local/nginx --with-pcre
make && make install

启动nginx:(核心的文件)
/usr/local/nginx/sbin/nginx

二、LNMP的配置
(1)Mysql
1.编辑配置文件 /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/data/mysql

2.MySQL常用参数配置
在/etc/init.d/my.cnf
[mysqld]
socket = /tmp/mysqld.socket
为MySQL客户程序与服务器之间的本地通信制定一个套接字文件(Linux下默认是/var/lib.mysql/mysql.sock文件)

port = 3306
#指定MySQL侦听的端口

skip-name-resolve (反解析)
#指定MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间,但需要注意,如果开启选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求
↑这个类似我们sshd里面

key_buffer = 384M
#key_buffer是用于索引块得缓冲区大小,增加它可以得到更好处理的索引(对所有读和多重写),索引被所有的县城共享
key_buffer大小视内存大小而定

table_open_cache = 512
#MySQL每打开一个表,都会杜如一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才回去磁盘上读取,默认值64,假定系统有200个并发连接,则需要将此参数设置为200*N(N位每个连接所需要的文件描述符数目);当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上

max_allowed_packet = 4M
#接收的数据包大小;增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出场查询或者MySQLd必须返回打的结果时MySQLd才会分配更多内存。该变量之所以取较小默认值时一中预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因为偶然使用打的信息包而导致内存溢出

sort_buffer_stze = 2M
#没意思情况执行排序时适用的缓冲大小,如果想要增加ORDER BY的速度,首先可以让MySQL使用索引而不是额外的排序阶段,如果不能,可以尝试增加sort_buffer_size变量的大小

read_buffer_size = 2M
#读查询操作能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享,对表进行顺序扫描的请求分配一个读入缓冲区,MySQL会为他分配一段内存缓冲区,如果对表的顺序扫描请求非常平凡,并却你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高性能

join_buffer_size = 2M
#联合查询操作所能适用的缓冲区大小,和sort_buffer_size一样,改参数对应的分配内存也是每连接独享

query_cache_size = 2M
#指定MySQL查询结果缓冲区大小

read_md_buffer_size = 2M
#随机读缓冲区大小,按任意书序读取行时(例如,按照排序顺序),将分配一个随机读缓存区,进行排序查询时,MySQL会首先扫描一遍改缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值,但MySQL会为每个用户连接发放该缓冲空间,所以应尽量适当设置改配置,以避免内存开效果大

myisam_sort_buffer_size = 64M
#MyISAM表发生变化时重新排序所需的缓冲

thread_concurrency = 8
#最大并发线程数,取值为服务器逻辑CPU数量*2

thread_cache = 8
#该值表示可以重新利用保存在缓存中线程的数量,当断开连接时若缓存中海油空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么线程将被重新创建,设值规律为:1G内存设置为8,2G内存设置为16,4G以上设置为64

max_connections = 1000
#MySQL最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以适当调整该值,不能盲目提高设值,可通过conn%通配符查看当前状态的连接数量,以定夺值的大小

max_connect_errors = 6000
#对于同一主机,如果有超过该参数值个数的中断错误链接,则该主机将被禁止连接,如需要对该主机进行解禁,执行:FLUSH_HOST

open_files_limit = 65535
#MySQL打开的文件描述符限制,默认最小1024

skip_locking
#避免MySQL的外部锁定,减少出错几率增强稳定性

wait_timeout = 8
#表示空闲的连接超时时间,默认是28800s,这个参数适合interactive_timeout一起使用的,也就是说要想让wait_timeout生效,必须同时设置interactive_timeout

interactive_timeout = 8

log_query_time = 1
#慢查询日志的超时时间

log_slow_queries = /path/to/slow_queries
#慢查询日志路径,必须配合上面的参数一同使用

(2)PHP
php-fpm.conf
//把之前的内容清空,然后写入如下配置
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log

[www]
#资源池
listen = 127.0.0.1:9000
;listen = unix:/tmp/php-fcgi.sock;
user = daemon
group = daemon
listen.owner = nobody
#和nginx配置文件的user和group保持一致
#如果用的是sock形式,记得加这个listen.owner , listen.group
listen.group = nobody
#同上
pm.max = dynamic
#子进程相关的配置参数,dynamic表示动态的
pm.start._servers = 50
pm.min_spare_servers = 20
pm.max_spare_servers = 35
pm.max_requests = 500
#子进程的生命周期
rlimit_files = 1024
#文件描述符
slowlog = /usr/local/php-fpm/log/slow.log
request_slowlog_timeout = 1
#慢执行日志
php_admin_value[open_basedir]=/data/www/:/tmp/

配置多个pool资源池(目的是为了提供给多个特定的nignx主机使用,不同的站点)
[www2]
listen = 127.0.0.1:9001
user = daemon
group = daemon
listen.owner = nobody
listen.group = nobody
pm.max = dynamic
pm.start._servers = 50
pm.min_spare_servers = 20
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024

类似于httpd里面的东西,也是在[www]下面配置
open_basedir
php_admin_value[open_basedir]=/data/www/:/tmp/

动态、静态子进程pm = static/dynamic
如果选择static 则由pm.max_children指定固定的子进程
如果选择dynamic 则由以下参数决定:
pm.max_children ,子进程最大数
pm.start_servers, 启动时的进程数
pm.min_spare_servers ,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers ,保证空闲进程数的最大值,如果空闲进程大于此值,则进行清理
对于专用服务器,pm可以设置为static


******************************
php.ini php-fpm.conf的区别是什么
php.ini是我们的全局配置,可以配置时区。disfunction,错误日志等
php-fpm.conf是用来定义fpm相关的配置,池子,端口,类型

ini可以在Apache里面使用它,但是fpm不可以
******************************


(3)Nginx
1.nginx.conf配置参考如下:
user nobody nobody;
#使用哪个用户和组启动子进程
worker_processes 2;
error_log /usr/local/nginx/logs/nginx_error.log crit;
#crit是错误级别,这个是最水的,最宽松的是debug,还有notice
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;

include /usr/local/nginx/conf/vhosts/*.conf;
#这个是虚拟主机相关的配置文件
}

2.Nginx虚拟主机配置
看文档:Nginx虚拟主机配置

///////////////////////////////////////////////////////////////////////////////////
nginx搭建过程中遇到的问题:
nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
解决办法:
http://blog.csdn.net/llnara/article/details/8691049

原文地址:https://www.cnblogs.com/ImJerryChan/p/6250480.html