一般默认配置即可
根据需要添加
#运行用户,配置用户或者组,默认为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/