文章目录
一、LNMP架构
LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。
Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统;
Nginx是一个高性能的HTTP和反向代理服务器;
Mysql是一个小型关系型数据库管理系统。
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
二、nginx功能配置
在上篇博客中,有详细的nginx安装编译过程,这里就不再赘述。为了实验方便,添加一个软链接,添加一个nginx用户:
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin #/usr/local/nginx为安装路径
useradd -M -d /usr/local/nginx -s /sbin/nologin nginx #添加用户nginx
1. 并发优化
编辑nginx的配置文件:
[root@servera ~]# vim /usr/local/nginx/conf/nginx.conf
user nginx;
worker_processes 2; //工作进程数,一般情况下设置成CPU的可用核数
worker_cpu_affinity 01 10; //在高并发情况下,通过设置将CPU和具体的进程绑定来降低由于多核CPU切换造成的寄存器等现场重建带来的性能损耗。
#最多开启8个,cpu有多少核,就有几位数,1代表内核开启,0代表内核关闭
worker_rlimit_nofile 65535; //worker进程的最大打开文件数限制,如果没有设置,这个值为操作系统的限制.
events {
//事件模块
worker_connections 65535; //单个工作进程并发连接数
multi_accept on //告诉nginx收到一个新连接通知后接收尽可能多的连接
use epoll; //use是个事件模块指令,用来指定Nginx的工作模式。对于Linux系统,epoll高校工作模式是首选。
}
httpd{
sendfile on; //开启文件高效传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。
#对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
tcp_nopush on; //可以防止网络和磁盘IO阻塞
tcp_nodelay on; //可以防止网络和磁盘IO阻塞
}
对于单个工作进程能够并发处理的最大连接数
nginx作为http服务器时,最大连接数 = worker_processes * worker_connections
nginx作为反向代理服务器,最大连接=worker_processes*worker_connections/2
nginx内核优化
在内核层面,Linux下高并发socket最大连接数所受的各种限制:
(1)修改用户进程 可打开文件数限制
[root@servera ~]# vim /etc/security/limits.conf
nginx - nofile 65535
(2)为了防止开机后,命令设定的内核层面的限制不生效,可以将参数写在文件中,使其永久生效,注意文件必须以.conf结尾:
[root@servera ~]# cd /etc/sysctl.d/
[root@servera sysctl.d]# vim nginx.conf #文件必须以.conf
net.ipv4.ip_local_port_range = 1024 65535 //修改网络内核对TCP连接的有关限制,设定本地端口区间为1024-65536
net.core.somaxconn = 2048 //限制接收新TCP连接侦听队列的大小
net.ipv4.tcp_tw_recycle = 1 //启用tcp连接timewait快速回收和重用
net.ipv4.tcp_tw_reuse = 1
[root@servera sysctl.d]# sysctl --system //热更新内核参数
2. 日志
2.1 日志轮询
通过脚本的方式完成
[root@servera ~]# vim /opt/nginxlog.sh
#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day).log //日志重命名,每天一次
kill -USR! `cat /usr/local/nginx/logs/nginx.pid`
[root@servera opt]# crontab -e //加入crontab定时任务
00 00 * * * /opt/nginxlog.sh &