@kklinan
2017-04-07T14:40:52.000000Z
字数 2871
阅读 862
Nginx
Nginx配置文件主要分成四部分:
每部分包含若干个指令。
main 部分设置的指令将影响其它所有部分的设置;
server 部分的指令主要用于指定虚拟主机域名、IP和端口;
upstream 部分的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡;
location 部分用于匹配网页位置(比如,根目录"/","/images",等等)。
他们之间的关系式:server继承main,location继承server;upstream既不会继承指令也不会被继承。它有自己的特殊指令,不需要在其他地方的应用。
参考文档
user nobody;
运行用户,一般设置为服务器指定的用户
worker_processes 1;
在配置文件的顶级main部分,worker角色的工作进程的个数 。一般设置为CPU的核数(cat /proc/cpuinfo| grep "cpu cores"| uniq 或 grep processor /proc/cpuinfo | wc -l)或 auto
参考:http://nginx.org/en/docs/ngx_core_module.html#worker_cpu_affinity
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
全局错误日志及PID文件
events {
use epoll;
worker_connections 2048;
}
epoll 是多路复用IO(I/O Multiplexing)中的一种方式,仅用于linux2.6以上内核,可以大大提高nginx的性能。
在 Linux 操作系统下,nginx 默认使用 epoll 事件模型,得益于此,nginx 在 Linux 操作系统下效率相当高。同时 Nginx 在 OpenBSD 或 FreeBSD 操作系统上采用类似于 epoll 的高效事件模型 kqueue。在操作系统不支持这些高效模型时才使用 select。
官方文档:http://nginx.org/docs/events.html
在 Nginx 中,每个进程会有一个连接数的最大上限,这个上限与系统对 fd 的限制不一样。在操作系统中,通过 ulimit -n
,我们可以得到一个进程所能够打开的 fd 的最大数,即 nofile,因为每个 socket 连接会占用掉一个 fd,所以这也会限制我们进程的最大连接数,当然也会直接影响到我们程序所能支持的最大并发数,当 fd 用完后,再创建 socket 时,就会失败。Nginx 通过设置 worker_connectons
来设置每个进程支持的最大连接数。如果该值大于 nofile,那么实际的最大连接数是 nofile,Nginx 会有警告。
这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个 Nginx 能建立的最大连接
数,应该是 worker_connections * worker_processes
。当然,这里说的是最大连接数,对于 HTTP 请求本地资源来说,能够支持的最大并发数量是 worker_connections * worker_processes
,而如果是 HTTP 作为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/2
。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。
http {
#设定mime类型,类型由mime.type文件定义
include mime.types;
default_type 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;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
#对于普通应用,必须设为 on,
#如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
#以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;
#连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
#开启gzip压缩
gzip on;
gzip_disable "MSIE [1-6].";
#设定请求缓冲
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;
#设定虚拟主机配置
server {
#侦听80端口
listen 80;
#定义使用 www.nginx.cn访问
server_name www.nginx.cn;
#定义服务器的默认网站根目录位置
root /www/html;
#设定本虚拟主机的访问日志
access_log logs/nginx.access.log main;
#默认请求
location / {
#定义首页索引文件的名称
index index.php index.html index.htm;
}
# 定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
#过期30天,静态文件不怎么更新,过期可以设大一点,
#如果频繁更新,则可以设置得小一点。
expires 30d;
}
#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#禁止访问 .htxxx 文件
location ~ /.ht {
deny all;
}
}
}
指令参数