Nginx是一款免费开源的web服务软件,其特点是只要很小的硬件资源,就能支撑不错的并发访问。在很早之前,是Apache作为开源web服务器的引领者,而Nginx的出现是为了解决C10k问题。C10k问题,诞生于早期互联网应用大爆发的时期,简单来说就是希望一台服务器能够支撑起1万并发连接,这在那个云服务尚未诞生的年代,算得上一个问题。当然现在已经不然,这点并发量,在移动互联网时代有点不够看。Nginx采用了异步事件驱动的模型,实现了比多线程更加优秀的表现,不要质疑多线程,那个时候没有Golang,也没有协程,多线程的确很好,当时的Apache,运行的很不错。而Nginx在2008年就实现了每天50亿次访问支持。需要说明的是,自从Apache2.4版本后,Apache也将并发模型修改为了异步事件驱动,从那时候起,Apache和Nginx的性能差别就可以忽略不计了。虽然Nginx是为高并发高性能而生的,但是好软件仍然需要好的配置,下面就说说:Nginx的工作进程数量很关键,设置成auto由Nginx自动检测硬件即可events{ worker_connections 2048; multi_accept on; use epoll;#使用更高效的连接方法}
http{ sendfile on;#使用Linux的sendfile方法更快的传输 tcp_nopush on;#将http响应头一次性回复完毕 tcp_nodely on;#禁止buffer太小的数据包 keepalive_timeout 60;}
gzip on;gzip_com_level 5;gzip_min_length 256;gzip_types text/plain text/css application/javascript;
location ~* \.(jpg|png|css|js|ico)$ { expires 30d; add_header Cache-Control "public, no-transform";}
单纯的设置Nginx有时候还不够,要将Linux的内核参数做出相对应的调整,否则,面对高并发场景,内核并不会主动支持,还是保持较小的并发连接。找到配置文件/etc/sysctl.conf,添加或修改一下设置#提升最大打开文件数fs.file-max=2097152net.core.somaxconn = 65535net.ipv4.tcp_fastopen = 3net.ipv4.tcp_tw_reuse = 1
以上的一些内容,也只是Nginx在Linux上优化调优的一小部分,有更多的功能和设置,值得在特殊场景下设置和使用,这都是Linux等开源软件的强大之处,人人都可以为其优化。