设为首页 收藏本站
查看: 767|回复: 1

[经验分享] nginx-linux运维小站

[复制链接]

尚未签到

发表于 2018-11-9 12:51:17 | 显示全部楼层 |阅读模式
  nginx(web server,web reverse proxy)
  http事务:request  response
  request:
    
  
  ...
  
  response:
    
  
  ...
  
  web资源:URL (scheme://server:port/path/to/source)
  方法:GET, HEAD, POST, (WEBDAV) PUT, DELETE, TRACE, OPTIONS
  status:
  1xx: 信息类
  2xx: 成功类,200
  3xx: 重定向,301, 302, 304
  4xx: 客户端类错误,403, 401, 404
  5xx: 服务端类错误,502
  I/O类型:
  同步和异步:synchronous, asyncrhonous
  关注的是消息通知机制
  同步:调用发出不会立即返回,但一旦返回就可以返回最终结果;
  异步:调用发出之后,被调用方立即返回消息,但返回的非最终结果;被调用者通过状态、通知机制来通知调用者,或通过回调函数来处理结果;
  阻塞和非阻塞:block, nonblock
  关注的是调用者等待调用结果(消息、返回值)时的状态
  阻塞:调用结果返回之前,调用者(调用线程)会被挂起;调用者只有在得到结果之后才会返回;
  非阻塞:调用结果返回之前,调用不会阻塞当前线程;
  5种I/O模型:
  同步阻塞   blocking IO
  同步非阻塞    nonblocking IO
  IO复用    IO multiplexing            select(),poll()
  信号驱动IO   signal driven IO    通知:1、水平触发:多次通知;2、边缘触发:只通知一次;
  异步IO     asyncrhonous IO
  nginx:读音engine x
  二次研发:tengine、registry
  libevent:高性能的网络库
  1、epool()
  Nginx的特性:
  模块化设计、较好扩展性;
  高可靠性:master/worker
  支持热部署:不停机更新配置文件、更换日志、更新服务器程序版本;
  低内存消耗 :10000个keep-alive连接模式下的非活动连接仅消耗2.5M内存;
  事件驱动机制(mmap), 异步IO(aio), 内存映射机制(mmap);
  基本功能:
  静态资源的web服务器,能缓存打开的文件描述符;
  http、smtp、pop3、imap4等协议的反向代理服务器;
  缓存加速、负载均衡;
  支持FastCGI(php-fpm), uWSGI(Python Web Framwork)等协议
  模块化(非DSO机制),过滤器zip、SSI及图像的大小调整;
  支持SSL;
  扩展功能:
  基于名称和IP的虚拟主机;
  支持keepalive
  支持平滑升级
  定制访问日志,支持使用日志缓存区提供日志存储性能;
  支持url rewrite;
  支持路径别名;
  支持基于IP及用户的访问控制;
  支持速率限制,支持并发数限制;
  Nginx的程序架构:
  master/worker
  一个master进程,可生成一个或多个worker进程;
  事件驱动模型:epoll(Linux默认边缘触发), kqueue(FreeBSD), /dev/poll(Solaris)
  消息通知(复用器):select, poll, rt signals
  支持sendfile,  sendfile64
  支持AIO,mmap
  master: 加载配置文件、管理worker进程、平滑升级,...
  worker:http服务,http代理,fastcgi代理,...
  模块类型:
  1、核心模块:core module
  2、标准模块:
  a、标准http模块:Standard HTTP modules
  b、可选http模块:Optional HTTP modules
  c、邮件相关模块:Mail modules
  3、第三方模块:3rd party modules
  安装方法:
  1、源码:编译安装
yum groupinstall "development tools" "server plantform development"
yum -y install pcre-devel openssl-devel zlib-devel
wget http://101.110.118.22/nginx.org/download/nginx-1.14.0.tar.gz
tar xvf nginx-1.14.0.tar.gz -C /usr/local/
cd /usr/local/nginx-1.14.0/
./configure --help | less
useradd -r nginx
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx  --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-debug
make && make install
  2、制作好的程序包:rpm包
  配置文件组织结构
  main block:全局配置;对http及mail模块均有效;
  events {}:定义event模型(事件驱动)的相关配置;对http及mail模块均有效
  http {}:http协议的相关配置;
  mail {}:mail协议的相关配置;
  配置指令:要以分号结尾,语法格式:directive    value1 [value2...]
  支持使用变量:1、内置变量:模块会提供内建变量;2、自定义变量:set var_name value;
  main配置段:
  类别:
  正常运行必备的配置;
  优化性能相关的配置;
  用于调试、定位问题的配置;
  正常运行必备的配置:
  1、user USERNAME  [GROUPNAME];
  指定用于运行worker进程的用户和组;
  user  nginx  nginx;
  2、pid  /PATH/TO/PID_FILE;
  指定nginx进程的pid文件路径;
  pid  /var/run/nginx.pid;
  3、worker_rlimit_nofile #;
  指定单个worker进程所能够打开的最大文件描述符数量;
  性能优化相关的配置:
  1、worker_processes #;
  worker进程的个数;通常应该为物理CPU核心数量减1;
  可以为"auto",实现自动设定;
  2、worker_cpu_affinity  CPUMASK(cpu掩码) CPUMASK ...;
  worker_cpu_affinity auto [CPUMASK]
  实现nginx绑定cpu;
  优点:提升缓存的命中率;
  CPUMASK:多少颗cpu就用多少个二进制来表示;如下例如4颗cpu;
  0001
  0010
  0100
  1000
  worker_cpu_affinity 00000001 00000010 00000100;
  3、worker_priority  nice;
  定义worker进程的优先级;
  [-20, 19],默认nice值为0
  100-139,默认优先级为120
  4、timer_resolution interval;
  计时器解析度,降低此值,可减少gettimeofday()系统调用的次数;
  调试、定位问题的配置:
  1、daemon  off|on;
  是否以守护进程方式启动nignx;默认为on;调试时应该设置为off;
  2、master_process  on|off;
  是否以master/worker模型运行nginx;默认是on;调试时应该设置为off;
  3、error_log     /PATH/TO/ERROR_LOG     level;
  错误日志文件的记录方式,及其级别;出于调试的需要,可以设为debug;但debug仅在编译时使用了“--with-debug”选项时才有效;
  方式:
  file /PATH/TO/SOME_LOG_FILE;
  stderr:发送到错误输出;
  syslog:server=address[,parameter=value]:发送给syslog服务器;
  memory:size
  日志级别:
  debug:依赖于configure时的--with-debug选项;
  info、notice、warn、error、crit、alert、emerg
  事件驱动相关的配置:
  1、accept_mutex on | off;
  master调度用户请求至各worker进程时使用的负载均衡锁;on表示能让多个worker轮流地、序列化的响应新请求;
  2、lock_file file;
  accept_mutex用到的锁文件路径;
  3、use method;
  指明并发连接请求处理时使用的方法;即指明使用的事件模型;建议让nginx自行选择;
  use epool;linux只有epool可选
  4、worker_connections number;
  每个worker进程所能够响应的最大并发请求数量;
  总结:常需要进行调整的参数:
  worker_processes,worker_connetctions,worker_cpu_affinity,worker_priority

  新改动配置生效的方式:nginx -s>  nginx作为web服务器时使用的配置:
  定义套接字相关功能
  1、server {}:定义一个虚拟主机;
  server {
  listen PORT;
  server_name HOSTNAME;
  root /PATH/TO/DOCUMENTROOT;
  }
  ...
  注意:
  (1) 基于port的虚拟主机;
  listen指令监听在不同的端口;
  (2) 基于hostname的虚拟主机;
  server_name指令指向不同的主机名;
  (3)基于ip的虚拟主机:
  listen IP:PORT;
  2、listen
  listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
  listen port [default_server] [ssl] [http2 | spdy]
  listen unix:path [default_server] [ssl] [http2 | spdy]
  default_server:设置默认虚拟主机;用于基于IP地址,或使用了任意不能对应于任何一个server的name时所返回站点;
  ssl:用于限制只能通过ssl连接提供服务;
  backlog:后援队列的长度;
  rcvbuf:接收缓冲区大小;
  sndbuf:发送缓冲区大小;
  spdy:SPDY protocol(speedy),在编译了spdy模块的情况下,用于支持SPDY协议;
  http2:http version 2;
  3、server_name NAME [...];
  指明当前server的主机名;后可跟一个或多个用空白字符分隔的主机;
  支持使用*任意长度的任意字符;
  支持~起始的正则表达式模式字符串;
  优先级:
  (1) 首先做精确匹配;例如:www.magedu.com
  (2) 左侧通配符;例如:.magedu.com
  (3) 右侧通配符,例如:www.magedu.
  (4) 正则表达式,例如:~^.*.magedu.com$
  (5) default_server
  4、root path;
  设置web资源的路径映射;用于指明请求的URL所对应的文档的目录路径;
  可用上下文:http,server,location,if
  5、location [ = | ^~ | ~ | ~*  ] uri { ... };
  location @name { ... }
  功能:允许根据用户请求的URI来匹配定义的各location;匹配到时,此请求将被相应的location块中的配置所处理,例如做访问控制等功能;
  =:URI的精确匹配;
  ^~:URI的前半部分匹配,不支持正则表达式;
  ~:做正则表达式匹配,区分字符大小写;
  ~*:做正则表达式匹配,不区分字符大小写;
  匹配优先级:精确匹配=、^~、~或~*、不带符号的URL;
  6、alias path;
  只能用于location配置段,定义路径别名;
  location  /images/ {
  root /data/imgs/;
  }
  http://www.magedu.com/images/a.jpg       /scripts/index.php
  http://www.magedu.com/users.php?username=tom
  (4) fastcgi_cache_path path  [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size];
  定义缓存:缓存空间等;
  可应用的上下文 :http
  缓存机制:
  元数据:内存,即为keys_zone;
  数据:磁盘,即为path;
  path:文件系统路径,用于储存缓存的文件数据;
  levels=#[:#[:#]]:缓存目录层级定义;
  levels=2:1
  keys_zone=name:size
  内存中用于缓存k/v映射关系的空间名称及大小;
  name: cache的标识符;
  size:元数据cache大小;
  max_size:缓存空间上限;
  注意:只能用于http上下文;
  (5) fastcgi_cache zone | off;
  调用定义过的缓存;
  zone即为通过fastcgi_cache_path定义缓存时其keys_zone参数中的name;
  (6) fastcgi_cache_key string;
  定义如何使用缓存键;
  使用示例:fastcgi_cache_key   $request_uri;
  (7) fastcgi_cache_methods GET | HEAD | POST ...;
  为何请求方法对应的请求进行缓存,默认为GET和HEAD;
  (8) fastcgi_cache_min_uses number;
  缓存项的最少使用次数;
  (9) fastcgi_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_503 | http_403 | http_404 | off ...;
  是否可使用stale缓存项响应用户请求;
  (10) fastcgi_cache_valid [code ...] time;
  对不同响应码的响应设定其可缓存时长;
  示例:
  fastcgi_cache_valid 200 302 10m;
  fastcgi_cache_valid 301 1h;
  fastcgi_cache_valid 404      1m;
  注意:调用缓存时,至少应该指定三个参数
  fastcgi_cache
  fastcgi_cache_key
  fastcgi_cache_valid
  LNMP:php启用fpm模型;
  php-fpm的工作方式:
  listen = 127.0.0.1:9000
  listen.allowed_clients = 127.0.0.1
  pm = dynamic|static
  pm.start_servers:启动fpm进程时启动的工作进程数量;
  pm.min_spare_servers:最少空闲进程数;
  pm.max_spare_servers:最大空闲进程数;
  pm.max_children:最大工作进程数;
  user = USERNAME
  group = GROUPNAME
  示例:location / {
  root           /vhosts/web1;
  index           index.php     index.html         index.htm;
  }
  location ~ .php$ {
  root              /vhosts/web1;
  fastcgi_pass              127.0.0.1:9000;
  fastcgi_index        index.php;
  fastcgi_param           SCRIPT_FILENAME         /vhosts/web1/$fastcgi_script_name;
  include                fastcgi_params;
  }


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-632875-1-1.html 上篇帖子: Nginx/tengine里的那些timeout时间 下篇帖子: nginx-10947928

尚未签到

发表于 2022-8-3 14:00:56 | 显示全部楼层

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表