简介

高性能的 HTTP 和反向代理服务器软件

架构

由内核 和 一系列模块组成

  • 内核

    提供 web 服务的基本功能如启用网络协议、创立运行环境、接管和调配客户端申请、解决模块之间的交互
  • 模块

    从构造上分为外围模块、根底模块和第三方模块外围模块: HTTP 模块、EVENT 模块和 MAIL 模块根底模块: HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy 模块和 HTTP Rewrite 模块第三方模块: HTTP Upstream Request Hash 模块、Notice 模块和 HTTP Access Key 模块及用户本人开发的模块

装置

# 以centos为例sudo yum install -y nginx # 启动sudo systemctl start nginx# 查看配置文件 默认是/etc/nginx/nginx.confsudo nginx -t

守护过程

nginx 启动后 运行 守护过程守护过程 由 一个 master 过程 和 若干个 worker过程 组成(这里worker过程的数量由配置文件中字段worker_processes映射的值决定)master过程的工作: 读取并验证配置信息创立、绑定及敞开套接字;启动、终止 worker 过程及保护 worker 过程的个数;毋庸停止服务而重新配置工作;管制非中断式程序降级,启用新的二进制程序并在须要时回滚至老版本;从新关上日志文件;编译嵌入式 Perl 脚本worker过程次要实现如下工作:接管、传入并解决来自客户端的连贯提供反向代理及过滤性能nginx 任何能实现的其它工作

优化

次要通过设置/etc/nginx/nginx.conf来实现

  • 顶层配置

    # 次要是设置worker_processes字段的值# 能够是设置为autoworker_processes auto;# 也能够依据查看本机的可运行内核数来判断cat /proc/cpuinfo |grep processor
  • events配置

    # 次要是设置events代码块worker_connections字段的值# 这个值代表一个 worker 过程能够同时关上的链接数# 默认是events {    worker_connections 1024;}
  • http配置

    • Basic Settings

      sendfile指向 sendfile()函数。sendfile() 在磁盘和 TCP 端口(或者任意两个文件描述符)之间复制数据tcp_nopush 配置 Nginx 在一个包中发送全副的头文件,而不是一个一个发送tcp_nodelay 配置 Nginx 不要缓存数据,应该疾速的发送小数据(这仅仅应该用于频繁发送小的碎片信息而无需立即获取响应的,须要实时传递数据的利用中)keepalive_timeout 指定了与客户端的 keep-alive 链接的超时工夫。服务器会在这个工夫后敞开链接。咱们能够升高这个值,以防止让 worker 过长时间的繁忙。
    • logging setings

      access_log 确定了 Nginx 是否保留拜访日志。将这个设置为敞开能够升高磁盘 IO 而晋升速度。error_log 设置 Nginx 该当记录临界谬误
    • Gzip settings

      gzip 设置 nginx gzip 压缩发送的数据。这会缩小须要发送的数据的数量gzip_disable 为指定的客户端禁用 gzip 性能gzip_proxied 容许或禁止基于申请、响应的压缩。设置为 any,就能够 gzip 所有的申请gzip_comp_level 设置了数据压缩的等级。等级能够是 1-9 的任意一个值,9 示意最慢然而最高比例的压缩gzip_types 设置进行 gzip 的类型

配置文件模板

# https://www.nginx.com/resources/wiki/start/topics/examples/full/user       www www;  ## Default: nobodyworker_processes  5;  ## Default: 1error_log  logs/error.log;pid        logs/nginx.pid;worker_rlimit_nofile 8192;events {  worker_connections  4096;  ## Default: 1024}http {  include    conf/mime.types;  include    /etc/nginx/proxy.conf;  include    /etc/nginx/fastcgi.conf;  index    index.html index.htm index.php;  default_type application/octet-stream;  log_format   main '$remote_addr - $remote_user [$time_local]  $status '    '"$request" $body_bytes_sent "$http_referer" '    '"$http_user_agent" "$http_x_forwarded_for"';  access_log   logs/access.log  main;  sendfile     on;  tcp_nopush   on;  server_names_hash_bucket_size 128; # this seems to be required for some vhosts  server { # php/fastcgi    listen       80;    server_name  domain1.com www.domain1.com;    access_log   logs/domain1.access.log  main;    root         html;    location ~ \.php$ {      fastcgi_pass   127.0.0.1:1025;    }  }  server { # simple reverse-proxy    listen       80;    server_name  domain2.com www.domain2.com;    access_log   logs/domain2.access.log  main;    # serve static files    location ~ ^/(images|javascript|js|css|flash|media|static)/  {      root    /var/www/virtual/big.server.com/htdocs;      expires 30d;    }    # pass requests for dynamic content to rails/turbogears/zope, et al    location / {      proxy_pass      http://127.0.0.1:8080;    }  }  upstream big_server_com {    server 127.0.0.3:8000 weight=5;    server 127.0.0.3:8001 weight=5;    server 192.168.0.1:8000;    server 192.168.0.1:8001;  }  server { # simple load balancing    listen          80;    server_name     big.server.com;    access_log      logs/big.server.access.log main;    location / {      proxy_pass      http://big_server_com;    }  }}