- 前言
- 一、定义
- 二、Nginx优势
- 三、Nginx原理与应用
- 3.1 原理
- 3.2 应用
- 四、LNMP部署
- 五、Nginx配置详解(nginx.conf)
- 5.1 全局配置
- 5.2 性能配置(events)
- 5.3 网页配置(http)
- 六、Nginx优化
- 6.1 配置优化
- 6.1.1 版本号隐藏
- 6.1.2 设置防盗链
- 6.1.3 增加并发量/绑核
- 6.1.4 设置长链接
- 6.1.5 添加缓存
- 6.1.6 压缩传输
- 6.1.7 日志分割
- 6.2 内核优化
- 五、思维导图
- 六、结语
前言
本博客内容仅为记录博主思路,仅供参考,一切以自己实践结果为准。
一、定义
文章核心内容定义。
二、Nginx优势
- 量级轻、配置简单
- 成本低廉且开源
- 内存消耗低、10个Nginx约消耗150M
- 稳定性搞、宕机概率小
- 非阻塞、能处理高并发,约2-3w
- 有自我检查功能、可停用宕机服务器
三、Nginx原理与应用 3.1 原理
- 读取Nginx主配置文件:nginx.conf
- 调用fork函数创建子进程
- 子进程竞争accept链接
- 根据时间处理函数进行数据交换
- 主动/被动关闭链接
3.2 应用
- http静态页面处理服务器
- 虚拟主机
- 反向代理
- 安全管理
四、LNMP部署
一键部署LNMP脚本
五、Nginx配置详解(nginx.conf) 5.1 全局配置vim /usr/local/nginx/conf/nginx.conf #user nobody; #运行用户,若未设置运行用户,则默认用户为nobody worker_processes 1; #工作进程数量,一般设置与cpu内核数相同 #error_log logs/error.log; #取消注释错误日志存放位置 #pid logs/nginx.pid; #取消注释后进程PID号存放位置
5.2 性能配置(events)
use epoll; #添加epoll模型,提高性能 worker_connections 4096; #设置每个进程处理的最大连接数注:仍需考虑系统能打开的最大文件数限制(每个链接都会打开一个socket句柄文件); #ulimit -a 查看当前系统最大同时打开文件数 #ulimit -n 65535 临时修改系统最大打开文件数为65535 #vim /etc/security/limits.conf 永久修改系统最大打开文件数,需重启服务器生效(因此需要同步临时修改,做到不重启也能生效) #添加 * soft nofile 65535 *表示所有用户,对所有用户软限制为65535最大连接数 #添加 * hard nofile 65535 *表示所有用户,对所有用户硬限制为65535最大连接数
5.3 网页配置(http)
include mime.types;
#文件扩展名与文件类型映射表
default_tyoe 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;
#日志存储位置
#keepalive_timeout 0;
keepalive_timeout 65;
#长链接时间设置
#gzip on;
#gip模块,设置是否开启gizp压缩传输;
#子模块,设置web服务的监听配置
server{
listen 80;
#设置监听地址和端口,例:192.168.13.10:80
server_name localhost;
#站点域名,可以有多个,例:www.han.com www.wang.com
#charset utf-8;
#默认字符集,utf-8为万国字符集(通用的意思)
#server子配置,设置客户端访问匹配规则(普通)
location {
root html;
#网站首页根目录
index index.html index.htm;
#网站首页自动加载根目录中对应文件的内容,优先度从左到右
}
#server子配置,设置客户端访问匹配规则(正则)
location ~* (jpg|png|avi)$ {
#~代表采用正则表达式,*表示忽略大小写
rewrite /usr/local/nginx/html/steal.jpeg
#凡是复合匹配规则的,路径重写为新路径
}
error_page 500 502 503 504 /50x.html;
#网站首页错误页配置,显示内容及路径
}
六、Nginx优化 6.1 配置优化 6.1.1 版本号隐藏
http{
server_tokens off;
#http配置中添加tokens模块,可选择关闭版本号显示,也可选择修改显示的版本
}
6.1.2 设置防盗链
通过匹配访问路径,rewrite重写打到防盗效果6.1.3 增加并发量/绑核
cat /proc/cpuinfo | grep -c "physical id" #查看cpu核数 ps aux | grep nginx #查看nginx主进程中有几个子进程 worker_processes 2; #修改nginx.conf中分配给nginx的cpu线程数,一般与cpu线程总数相同或者2倍 worker_cpu_affinity 01 10; #绑核,防止产生cpu惊醒现象,此时为2核的配置,若是4核则绑核的配置为 0001 0010 0100 1000; worker_connections 1024; #设置每个线程数所能处理的最大连接数 修改系统最大打开文件数的限制(Linux内核)6.1.4 设置长链接 6.1.5 添加缓存
server{
location ~ .(gif|jpg|png) {
expires 1d;
#调用expires模块,将匹配的内容缓存1天
}
}
6.1.6 压缩传输
6.1.7 日志分割
#!/bin/bash
# Filename: fenge.sh
day=$(date -d "-1 day" "+%Y%m%d")
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path
通过-d判断日志目录是否存在,若不存在则创建目录
mv /usr/local/nginx/logs/access.log ${logs_path}/kgc.com.$day
mv移动日志文件并重命名
kill -USR1 $(cat $pid_path)
kill -USR1平滑重载Nginx服务,重新创建日志文件
find $logs_path -mtime +30 -exec rm -rf {} ;
find查找30天以上的日志,通过-exec传参删除
chmod +x /opt/fenge.sh
crontab -e
0 1 * * * /opt/fenge.sh
赋予脚本执行权限,并设置每天执行一次
6.2 内核优化 五、思维导图 六、结语
总结:想要学得好,唯有多敲多练,最开始的时候就是抄脚本,后期可根据需求独立盲写脚本。



