作为一个大前端开发,可能会在业务场景中遇到使用nodeJs做中间层的需求。OK,我们用node写了中间层,去调用一些基础服务或者CURD操作,这时候问题来了,你发现请求响应缓慢,于是你查看了公司服务器的负载情况,发现多台性能不同的服务器负载均衡配置不合理。于是你打开了nginx手册,试图进行一些优化~
nginx 的2种安装方式:
1、源码包安装
2、yum(apt-get)安装区别为如果用yum安装的话,很方便,并且基本不报错。如果对性能要求不是很高的话,可以采用这种安装方式(比如测试环境)
如果是源码包安装的话,因为在服务器上编译的软件,会让nginx的性能相对更高一些,建议生产环境使用源码包安装
一、基本配置优化(优化后配置样例,可以改后直接上生产)
1 | #头部配置 |
如果是高并发架构,需要在nginx的服务器上添加如下的内核参数
这些参数追加到/etc/sysctl.conf,然后执行sysctl -p 生效。
#每个网络接口接收数据包速度比内核处理速度快的时候,允许发送队列数目数据包的最大数net.core.netdev_max_backlog = 262144
#调节系统同时发起的tcp连接数net.core.somaxconn = 262144
#该参数用于设定系统中最多允许存在多少TCP套接字不被关联到任何一个用户文件句柄上,主要目的为防止Ddos攻击net.ipv4.tcp_max_orphans = 262144
#该参数用于记录尚未收到客户端确认信息的连接请求的最大值net.ipv4.tcp_max_syn_backlog = 262144
#nginx服务上建议关闭(既为0)net.ipv4.tcp_timestamps = 0
#该参数用于设置内核放弃TCP连接之前向客户端发送SYN+ACK包的数量,为了建立对端的连接服务,服务器和客户端需要进行三次握手,第二次握手期间,内核需要发送SYN并附带一个回应前一个SYN的ACK,这个参数主要影响这个过程,一般赋予值为1,即内核放弃连接之前发送一次SYN+ACK包。net.ipv4.tcp_synack_retries = 1net.ipv4.tcp_syn_retries = 1
二、nginx配置lua,添加接口返回值,方便开发debug,
三、nginx配置https
1 | #server端基本配置<br>server { |
四、nginx配置反爬虫
1 | #以下内容添加nginx虚拟主机配置里,proxypass之后<br><br>if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { |