三. Nginx配置
1.运行中Nginx进程关系
一个master进程管理多个worker进程,一般,worker进程数与cpu核心数相等。worker进程负责处理请求,master进程负责监控管理worker进程。worker进程之间通过共享内存、原子操作等进程间通信机制实现负载均衡。
2.nginx服务的基本配置
nginx服务的配置安装用户的预期功能分为四类:
(1)用于调试、定位问题的配置项
daemon on|off; //守护进程运行
master_process on; //以master进程管理多个worker进程的方式运行
error_log logs/error.log error;
debug_points [stop|abort] //执行到调试点发出设定信号
debug_connection [IP|CIDR] //对特定IP输出DEBUG日志
worker_rlimit_core size; //设置核心转储文件大小的限制
working_directory path; //指定coredump文件生成目录
(2)正常运行的必备配置项
env VAR=VALUE //定义环境变量
include /path/file //保护其他配置文件
pid path/file //master进程ID文件存放路径
user username [groupname] //work进程运行的用户级用户组
worker_rlimit_nofile limit //work进程可打开的最大文件句柄数
worker_rlimit_sigpending limit //每个用户发往nginx的信号队列的大小
(3)优化性能的配置项
worker_processes number //worker进程的个数
work_cpu_affinity cpumask [cpumask...] //绑定worker进程到指定的cpu内核
ssl_engine device; //SSL硬件加速
timer_resolution t; //设置系统调用gettimeofday的频率
worker_priority nice; //worker进程优先级设置
(4)事件类配置项
accept_mutex [on|off] //是否打开负载均衡锁
lock_file path/file; //打开accept锁时,用文件锁实现accept锁
accept_mutex_delay Nms; //获取accept锁失败后,间隔多长时间再次取锁
multi_accept [on|off]; //批量建立新连接
user [kqueue | rtsig | epoll | /dev/poll | select | poll | eventport ]//选择事物模型
work_connections number //每个worker的最大连接数
3.配置一个静态WEB服务器
所有的HTTP配置项都必须只属于http块、server块、location块、upstream块或者if块等。
(1)虚拟主机与请求的分发
当存在多个主机域名对应同一个IP地址,nginx.conf可以按照server_name通过server块来定义虚拟主机,每个server块就是一个虚拟主机。
listen address:port [default | default_server | [backlog=num | rcvbug=size | sndbuf=size | accept_filter=filter deferred | bind | piv6only=[on|off] | ssl ]] //监听端口
server_name name[...] //主机名称
server_names_hash_bucket_size //散列表存储server name.设置每个散列桶的内存大小
server_names_hash_max_size //
server_name_in_redirect on|off //重定向主机名称的处理
location [= |~ | ~* | ^~ | @ ] /uri/ {....} //对URI进行匹配,成功后用location的配置来处理请求,其中=要求URI完全匹配,~匹配时大小写敏感,~*忽略大小写,^~表示匹配URI时只需要其前半部分与URI参数匹配即可。@表示只用于nginx服务器内部请求的重定向。/可以匹配所有请求
(2) 文件路径的定义
root path; //以root的方式定义配置项,保留匹配的URL
alias path; //以alias的方式定义路径,丢弃匹配的url
index file; //访问首页
error_page code [code ...] [= | =answer-code ] uri| @named_location
example: error_page 404 /404.html
error_page 502 503 /50x.html
error_page 403
http://www.example.com/forbindden.html
recursive_error_pages [on|off] //是否允许递归使用error_page
try_files path1 [path2] uri; //
(3)内存及磁盘资源分布
client_body_in_file_only on|clean|off; //HTTP包体只存储到磁盘文件中
client_body_in_single_buffer on|off; //http包体尽量写入到一个内存buffer
client_header_buffer_size size; //存储http头部的内存buffer大小
larger_client_header_buffers number sieze ; //存储超大http头部的内存buffer大小
client_body_buffer_size size; //nginx接受http包体的内存缓冲区大小
client_body_temp_path dir-path [level1 [ level2 [ level3 ] ] ] //设置存放http包头的临时目录
connection_pool_size size; //为每个建立成功的TCP连接非配的内存池大小
request_pool_size size; //每个http请求建立的内存池大小
(4)网络连接的设置
client_header_timeout time
client_body_timeout time;
send_timeout time;
reset_timeout_connection;
lingering_close off | on | always; //关闭用户连接的方式
lingering_time time ;
lingering_timeout time;
keepalive_disable [msie6|safari|...] //对某些浏览器禁用keepalive功能
keepalive_timeout time;
keepalive_requests n;
tcp_nodelay on|off;
tcp_nopush on|off;
4.设置反向代理
(1)负载均衡的基本配置
upstream name {...}
upstream backedn {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
server name [parameters] // weight=number; max_fails=number; fail_timeout=time; down; backup;
ip_hash; //根据用户请求Ip计算出一个key值,然后对upstream集群的服务器数量进行取模;
(2)反向代理基本配置
proxy_pass URL //将请求反向代理到URL指定的服务器上,可以是ip+端口,或UNIX句柄,或upstream块,或https地址
proxy_method method; //GET/POST
proxy_hide_header the_header; //指定哪些http头不能转发
proxy_pass_header header; //将默认禁止的header设置为发送
proxy_pass_request_body on|off; //是否向上游发送HTTP包体部分
proxy_pass_request_headers on|off; //确定是否转发http头部
proxy_redirect [default | off | redirect replacement ]; //当上游服务器返回301或302,是否对url进行域名替换
proxy_next_stream [ error | timeout | invalid_header | http_500 | http_502| http_404 | off ]; //当一台机器请求发生错误,换一台继续