Created
September 2, 2019 09:27
-
-
Save linonetwo/4ad2f6b1238e6cabce2fc6f26617c733 to your computer and use it in GitHub Desktop.
[祖传的 React SSR Nginx 配置文件] 配置了路由转发等等 #react #nginx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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