一般默认配置即可
根据需要添加

#运行用户,配置用户或者组,默认为nobody nobody。
user root;

#启动进程,通常设置成和CPU核心数相等,用lscpu命令查看
#最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据的硬盘驱动器的数量以及加载模式。
#当您有疑问时,将其设置为可用的cpu核数将是一个好的初始值(“auto“将尝试自动检测)。
worker_processes auto;

#全局错误日志,路径,级别。这个设置可以放入全局块,http块,server块,
#级别以此为:debug|info|notice|warn|error|crit|alert|emerg
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#nginx进程id
pid  logs/nginx.pid;

events {
	#事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,
    #仅用于linux2.6以上内核,可以大大提高nginx的性能
	#通常不需要显式地指定它,因为在默认情况下,nginx将使用最有效的方法。
	use epoll;
	
	#设置工作进程可以打开的同时连接的最大数量,默认512	#这个数字包括所有连接(例如,与代理服务器的连接等),而不仅仅是与客户端的连接。
	#同时连接的实际数量不能超过打开文件的最大数量的当前限制,而打开的文件可以由worker_rlimit_nofile改变
	#每台nginx 服务器的最大连接数为:worker_processes*worker_connections
	#系统的最大打开文件数:>= worker_connections*worker_process
	worker_connections 10240;
}

#更改工作进程的最大打开文件数(RLIMIT_NOFILE)的限制。用于在不重新启动主进程的情况下增加限制。
#使用ulimit -n命令查看,使用 ulimit -n 65535 可即时修改
#在/etc/security/limits.conf最后增加如下两行记录,重启后也生效
#* soft nofile 65535
#* hard nofile 65535
worker_rlimit_nofile 65535;


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;
    error_log  logs/error.log  notice ;
	
	#sendfile 指令指定nginx是否调用sendfile函数(zero copy 方式)来输出文件,
    #对于普通应用,设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
    #以平衡磁盘与网络I/O处理速度,降低系统的uptime
    sendfile on;
	
	#当使用sendfile函数时,tcp_nopush才起作用,它和指令tcp_nodelay是互斥的
	#数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞
    tcp_nopush on;
	
	#直接发送数据包
	tcp_nodelay off;

	#连接超时时间,默认 75s;
	#第一个参数设置客户端的长连接在服务器端保持的最长时间(在此时间客户端未发起新请求,则长连接关闭)。
	#第二个参数为可选项,设置“Keep-Alive: timeout=time”响应头的值。 可以为这两个参数设置不同的值。
    keepalive_timeout 750s;
	
	#设置用于向客户端发送响应的超时。超时只在两个连续的写操作之间设置,而不是整个响应的传输。
	#如果客户端在这段时间内没有收到任何信息,则连接将被关闭。
    send_timeout 300s;
	
	#设置客户端请求主体的最大允许大小。默认值 1m;
	#如果请求中的大小超过所配置的值,则会将413(请求实体太大)错误返回给客户端。
	#设置size若为0,将禁用对客户端请求体大小的检查。
    client_max_body_size 100m;

	#缓存路径 二级目录 缓存空间区域名称 最大占用空间 默认过期时间 使用设置的目录还是proxy_temp目录
    proxy_cache_path /temp levels=1:2 keys_zone=project-cache:20m max_size=2g inactive=7d use_temp_path=off;
	
	#指定用于页面缓存的共享区域。同一块共享内存可以在多个地方使用。off参数可以屏蔽从上层配置继承的缓存功能。
	proxy_cache project-cache;
	
	#启用或禁用来自代理服务器的响应缓冲,默认打开
	#当开启缓冲时,nginx尽可能快地从被代理的服务器接收响应,再将它存入proxy_buffer_size和proxy_buffers指令设置的缓冲区中。
	#如果响应无法整个纳入内存,那么其中一部分将存入磁盘上的临时文件。
	#proxy_max_temp_file_size和proxy_temp_file_write_size指令可以控制临时文件的写入。
	#当关闭缓冲时,收到响应后,nginx立即将其同步传给客户端。
	#nginx不会尝试从被代理的服务器读取整个请求,而是将proxy_buffer_size指令设定的大小作为一次读取的最大长度。
	#响应头“X-Accel-Buffering”传递“yes”或“no”可以动态地开启或关闭代理的缓冲功能。 这个能力可以通过proxy_ignore_headers指令关闭。
	proxy_buffering on;
	
	#设置缓冲区的大小为size。
	#nginx从被代理的服务器读取响应时,使用该缓冲区保存响应的开始部分。
	#这部分通常包含着一个小小的响应头。该缓冲区大小默认等于proxy_buffers指令设置的一块缓冲区的大小,但它也可以被设置得更小。
	proxy_buffer_size 256k;
	
	#为每个连接设置缓冲区的数量为number,每块缓冲区的大小为size。这些缓冲区用于保存从被代理的服务器读取的响应。
	#每块缓冲区默认等于一个内存页的大小。这个值是4K还是8K,取决于平台。
	proxy_buffers 32 256k;
	
	#开启缓冲响应的功能以后,在没有读到全部响应的情况下,写缓冲到达一定大小时,nginx一定会向客户端发送响应,直到缓冲小于此值。
	#这条指令用来设置此值。 同时,剩余的缓冲区可以用于接收响应,如果需要,一部分内容将缓冲到临时文件。
	#该大小默认是proxy_buffer_size和proxy_buffers指令设置单块缓冲大小的两倍。
	proxy_busy_buffers_size 512k;
	
	#定义从代理服务器读取响应的超时。此超时是指相邻两次读操作之间的最长时间间隔,而不是整个响应传输完成的最长时间。
	#如果代理服务器在超时时间段内没有传输任何数据,连接将被关闭。
	#默认值:60s
	proxy_read_timeout 120s;
	
	#设置用于向代理服务器发送请求的超时。只在两个连续的写操作之间设置超时,而不是为整个请求的传输设置超时。
	#如果代理服务器在此时间内没有收到任何信息,则连接将被关闭。
	#默认值:60s
	proxy_send_timeout 120s;
	
	#开启gzip
    gzip on;
    # 压缩等级,等级越高压缩比例越大,耗时越长,CPU占比越高
    gzip_comp_level 2;
    # 设置需要压缩的mime类型
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/xml application/json image/jpeg image/png image/gif ;
    # 启用应答头
    gzip_vary on;
    # 禁止压缩的浏览器
    gzip_disable msie6;
   	
	#Nginx代理WebSocket的要点是设置Upgrade和Connection响应头
	#配置 Nginx 根据Upgrade(即$http_upgrade)来设置Connection
	#如果请求头中有Upgrade,就直接设置到响应头中,并把Connection设置为upgrade
	#如WebSocket请求头会带上Upgrade: websocket,Connection: upgrade
	#否则把Connection设置为close。如普通HTTP请求。
	map $http_upgrade $connection_upgrade {
    		default upgrade;
   		 '' close;
	}

    server {
        listen       80;
		#server_name  xxxx.com;
		
		#允许跨域请求的域,*代表所有
        add_header 'Access-Control-Allow-Origin' '*';
        #允许带上cookie请求
        add_header 'Access-Control-Allow-Credentials' 'true';
        #允许请求的方法,比如 GET/POST/PUT/DELETE 
        add_header 'Access-Control-Allow-Methods' '*';
        #允许请求的header
        add_header 'Access-Control-Allow-Headers' '*';
	
		#防盗链:无Referer值\Referer值被防火墙进行伪装\来自域名
		valid_referers none blocked  ~127.0.0.1 ~192.168.* ;
		if ($invalid_referer) {
			return 403;
		}
	
		error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

其他系统配置:

#root权限下,更改工作进程的最大打开文件数(RLIMIT_NOFILE)的限制
ulimit -n 65535
在/etc/security/limits.conf最后增加如下两行记录,重启后也生效
* soft nofile 65535
* hard nofile 65535


vi /etc/pam.d/login 
session    required    /lib/security/pam_limits.so
这是告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。修改完后保存此文件。

注意:
soft nofile不能超过hard nofile
hard nofile不能超过/proc/sys/fs/nr_open
假如hard limit大于nr_open,注销后将无法正常登录。
查看cat /proc/sys/fs/nr_open  值为: 1048576
查看cat /proc/sys/fs/file-max
file-max是所有进程最大的文件数,是内核可分配的最大文件数,指定了系统范围内所有进程可以打开的文件句柄的数量限制

#修改file-max
vi /etc/sysctl.conf  
添加
fs.file-max = 1048576
配置完后执行 sysctl -p生效配置。

自己上网查的,有问题大家多多吐槽指出错误,与君共勉

记录一下链接:

看官方文档
http://nginx.org/en/docs/

http://shouce.jb51.net/nginx/left.html

http://tengine.taobao.org/nginx_docs/cn/docs/