nginx可以实现event-driven、asynchronous、non-blocking
针对网络IO:
收到用户请求以后,nginx还可以管理缓存,后端服务器响应内容可以保存在nginx本地,然后再给用户响应,第二个用户请求时,查询缓存,如果有直接返回(实现加速)
而这个缓存空间,nginx需要两个进程来管理cache loader,cache manager
针对磁盘IO:
可以是实现高级IO、sendfile、AIO(异步IO模型)、mmap(内存映射,在内存中开辟空间映射硬盘数据,直接访问硬盘数据,不用复制,想想上一节课的两阶段)、etc
nginx作为web server:是一个master/worker模型,master用来装载配置文件,启动worker进程,平滑升级(不用停nginx,就能升级版本)
每次更改nginx的配置以后,要检查一下有没有语法错误nginx -t,并重新载入一下配置nginx -s reload
然后详细讲解安装nginx以后的配置文件/etc/nginx/nginx.conf
user nginx;
worker_processes auto;---配置工作进程数量,这里一般是自动,对应cpu核心数,改为更多意义不大
error_log /var/log/nginx/error.log;---错误日志
pid /run/nginx.pid
worker_cpu_affinity auto;---把进程跟cpu自动一对一绑定
include /usr/share/nginx/modules/*.conf;---动态装载某些模块
events {
worker_connections 1024;---这里对应上边的worker_processes,这里不可随意更改
}
http {
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘---日志格式、日志的名称、内置的变量(客户端地址、远程用户(basic认证使用)、本地时间、请求报文的起始行)
‘$status $body_bytes_sent "$http_referer" ‘---响应码、body部分字节数、引用(从上次访问跳转过来的,怎么到当前网页的)
‘"$http_user_agent" "$http_x_forwarded_for" ‘;---什么浏览器、代理服务器在代理转发时会加一个真正客户端请求地址是谁
access_log /var/log/nginx/access.log main---访问日志、日志名称
sendfile on;---发送文件,用户请求文件,由内核封装响应报文不用复制文件,提升性能
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;保持连接的超时时长
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;---默认把每个文件识别成八进制的数据流
#load modular configuration files from the /etc/nginx/conf.d directory.
#see http://nginx.org/en/docs/ngx_core_module.html#include
#for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;---基于域名的访问,默认虚拟主机,如果用户访问的虚拟主机找不到,就访问所有虚拟主机的第一个,不想第一个响应就设置默认的
listen [::]:80 default_server;---基于ipv6地址的访问
server_name _;---下划线可以匹配所有主机名
root /usr/share/nginx/html;---默认网页根路径
#load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error page 404 /404.html;---自定义错误页
location = /40x.html {
}
error page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
#setting for a TLS enabled server.
}
那自己添加一个虚拟主机的做法
mkdir /data/nginx/vhost1 -pv ---最好和主机名一致
vim /data/nginx/vhost1/index.html
vim conf.d/vhost1.conf
server {
listen 80;
server_name www.ilinux.io;---给了主机名,访问的就是你定义的,不给访问的就是默认的
root /data/nginx/vhost1;
}
nginx -t测试语法
nginx -s reload重新载入配置文件不用重启
Nginx(2)
配置指令:
main配置段常见的配置命令:
分类:
正常运行必备的配置
优化性能相关的配置
用于调试及定位问题相关的配置
事件驱动相关的配置
正常运行必备的配置:
1、user
Syntax:user user [group]---组可以省略
Default:user nobody nobody;
Context:main
Defines user and group credentials used by worker processes.If group is omitted,a group whose name equals that of user is used.
2、pid/PATH/TO/PID_FILE:
指定存储nginx主进程进程号码的文件路径
3、include file | mask(掩码就是通配符)
指明包含进来的其他配置文件片段
4、load_module file
指明要装载的动态模块
性能优化相关的配置
1、worker_processer number | auto;
worker进程的数量;通常应该等于小于当前主机的cpu的物理核心数;
auto:当前主机物理cpu核心数
2、worker_cpu_affinity cpumask ...;---把进程跟cpu一对一绑定,可以提前隔离出cpu再绑定,也可以简单手工绑定(这种效果好),如果只运行nginx可以绑定,如果还要运行其他进程最好不要绑定
worker_cpu_affinity auto [cpumask];
cpu mask:---有4个cpu用4个0表示,有8个就用8个0
00000001:0号cpu
00000010:1号cpu
00000100:2号cpu
3、worker_priority number:
指定worker进程的nice值,设定worker进程优先级;[-20,20]
4、worker_rlimit_nofile number;
worker进程所能够打开的文件数量上限
调试、定位问题:
原文:https://blog.51cto.com/13852573/2364134