深入Nginx优化

简介:

1、优化nginx的必要性

学习 nginx 有必然要了解下如何进一步压榨 nginx 的性能。要是你要搭建自己的服务器,那么你肯定会想方设法地优化 nginx(就算你的服务器目前压力不是很大),既然这样,那我们就必须进一步了解 nginx


2nginx可以从哪里优化

对于 nginx 本身,最重要的也就是它的配置文件了,在这个配置文件中,可以配置 nginx 的各种属性。既然我们需要对 nginx 进行优化,那么首先想到的肯定就是这个配置文件,这个文件名为 nginx.conf,它保存有 nginx 不同模块的全部设置。


3、具体模块配置

当我们打开 nginx 的配置文件,可以看出它分为四大模块。顶层模块就是最前面、暴露在最外面的。下面依次是events 模块、http 模块,mail 模块(被注释掉了)。这就是 nginx 总体的配置文件结构。

3.1、顶层配置

wKioL1gr0HChoPusAAAN8889ANw267.jpg

13行的userpid这两项对我们的目的完全没有影响,所以我们没必要修改。

 2 行的worker_processes(这里的原始值是 1),可以通过这样一个命令来查看:

wKiom1gr0HyTbSbUAAAXz3OE8jQ353.jpg

(因为是虚拟机,所以这里的逻辑cpu个数是0

这里定义了 nginx 在为你的网站提供服务时,worker 进程的数量。据参考,这个优化值受到包括 CPU 内核数、存储数据的磁盘数、负载值在内的许多因素的影响。如果不确定的话,将其设置为可用的 CPU内核的数量是一个不错的选择(设置为“auto”,将会尝试自动检测可用的值)。

3.2event模块

这个模块包括了 nginx 中处理链接的全部设置:

wKiom1gr0I3TIt5aAAAOPWwoXFg791.jpg

worker_connections 设置了一个 worker 进程可以同时打开的链接数。这个值原本受 events 里面的 worker_rlimit_nofile 参数所限制,但是现在这里没有这一项参数,那么调整的幅度就不要太大。虽然没有既定值,但是你只要知道这个值的含义,往后如果有需求,完全可以回头调整。

multi_accept 的作用是告诉 nginx 在收到新链接的请求通知时,尽可能接受链接。当然,得让他开着。

3.3http模块

当外部有 http 请求时, nginx  http 模块才是处理这个请求的核心。我们只要简单的了解一下就能优化不少参数。

wKioL1gr0JrhdG_yAAA6LaRk_mg073.jpg

 http 的配置文件中我们可以看到 每一个小模块 都是被独立标注出来的,很好区分,这里我们就尽量一个一个查看:

(1)sendfile 指向 sendfile()函数。sendfile() 在磁盘和 TCP 端口(或者任意两个文件描述符)之间复制数据。不要在意这些细节,说了这么多,只是想说,开着就好。

(2)tcp_nopush 配置 nginx 在一个包中发送全部的头文件,而不是一个一个发送。

(3)tcp_nodelay 配置 nginx 不要缓存数据,应该快速的发送小数据——这仅仅应该用于频繁发送小的碎片信息而无需立刻获取响应的、需要实时传递数据的应用中。

(4)keepalive_timeout 指定了与客户端的 keep-alive 链接的超时时间。服务器会在这个时间后关闭链接。我们可以降低这个值,以避免让 worker 过长时间的忙碌。(可以改的低点,比如15

(5)access_log 确定了 nginx 是否保存访问日志。将这个设置为关闭可以降低磁盘 IO 而提升速度。


4、完整配置展示:

user www-data;

worker_processes8;

pid  /run/nginx.pid;

events {

    worker_connections 1024;

     multi_accept on;

}

http {

    ##

    # Basic Settings

    ##

    sendfile on;

    tcp_nopush on;

    tcp_nodelay on;

    keepalive_timeout 15;

    types_hash_max_size 2048;

    # server_tokens off;

    # server_names_hash_bucket_size 64;

    #server_name_in_redirect off;

    include /etc/nginx/mime.types;

    default_type application/octet-stream;

    ##

    # Logging Settings

    access_log off;

    error_log /var/log/nginx/error.log;

    # Gzip Settings

    gzip on;

    gzip_disable "msie6";

     gzip_vary on;

     gzip_proxied any;

     gzip_comp_level 9;

     gzip_buffers 16 8k;

     gzip_http_version 1.1;

    gzip_types text/plain text/css application/json application/x-javascripttext/xml application/xml application/xml+rss text/javascript;

    ##

    # nginx-naxsi config

    ##

    # Uncomment it if you installed nginx-naxsi

    ##

    #include /etc/nginx/naxsi_core.rules;

    ##

    # nginx-passenger config

    ##

    # Uncomment it if you installednginx-passenger

    ##

    #passenger_root /usr;

    #passenger_ruby /usr/bin/ruby;

    ##

    # Virtual Host Configs

    ##

    include /etc/nginx/conf.d/*.conf;

    include /etc/nginx/sites-enabled/*;

}

# mail {

#   # See sample authentication script at:

#   #http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript

#   # auth_http localhost/auth.php;

#   # pop3_capabilities "TOP""USER";

#   # imap_capabilities "IMAP4rev1""UIDPLUS";

#   server {

#       listen     localhost:110;

#       protocol   pop3;

#       proxy      on;

#   }

#   server {

#       listen     localhost:143;

#       protocol   imap;

#       proxy      on;

#   }

#}

 

 本文转自 sykmiao 51CTO博客,原文链接:http://blog.51cto.com/syklinux/1873385,如需转载请自行联系原作者

相关文章
|
应用服务中间件 nginx
nginx优化:URI过长或request header过大导致400或414报错
当出现URI过长或请求头过大导致400或414报错时,可以通过以下方式对Nginx进行优化: 1. 调整client_max_body_size参数:该参数用于限制请求体的大小。默认情况下,Nginx的client_max_body_size参数设置为1M。如果请求体超过这个大小,Nginx会返回400错误。您可以根据实际需求适当增加这个值,例如设置为10M或更大。 ``` http { client_max_body_size 10M; } ``` 2. 调整large_client_header_buffers参数:该参数用于调整请求头缓冲区的大
4032 0
|
应用服务中间件 Linux PHP
深入理解Nginx工作原理及优化技巧(上)
深入理解Nginx工作原理及优化技巧
深入理解Nginx工作原理及优化技巧(上)
|
2月前
|
缓存 前端开发 JavaScript
|
2月前
|
缓存 监控 负载均衡
nginx相关配置及高并发优化
Nginx的高并发优化是一个综合性的过程,需要根据具体的业务场景和硬件资源量身定制。以上配置只是基础,实际应用中还需根据服务器监控数据进行持续调整和优化。例如,利用工具如ab(Apache Benchmarks)进行压力测试,监控CPU、内存、网络和磁盘I/O等资源使用情况,确保配置的有效性和服务的稳定性。
124 0
|
4月前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
61 2
|
4月前
|
缓存 前端开发 Java
"揭秘!SpringBoot携手Nginx,性能飙升秘籍大公开:轻松掌握配置优化,让你的应用快如闪电!"
【8月更文挑战第11天】随着微服务架构的发展,SpringBoot成为构建RESTful API的首选,Nginx则作为高性能的反向代理服务器提升应用性能。本文将探讨两者如何协同工作,包括Nginx的负载均衡策略、静态资源缓存及数据压缩配置;同时讨论SpringBoot的线程池优化、缓存策略及性能监控。通过这些方法,帮助开发者显著提高系统的整体性能和可用性。
162 1
|
5月前
|
缓存 负载均衡 应用服务中间件
Nginx反向代理优化
教你如何做好Nginx反向代理优化
109 5
|
6月前
|
监控 前端开发 应用服务中间件
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽(2)
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽
87 1
|
6月前
|
负载均衡 前端开发 应用服务中间件
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽(1)
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽
186 1
|
7月前
|
缓存 负载均衡 安全
深入探索Nginx高性能Web服务器配置与优化
【5月更文挑战第7天】本文深入探讨了Nginx的配置与优化,重点介绍了基础配置参数如`worker_processes`、`worker_connections`和`keepalive_timeout`,以及优化策略,包括使用epoll事件驱动模型、开启gzip压缩、启用缓存、负载均衡和安全配置。此外,还提到了性能调优工具,如ab、nginx-stats和nmon,以助于提升Nginx的性能和稳定性。