高性能Nginx最佳实践

2022-07-28  本文已影响0人  右耳菌

1. Nginx的简介

相关内容,可以查看 【Nginx 负载均衡】,这是我之前的一篇文章,这里就懒得再说明一次了。


2. Nginx监听端口

listen 127.0.0.1:8000;
listen 127.0.0.1;/默认80端口
listen 8000; / / listen *:8000; / / listen localhost:8000;

worker_processes auto;
pid /run/nginx.pid; #指定了进程号,如果报错就注释掉吧,不然nginx -t 会提示失败

events {
  #use epoll; # 仅用于linux2.6以上内核,如果报错就注释掉吧
  worker_connections 65535;
}

http {
  server {
    listen 80; #监听80端口
    location / {
      default_type text/html;
       return 200 "Hello, Nginx! Here the port is 80! \n";
    }
  }

  server {
    listen 8080; #监听8080端口
    location / {
      default_type text/html;
       return 200 "Hello, Nginx! Here the port is 8080! \n";
    }
  }

}
listen address:port [default(deprecated in in 0.8.21)|default_server|[backlog=num|rcvbuf=size|sndbuf=size|accept_filter=filter|deferred|bind|ipv6only=[on[off]|ssl]];
listen可用参数的意义

3. Nginx虚拟主机

Nginx虚拟主机
worker_processes auto;
pid /run/nginx.pid; #指定了进程号,如果报错就注释掉吧,不然nginx -t 会提示失败

events {
  #use epoll; # 仅用于linux2.6以上内核,如果报错就注释掉吧
  worker_connections 65535;
}

http {

  upstream origin.lazyfennec.cn {
    server 127.0.0.1:8080;
  }  

  server {
    listen 80; #监听80端口
    server_name test.lazyfennec.cn;
    location / {
      proxy_pass http://origin.lazyfennec.cn;
    }
  }
  
 #实际的处理业务服务
  server {
    listen 8080; #监听8080端口
    location / {
      default_type text/html;
       return 200 "Hello, Nginx! Here the port is 8080! \n";
    }
  }
}

以上内容如果在本机测试,记得修改hosts文件,在单独的一行(为了避免可能被覆盖的情况,建议放到最后),添加以下内容(请按照自己的需求进行修改)

127.0.0.1 test.lazyfennec.cn
测试结果

4. 重点 之 Nginx配置location

语法: location [=*I^l@]/uri/{…}
配置块:server
详情: location会尝试根据用户请求中的uri来匹配上面的uri表达式,如果可以匹配,就选择lcoation块中的配置来处理用户请求。当然,匹配方式是多样的。

  • = /uri表示完全匹配。
  • ~/uri表示匹配URI时时大小写敏感的。
    (注意,如果系统本身就是大小写不敏感的,那么这里的大小写敏感将不会生效,也就是说,如果要使用大小写敏感,请不要使用Windows系统作为nginx的运行服务器)
  • ~*/uri表示匹配URI时忽略大小写。
  • ^~/uri表示匹配URI时只需要其前半部分匹配即可。
  • /uri不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
  • /通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。

注意:location是有顺序的,如果一个请求有可能被多个location匹配,实际上这个请求会被第一个与之匹配的location处理。

最后location /{会处理所有的请求}

worker_processes auto;
pid /run/nginx.pid; #指定了进程号,如果报错就注释掉吧,不然nginx -t 会提示失败

events {
  #use epoll; # 仅用于linux2.6以上内核,如果报错就注释掉吧
  worker_connections 65535;
}

http {

  server {
    listen 80; #监听80端口

    location / {
      default_type text/html;
      return 200 "local /: I am default location!\n";
    }

    location = /goodjob {
      default_type text/html;
      return 200 "location = /goodjob\n";
    }

    # 大小写敏感
    location ~ /Goodjob {
      default_type text/html;
      return 200 "location ~ /Goodjob\n";
    }

    # 大小写不敏感
    location ~* /goodjob {
      default_type text/html;
      return 200 "location ~* /goodjob\n";
    }  
    
    # 前缀匹配
    location ^~ /goodjob {
      default_type text/html;
      return 200 "location ^~ /goodjob \n";
    } 
  }
}

5. Nginx 常规配置


6. Nginx 高性能配置

worker_processes 4;
worker_cpu_affinity 1000 0100 0010 0001;

7. Nginx 事件配置


8. Nginx事件模型

epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。

  • 支持一个进程打开大数目的socket描述符。
  • IO效率不随FD(File descriptor)数目增加而线性下降。
  • 使用mmap加速内核与用户空间的消息传递。

9. Nginx配置实例


如果觉得有收获,欢迎评论、点赞和转发,更多知识,请点击关注查看我的主页信息哦~

上一篇 下一篇

猜你喜欢

热点阅读