Skip to content

Instantly share code, notes, and snippets.

@linonetwo
Created September 2, 2019 09:27
Show Gist options
  • Save linonetwo/4ad2f6b1238e6cabce2fc6f26617c733 to your computer and use it in GitHub Desktop.
Save linonetwo/4ad2f6b1238e6cabce2fc6f26617c733 to your computer and use it in GitHub Desktop.
[祖传的 React SSR Nginx 配置文件] 配置了路由转发等等 #react #nginx
worker_processes 4;
#定义了nginx对外提供web服务时的worder进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据的硬盘数量及负载模式。不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。
worker_rlimit_nofile 100000;
#更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。
events {
worker_connections 4096;
#设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。
multi_accept on;
#告诉nginx收到一个新连接通知后接受尽可能多的连接。
use epoll;
#设置用于复用客户端线程的轮询方法,它会选择一个最适合你操作系统的方法。
}
http {
include mime.types; #使用它来加载稍后会用到的一系列的MIME类型。
default_type application/octet-stream; #设置文件使用的默认的MIME-type。
server_tokens off;
#并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。
sendfile on;
#可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)
tcp_nopush on;
#告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送
tcp_nodelay on;
#告诉nginx不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。
access_log off;
#设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)。
error_log /var/log/nginx/error.log crit;
#告诉nginx只能记录严重的错误。
keepalive_timeout 1800;
#影响上传大文件的超时时间,故设置为30分钟,但是时间设太长每个连接都半小时很快worker_connections就用光了,业务增长后应该将接口请求,后台管理,文件上传这三个业务逻辑分开,nginx对这三种业务逻辑分开转发,每个业务逻辑单独设置一个keepalive-timeout 。这个东西可以放到 server 块里。
limit_conn_zone $binary_remote_addr zone=addr:5m;
#设置用于保存各种key(比如当前连接数)的共享内存的参数。5m就是5兆字节,这个值应该被设置的足够大以存储(32K*5)32byte状态或者(16K*5)64byte状态。
limit_conn addr 100;
#limit_conn为给定的key设置最大连接数。这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接。
reset_timedout_connection on;
#重置超时连接,当关闭socket时,nginx向客户端发送TCP RST,并且释放此socket占用的所有内存。 这样可以避免某个已关闭的socket长时间处于FIN_WAIT1状态,并占用内存缓冲区。
send_timeout 10;
#默认60s,设置向客户端传输response时两次相邻写response操作之间的时间间隔,而非整个响应的传输时间。 如果客户端在这段时间中没有收到任何数据,连接将关闭。
gzip on;
#告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。
gzip_disable "msie6";
#对使用IE6或者更低版本的垃圾客户端禁用gzip功能,以使我们的方案能够广泛兼容。
gzip_proxied any;
#Nginx作为反向代理的时候,压缩所有请求和响应时的响应流。
gzip_min_length 10240;
#如果一个请求很小,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。
gzip_comp_level 4;
#设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
#设置需要压缩的数据格式。
open_file_cache max=100000 inactive=20s;
#最大打开多少个缓存,还有缓存不活动多久后就删掉,这时间可以设大一点。
open_file_cache_valid 30s;
#指定了检查open_file_cache 中信息的有效性的时间间隔。
open_file_cache_min_uses 2;
# inactive 指定的时间内一个文件被访问的次数大于这个值,那么该文件的描述符将会被缓存到缓存中。
server {
listen 80;
index index.html index.htm;
root /usr/src/app/build/;
location / {
# 让所有访问最后都请求/index.html
try_files $uri $uri/ /index.html;
}
location /static/media/ {
# 其他静态文件还是请求静态文件目录
root /usr/src/app/build/;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment