1、模型
master:主进程 (只有一个,老板)
worker:工作进程 (为主进程服务,默认只有一个,员工)
1 修改工作进程个数,conf主配置文件,worker_processes 1(可修改)
2 检测nginx配置是否ok:…/sbin/nginx -t
3 重启 …/sbin/nginx -s reload
4 验证 :ps -ef|grep nginx
一般一个进程足够了,你可以把连接数设得很大。
如果有SSL、gzip这些比较消耗CPU的工作,而且是多核CPU的话,可以设为和CPU的数量一样。
或者要处理很多很多的小文件,而且文件总大小比内存大很多的时候,也可以把进程数增加,
以充分利用IO带宽
如果出现页面假死或者502的错误,尝试修改进程个数,cup数量2倍或者用默认的
2、worker抢占机制
conf中配置
并发高原因
1抢占机制
2模型 采用异步非阻塞通讯模式(高效通讯,多路复用器)
3、nginx配置结构
配置说明
#user nobody; #worker是有什么权限用户运行 例如 root
worker_processes 1; #进程的数量,服务cpu相关
#debug info notice warn error crit (日志级别)
#error_log logs/error.log; 错误日志,日志路径可配置(安装时可配置)
#error_log logs/error.log notice(日志级别);
#error_log logs/error.log info;
#pid logs/nginx.pid; nginx进程号(安装时可配置)
events {
#默认使用epoll window lunx 系统默认模式不一样
use epoll
#每个worker允许客户端最大连接数
worker_connections 1024;
}
http {
include mime.types;#包含 导入外部文件 提高可读性 types
default_type application/octet-stream;#默认type类型
#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;#和sendfile结合使用,数据包累计到一定大小才发送
#keepalive_timeout 0;客户端连接服务器超时时间 以秒为单位 keepalive连接存活时间(存活时间内不用创建新的连接)
keepalive_timeout 65;
#gzip on; #压缩传输,节约服务器带宽。压缩消耗cpu性能
server {#虚拟主机
listen 80;#监听端口号
server_name localhost;#ip或域名
#charset koi8-r;
#access_log logs/host.access.log main;
location / {#路由,找到对应的页面 /代表根
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;#错误页面
location = /50x.html { #匹配规则
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# 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;
# }
#}
}
4、常见错误
1 nginx.pid failed (2:no such file or director)
解决办法:目录不存在 mkdir重新创建目录
2 invalid PID number “” in …
解决办法:./nginx -h查找帮助文档,查找命令 -c filename
指定nginx.conf 位置 (./nginx -c /user/local…)
也可以使用默认的,默认位置查看配置文件
5、常用命令
命令 | 说明 |
---|---|
./nginx -s stop | 立即关闭nginx |
./nginx -s quit | 关闭,处理完任务再关闭 |
./nginx -t | 检查配置是否成功 |
./nginx -v | 检查版本 |
./nginx -V | 详细信息 |
./nginx -?,-h | 帮助 |
6、日志切割
日志可在安装的时候指定路径,可通过 -V命令查看。
- 创建一个shell可执行文件: cut_my_log.sh 内容为:
#!/bin/bash
#日志所在的位置
LOG_PATH="/var/log/nginx/"
#日志以天为单位
RECORD_TIME=$(date -d “yesterday” +%Y-%m-%d)
#nginx所指定的进程
PID=/var/run/nginx/nginx.pid
#把access.log重命名
mv ${LOG_PATH}/access.log L O G P A T H / a c c e s s . {LOG_PATH}/access. LOGPATH/access.{RECORD_TIME}.log
mv ${LOG_PATH}/error.log L O G P A T H / e r r o r . {LOG_PATH}/error. LOGPATH/error.{RECORD_TIME}.log
#向Nginx主进程发送信号,用于重新打开日志文件
kill -USR1cat $PID
- 为 cut_my_log.sh 添加可执行的权限:
chmod +x cut_my_log.sh
- 测试日志切割后的结果:
./cut_my_log.sh
7、Nginx 日志切割-定时
使用定时任务
- 安装定时任务:
yum install crontabs
- crontab -e 编辑并且添加一行新的任务:
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
- 重启定时任务:
service crond restart
附:常用定时任务命令:
命令 | 说明 |
---|---|
service crond start | 启动服务 |
service crond stop | 关闭服务 |
service crond restart | 重启服务 |
service crond reload | 重新载入配置 |
crontab -e | 编辑任务 |
crontab -l | 查看任务列表 |
定时任务表达式:
Cron表达式是,分为5或6个域,每个域代表一个含义,如下所示:
$ | 分 | 时 | 日 | 月 | 星期几 | 年(可选) |
---|---|---|---|---|---|---|
范围 | 0-59 | 0-23 | 1-31 | 1-12 | 1-7 | 2019/2020/2021/… |
常用表达式:
每分钟执行:
*/1 * * * *
每日凌晨(每天晚上23:59)执行:
59 23 * * *
每日凌晨1点执行:
0 1 * * *
8、配置静态资源
别名
server {
listen 80;
server_name localhost;
location / {
root /home/code;
index index.html;
}
location /any { #别名/any 随便都可以,会去alias下的路径去找资源
#root /home;
alias /home/resources
}
}
9、压缩
配置中修改
#开启gzip压缩功能,目的提高传输效率,节约带宽
gzip on ;
#限制最小压缩,小于1字节文件不会压缩
gzip_min_length 1;
#定义压缩级别(压缩比,文件越大,压缩越多,cpu使用会越多)
gzip_comp_level 3;
#定义压缩内容
gzip_types test/plain application/.........
10、 location 的匹配规则
空格 :默认匹配,普通匹配
location / {
root /home;
}
= :精确匹配
location = /imooc/img/face1.png {
root /home;
}
~* :匹配正则表达式,不区分大小写
#符合图片的显示
location ~ .(GIF|jpg|png|jpeg) {
root /home;
}
~ :匹配正则表达式,区分大小写
#GIF必须大写才能匹配到
location ~ .(GIF|jpg|png|jpeg) {
root /home;
}
^~ :以某个字符路径开头
location ^~ /imooc/img {
root /home;
}