NGINX配置文件学习笔记
Nginx 是一个很强大的高性能Web和反向代理服务器.
今天,本地服务无论如何也起不来,nginx的配置文件也看不懂,所以感觉很尴尬,于是拿出了一个小时的时间学习了一下NGINX的配置文件,现在做一下记录.
打开原始的nginx.conf文件
其中user用来配置用户或用户组,如果不指定将会默认为nobody,
配置该参数的意义在于:
在linux中所有的存在均可视为文件,其存在权限问题,通过user指定的用户主要是指定其woker process 权限,
Woker_processes用来指定nginx的进程数,默认值为1,我在一些资料上看到说建议设置为宿主机的cpu核心数.
当然如果我们的woker_processes设置的值为4,可以加上:
Worker_cpu_affinity 0001 0010 0100 1000 这种方法可以将1-4进程分配给单独的核运行,如果有第五个进程,则随机分配.
Woker_rlimit_nofile 4096 设置每一个进程的最大文件打开数,一般设置为进程最大连接数(woker_connections)的3-4倍即可.
这一块用来定义全局的错误日志,日志的级别分为:[debug | info | notice | warn | error | crit ],
当然,一般情况下如果没有特殊需求,使用默认即可.
pid属性用来定义nginx进程文件存放的位置,一般使用默认即可.
Events模块:
其中worker_connections定义了工作进程的最大连接数量,该值不能超过Woker_rlimit_nofile.
在理论上:
每台nginx服务器的最大连接数=worker_processes*worker_connections;
当然events还有其他参数:
Accept_mutex on:设置网络连接序列化,防止惊群现象发生,该值默认为on.
惊群现象:http://www.tuicool.com/articles/Nbue2a
其原理为:
设置为ON以后,每个工作线程(worker)按串行的方式来处理连接,一个连接只会唤醒一个工作线程,其余线程继续休眠,但是如果服务器吞吐量较大时,建立关闭该参数.
http块:设定http服务器,利用他的反向代理功能提供负载均衡支持.
HTTP块可以嵌套多个server,配置缓存代理,第三方模块等.
Include mime.types 定义MIME类型和后缀关联的文件的位置.该文件处于nginx.conf同级目录下.
其中部分内容如下:
Default_type application/actet-stream; 指定在mime.type文件中没有定义到的后缀名处理方法,默认值为 text/plain.
Sendfile on :表示是否使用OS的sendfile函数来传输文件,普通的应用建议设置为ON,IO负载重的应设为OFF,默认值为OFF.
Tcp_nopush on: 如果sendfile设置为on,此处应该也设置为on,数据包会累积一下,再一起传输,可是适当的提高一些效率.
Tcp_nodelay on 默认值为on小的数据
包不等待直接发送,其默认值为ON,当和tcp_nopush同时都为ON时,nginx会平衡这两个功能.
Keepalive_timeout 120; 设置长连接超时时间,注意此处单位为秒.
Gzip on; 开启gzip压缩输出.
Gzip_min_length 1k; 最小压缩文件大小
Gzip_buffers 4 16k; 压缩缓冲区
Gzip_http_version 1.0; 压缩版本,默认为1.1,但是如果前端是squid2.5请使用1.0.
Gzip_comp_level 2; 压缩等级
Gzip_type text/plain application/x-javascript text/css application/xml;
压缩类型,默认包含text/html.
Gzip_vary on;
可以使用upstream子模块进行负载均衡服务器的定义.
格式为 upstream 服务名称{
Server IP+端口;
}
当然,一个upstream模块,可以配置多个IP地址.
格式为:
Upstream 服务名称{
Server IP 地址+prot weight=3;
Server IP 地址+prot weight=1;
Server IP 地址+prot weight=2;
}
这里的weight的值代表分配给所属IP服务器的权重,该值将影响服务器的分配几率;
Server模块,虚拟主机的配置
在server模块下:
Listen 80; 表示将监听80端口.
Server_name wwwbaidu.com www.52panda.online;表示监听的域名,域名可以有多个,中间使用空格隔开,域名可以使用正则匹配.
Charset utf-8;设置访问的语言编码.
Location { ##设置虚拟主机的基本信息
Root 目录; 设置虚拟主机的网站根目录
Index a.html b.php;设置虚拟主机默认访问的网页.
对/启用反向代理.
Proxy_pass 自定义的upstream名称; 表示将使用该upstream提供服务.
worker_processes 1;##允许生成的进程数
error_log logs/error.log; ##错误日志
error_log logs/notice.log notice; ##通知日志
error_log logs/info.log info; ##提示日志
error_log logs/warn.log warn; ##告警日志
error_log logs/crit.log crit;
error_log logs/alert.log alert;
error_log logs/emerg.log emerg;
error_log logs/debug.log debug;
events {
worker_connections 1024; ##配置最大连接数
}
http {
include mime.types; ##文件扩展名与文件类型映射表
default_type application/octet-stream; ##默认文件类型
##自定义日志格式
log_format myLogFormat ‘ remoteaddr− remote_user [ timelocal]" request” ’
‘ status body_bytes_sent “ httpreferer”′‘” http_user_agent" "$http_x_forwarded_for”’;
access_log logs/myLogFormat.log myLogFormat;
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
keepalive_timeout 65; ##连接超时时间 默认75S
upstream 名称 { ##该名称对应server的location的proxy_pass
server 127.0.0.1:8080;
}
## 服务配置
server {
listen 80; ##监听端口
server_name 域名; ##监听地址
location 正则 { ##匹配满足正则的请求进行下面处理
proxy_pass upstream 的名称;
proxy_redirect off ;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header REMOTE-HOST $remote_addr;
}
}
}