@kklinan
2017-04-07T06:40:52.000000Z
字数 2871
阅读 979
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;}}}
指令参数