设为首页 收藏本站
查看: 509|回复: 0

[经验分享] 深入理解Nginx-guo

[复制链接]

尚未签到

发表于 2018-11-11 13:02:12 | 显示全部楼层 |阅读模式
  深入理解Nginx
  一、Nginx是什么?
  二、为什么选择Linux ?
  三、Nginx生成的文件有哪些?
  四、Nginx的配置详解?
  五、模块功能详解
  六、虚拟主机配置详解?
  一、Nginx是什么?
  Nginx(engine X)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由lgor Sysoev为Rambler.ru(该站点为俄罗斯第二大站点)研发,第一个公开版0.1.0发布于2004年10月4日。其源代码以类似BSD许可证的形式发布,因为它的稳定性,功能扩展性,示例配置文件和低系统资源的消耗而闻名。
  二、为什么选择Nginx?
  1、更快~
  u 单次请求会得到更快的响应
  u 在高峰期(数以万计的并发请求时)比其他web服务器更快的响应;
  2、高扩展性~
  u 它完全是由多个不同功能、不同层次、不同类型且耦合度低的模块组成;
  3、高可靠性~
  u 官方提供的常用模块稳定性高,master进程在worker进程出错时可以快速“拉起”新的worker子进程提供服务;
  4、低内存消耗~
  u 高并发
  5、单机可支持10万以上的并发连接~
  6、热部署~
  u Master管理进程与worker工作进程分离设计,使得Nginx能够提供热部署功能,即可在7x24小时不间断服务的前提下,进行Nginx的可执行文件的升级;
  7、最自由的BSD许可协议~
  u 免费,支持二次开发;
  三、Nginx的安装和启动
  1、安装Nginx
  配置Nginx的yum源
  [root@localhost yum.repos.d]# cat nginx.repo
  [nginx]
  name=nginx
  baseurl=http://nginx.org/packages/centos/7/x86_64/
  enabled=1
  gpgcheck=0
  [root@localhost yum.repos.d]#
  安装Nginx
  [root@localhost yum.repos.d]# yum install -y nginx
  生成的文件
  [root@localhost yum.repos.d]# rpm -ql nginx
  /etc/logrotate.d/nginx
  /etc/nginx
  /etc/nginx/conf.d//虚拟主机配置目录
  /etc/nginx/conf.d/default.conf//默认的虚拟主机配置
  /etc/nginx/fastcgi_params
  /etc/nginx/koi-utf
  /etc/nginx/koi-win
  /etc/nginx/mime.types
  /etc/nginx/modules
  /etc/nginx/nginx.conf//nginx的配置文件
  /etc/nginx/scgi_params
  /etc/nginx/uwsgi_params
  /etc/nginx/win-utf
  /etc/sysconfig/nginx
  /etc/sysconfig/nginx-debug
  /usr/lib/systemd/system/nginx-debug.service
  /usr/lib/systemd/system/nginx.service
  /usr/lib64/nginx
  /usr/lib64/nginx/modules
  /usr/libexec/initscripts/legacy-actions/nginx
  /usr/libexec/initscripts/legacy-actions/nginx/upgrade
  /usr/sbin/nginx//主Nginx程序
  /usr/sbin/nginx-debug
  /usr/share/doc/nginx-1.10.2
  /usr/share/doc/nginx-1.10.2/COPYRIGHT
  /usr/share/man/man8/nginx.8.gz
  /usr/share/nginx
  /usr/share/nginx/html
  /usr/share/nginx/html/50x.html
  /usr/share/nginx/html/index.html
  /var/cache/nginx
  /var/log/nginx
  [root@localhost yum.repos.d]#
  2、Nginx的启动和测试
  启动
  [root@localhost yum.repos.d]# systemctl  start nginx.service
  [root@localhost yum.repos.d]# ss -antp|grep :80
  LISTEN     0      128          *:80 //可监听到80端口已经启用                     *:*                   users:(("nginx",pid=34244,fd=6),("nginx",pid=34243,fd=6))
  [root@localhost yum.repos.d]#
  测试
  访问:http://172.16.80.72
  四、Nginx配置详解
  1、配置文件
  /etc/nginx/nginx.conf
  注意事项
  指令必须以分号结束;
  支持使用配置变量
  内建变量:由Nginx模块引入,可直接引用;
  自定义变量:使用set命令进行定义
  如:set variable_name value;引用变量:$variable_name
  2、配置文件的组成
  u Manblock
  正常运行必备的配置
  user nginx;//用户为nginx
  pid        /var/run/nginx.pid;//主进程pid表示存放路径
  Include file | mask;//指明包含进来的其他配置文件片段
  load_module file;//指明要装载的动态模块
  优化性能的相关配置
  worker_processes  1;//工作进程数量,一般小于或者等于实际的CPU数量
  //参数也可为auto,自动分配cpu数量;
  worker_cpu_affinity cpumask ...; //绑定工作cpu;
  //0000 0001 为0号cpu
  //0000 0010 为1号cpu ......
  //参数可谓auto,自动选择cpu进行工作;
  work_priority number;//指定worker进程的nice值,设定worker进程优先//级:[-20,20]
  worker_rlimit_nofile number;//worker进程所能够打开的文件数量上限;
  //理论值应为$(ulimit -n) 除以worker进程数
  //实际应为ulimit -n
  用于调试和定位问题的相关配置
  daemon on|off;//是否以守护进程运行Nginx;
  master_process on|off;//是否以master/worker模型运行nginx;默认为on;
  error_log  /var/log/nginx/error.log debug;//error_log file [level];
  //错误日志存放位置,日志级别
  //debug,info,notice,warn,error,crit,alert,emerg
  u Event
  事件驱动的相关配置
  worker_connections number;//每个worker进程所能打开的最大并发连接数;
  //服务器承载的最大并发为
  //worker_processes * worker_connections
  use method//指明并发连接请求的处理方法
  //一般为 use epoll;
  accept_mutex on|off//处理新的连接请求的方法
  //on意味着由各worker轮流处理新请求,
  //off意味着每个心情求到达都会通知worker进程
  u http
  与套接字相关配置
  server { .... }//配置一个虚拟主机
  server{
  listen  address[:port]|port;
  Server_name SERVER_NAME;
  Root  /path/to/Document_root
  }
  listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
  listen address[:port] [default_server] [ssl] [http2 | spdy]  [backlog=number] [rcvbuf=size] [sndbuf=size]
  //default server:设定为默认虚拟主机;
  //ssl:限制仅能够通过ssl连接提供服务
  //backlog=number:后援列队长度
  //rcvbuf=size:接收缓冲区大小
  //sndbuf=size:发送缓冲区大小
  server_name name ....;
  指明虚拟主机名称:后可跟多个由空白字符分隔的字符串;
  支持*统配任意字符串:server_name *.magedu.comwww.magedu.*
  //*处可为任意字符
  支持“~”起始的字符做正则表达式模式匹配:server_name ~^www\d+\.magedu\.com$ // \d+ :为至少一个数字;
  Server_name的匹配机制如下:
  a. 字符串精确匹配
  b. 左侧*通配符
  c. 右侧*通配符
  d. 正则表达式
  Tcp_nodelay on|off//在keepalived模式下的连接是否启用TCP_NODELAY//选项;
  Sendfileon|off//是否启动sendfile功能
  Root path:
  设置web资源路径映射;用于指明用户请求url所对应的本地文件系统上的文档所在目录路径;
  可用位置:http,server,location,if in location
  Location [ = | ~ | ~* | ^~ ] uri { .... }
  Location @name { .... }
  在一个server中location配置段可存在多个,用于实现从uri到文件系统弄的路径映射;nginx会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置;
  =:对URI做精确匹配;例如
  http://www.magedu.com/,
  http://www.magedu.com/index.html
  Location = / {
  .....
  }
  ~:对URI做正则表达式模式匹配,区分字符大小写;
  ~*:对URI做正则表达式模式匹配,不区分字符大小写;
  ^~:对URI的左半部分做匹配检查,不区分字符大小写;
  不带符号:匹配起始于此uri的所有url;
  匹配优先级:=,^~,~,~*,不带符号;
  root /vhosts/www/htdocs/
  http://www.magedu.com/index.html --> /vhosts/www/htdocs/index.html
  server {
  root  /vhosts/www/htdocs/
  location /admin/ {
  root /webapps/app1/data/
  }
  }
  alias path;
  定义路径别名,文档映射的另一种机制;仅能使用与location上下文;
  1. root,给定的路径对应于location中/uri/左侧的/;
  2. alias,给定的路径对应于location中的/uri/左侧的/;
  Index file ....;//默认资源:http,server,location
  Error_page code ..[=[responde]] uri;
  //code 是响应码,定义响应码相关页面;
  try_files file ... uri;
  定义客户端请求的相关配置
  Keepalive_timeout timeout [header timeout];
  //设定保持连接的超时时长,0表示禁止长连接;    //默认为75s;
  Keepalive_requests number;//在第一次长连接上所允许请求的资源的最大数量,
  //默认为100;
  Keepalive_disable none | browser ....;
  //禁止使用何种浏览器;
  Send_timeout time;//向客户端发送响应报文的超时时长,此处,是指两次写//操作之间的间隔时长;

  Client_body_buffer_size>  用于接收客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,将其暂存到磁盘上由clien_body_temp_path指令所定义的位置;
  Client_body_temp_path path [level1 [level2 [level3]] ];
  设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量;
  例如:client_body_temp_path /var/tmp/client_body  1  2  2   //16进制数字
  对客户端进行限制的相关配置
  Limit_rate rate;//限制响应给客户端的速率,
  //单位bytes/second,0表示不限制;
  Limit_except  method ....//允许method的客户端
  Limit_except GET {
  Allow 192.168.1.0/24;
  Deny all ;
  }
  文件操作优化配置
  Aio on | off threads[=pool];//是否启用aio功能;
  //aio异步读取

  Directio>  在Linux主机启用O_DIRECT标记,此处意味文件大于等于给定的大小时使用,例如directio 4m;
  Open_file_cache off;
  Open_file_cache max=N [inactive=time];
  nginx可以缓存以下三种信息:
  (1)文件的描述法、文件大小和最近一次的修改时间;
  (2)打开的目录结构;
  (3)没有找到的或者没有权限访问的文件的相关信息;
  Max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现缓存管理;inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项;
  Open_file_cache_valid time;//缓存项有效性的检查频率;默认为60s;
  open_file_cache_min_uses number;
  在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多少次方可被归类为活动项;
  Open_file_cache_errors on | off;
  是否缓存查找时发生错误的文件一类的信息;
  u mail
  五、Nginx的模块详解
  ngx_http_access_module
  Ngx_http_auth_basic_module
  Ngx_http_stub_status_module
  Ngx_http_stub_status_module
  Ngx-http_log_module
  Ngx_http_gzip_module模块;
  Ngx_http_ssl_module模块;
  ngx_http_rewrite_module模块;
  Ngx_http_refer_modulem模块;
  Ngx_http_proxy_module模块;
  Ngx_http_headers_module模块;
  ngx_http_fastcgi_module模块;
  Ngx_http_core_module模块;
  Ngx_http_upstream_module模块;
  Ngx_stream_proxy_module模块;
  ngx_stream_core_module模块;
  Ngx_http_access_module模块
  本模块主要实现基于ip的访问控制功能;
  Allow address |CIDR |unix: |all;//允许访问的ip;
  Deny address |CIDR |unix; |all;//拒绝的访问Ip;
  适用于:http,server,laction,limit_except;
  Ngx_http_auth_basic_module模块
  实现基于用户的访问控制,使用basic机制进行用户认证;
  Auth_basic string | off;
  Auth_basic_user_file file;
  Location /admin/ {
  Alias /webapps/app1/data/;
  Auth_basic “admin area”
  Auth_basic_user_file /etc/nginx/.ngxpasswd;
  }
  nginx本身不提供htpasswd命令,htpasswd命令则有httpd-tools提供;
  Ngx_http_stub_status_module模块
  实现用于输出Nginx的基本状态信息;
  Active connections : 291
  Server accepts handled requests
  Xxx xxx xxx xxx
  Reading :6 writing: 179 waiting 106
  Active connetions:活动状态的连接数;
  Accetps : 已经接受的客户端请求的总数;
  Handled:已经完成处理完成的客户端请求总数;
  Requests:客户端发来的总的请求书;
  Writing:处于向客户端发送响应报文过程中的连接数;
  Waiting:处于等待客户端发出来的请求的空闲连接数;
  stub_status;
  配置实例:
  Location /basic_status {
  Stub_status;
  }
  Ngx-http_log_module模块
  log_format name string ....;//实现日志格式模块
  String 可以使用Nginx核心模块及其他模块内嵌的变量;
  Access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
  Access_log off;
  访问日志文件路径,格式及相关的缓冲的配置;
  open_log_file_cache max=N [incative=time] [min_uses=N] [valid=time];
  Open_log_file-cache off;
  缓存各日志文件相关的元数据信息;
  Max:缓存的最大文件描述符数量;
  min_uses:在inactive指定的时长内访问大于等于此值方可被当做活动项;
  Inactive:非活动项;
  Valid:这个指多长时间检查一次缓存信息有效性。也就是说即使我一直访问这个文件,30S后会检查此文件的更改信息是否编发,发现变化就更新。
  Ngx_http_gzip_module模块;
  静态压缩模块
  1、gzip on | off;//gzip开关
  2、gzip_comp_level level;//压缩级别[1-9];
  3、gzip_disable regex ...;
  将"User-Agent"请求头进行正则匹配,满足regex正则的请求对其响应时不启用gzip压缩,通常用来去除ie6等对gzip压缩支持不是很好的浏览器的gzip压缩;
  4、gzip_min_length length;
  启用gizp压缩的响应临界值大小,仅与响应头的"Content-Length"的值进行比较,只有大于gzip_min_length的响应才会进行压缩,比较合理的值是1000;

  5、gzip_buffers number>  设置gzip压缩时使用的缓冲区的个数以及每个缓冲区的大小,例如gzip_buffers 32 4k表示一共32个缓冲区,每个缓冲区4KB;
  6、gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
  nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的;
  off:对代理的请求不启用;no-cache, no-store,private:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能;
  7、gzip_types mime-type ...;
  压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能;
  指定需要压缩的响应内容类型,例如text/css application/javascript application/json application/xml分别表示对css js json xml进行压缩,多个用空格分开,*表示所有。注意:text/html类型总会被压缩,不需要显式的指定
  Ngx_http_ssl_module模块;
  1、ssl on | off;
  Enables the HTTPS protocol for the given virtual server.
  2、ssl_certificate file;
  当前虚拟主机使用PEM格式的证书文件;
  3、ssl_certificate_key file;
  当前虚拟主机上与其证书匹配的私钥文件;
  4、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
  支持ssl协议版本,默认为后三个;
  5、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
  builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有;
  shared:name:size]:在各worker之间使用一个共享的缓存;
  6、ssl_session_timeout time;
  客户端一侧的连接可以复用ssl session cache中缓存 的ssl参数的有效时长;
  配置示例:
  server {
  listen 443 ssl;
  server_name www.magedu.com;
  root /vhosts/ssl/htdocs;
  ssl on;
  ssl_certificate /etc/nginx/ssl/nginx.crt;
  ssl_certificate_key /etc/nginx/ssl/nginx.key;
  ssl_session_cache shared:sslcache:20m;
  }
  ngx_http_rewrite_module模块;
  将用户请求的URI基于regex所描述的模式进行检查,而后完成替换;
  1、rewrite regex replacement [flag]
  将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI;
  注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;
  [flag]:
  last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环;
  break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环;
  redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头;
  permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;
  2、Return
  Return code [text];
  Return code URL;
  Return URL;
  停止处理并指定返回code到客户端。
  3、rewrite_log on | off;
  是否开启重写日志;
  4、if (condition) { ... }
  引入一个新的配置上下文 ;条件满足时,执行配置块中的配置指令;server, location;
  condition:
  比较操作符:
  ==
  !=
  ~:模式匹配,区分字符大小写;
  ~*:模式匹配,不区分字符大小写;
  !~:模式不匹配,区分字符大小写;
  !~*:模式不匹配,不区分字符大小写;
  文件及目录存在性判断:
  -e, !-e
  -f, !-f
  -d, !-d
  -x, !-x
  5、set $variable value;
  设置用户自定义变量;
  Ngx_http_refer_modulem模块;
  1、valid_referers none | blocked | server_names | string ...;
  定义referer首部的合法可用值;
  none:请求报文首部没有referer首部;
  blocked:请求报文的referer首部没有值;
  server_names:参数,其可以有值作为主机名或主机名模式;
  arbitrary_string:直接字符串,但可使用*作通配符;
  regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如 ~.*\.magedu\.com;
  配置示例:
  valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;
  if($invalid_referer) {
  return 403;
  }
  Ngx_http_proxy_module模块;
  代理模块
  ##proxy_pass URL;
  适用域:location,if in location,limit_except;
  注意:proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机;
  server {
  ...
  server_name HOSTNAME;
  location /uri/ {
  proxy http://hos[:port];
  }
  ...
  }
  http://HOSTNAME/uri --> http://host/uri
  proxy_pass后面的路径是一个uri时,其会将location的uri替换为proxy_pass的uri;
  server {
  ...
  server_name HOSTNAME;
  location /uri/ {
  proxy http://host/new_uri/;
  }
  ...
  }
  http://HOSTNAME/uri/ --> http://host/new_uri/
  ##proxy_set_header field value;
  设定发往后端主机的请求报文的请求首部的值:
  proxy_set_header X-Real-IP $remote_addr;
  Proxy_set_header X-Fowaeded-For $proxy_add_x_forwarded_for;
  ##proxy_cache_path
  定义可用于proxy功能的缓存;Context:http
  proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
  ##proxy_cache zone |off;
  指定要调用的缓存,或关闭缓存机制:
  适用域:http,server,location
  ##proxy_cache_key  string;
  缓存中用于“键”的内容;
  Proxy_cache_key $scheme$proxy_host$request_uri;
  ##proxy_cache_valid [code ...] time;
  定义对特定响应吗的响应内容的缓存时长;
  定义在http{...}中;
  proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=pxycache:20m max_size=1g;
  定义在需要调用缓存功能的配置段,例如server{...};
  proxy_cache pxycache;
  proxy_cache_key $request_uri;
  proxy_cache_valid 200 302 301 1h;
  proxy_cache_valid any 1m;
  ##proxy_cache_use_stale
  ##proxy_cache_methods GET | HEAD | POST....;
  ##proxy_hide_header fidle;
  ##proxy_connect_timeout time;  默认为60s;
  Ngx_http_headers_module模块;
  向代理服务器响应,给客户端的的响应报文添加自定义首部,或者修改指定首部的值;
  ##add_header name valie [always];//添加自定义首部
  add_header X-via $server_addr;
  Add_header X-Accel $server_name;
  ##expires [modified] time;
  Expires epoch |max | off;
  用于定义expire或者Cache-Control首部的值;
  ngx_http_fastcgi_module模块;
  本模块主要用于连接fastcgi;用于lnmp搭建;
  ## fastcgi_pass address;//fastcgi的server地址;
  作用域location,if in location;
  ##fastcgi_index name;//fastcgi默认的主页页面;
  ##fastcgi_param parameter value [if_not_empty];
  应该设置一个参数传递给FastCGI服务器。值可以包含文本、变量和它们的组合。这些指令是继承了以前的水平当且仅当没有fastcgi_param指令定义在当前水平。
  /etc/nginx/fastcgi_params 定义了变量传递参数;
  示例:
  location ~* \.php$ {
  root           /usr/share/nginx/html;
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME
  //fpm变量名称,/usr/share/nginx/html$fastcgi_script_name;
  //$fastcgi_script_name;  $之前不应该有/,因为在资源访问的时候本身就有一个/;  nginx的变量名称
  include        fastcgi_params;
  }
  配置示例2:通过/pm_status和/ping来获取fpm server状态信息;
  location ~* ^/(pm_status|ping)$ {
  include        fastcgi_params;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_param  SCRIPT_FILENAME  $fastcgi_script_name;
  }
  ###fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
  用于定义fastcgi的缓存;缓存位置为磁盘上的文件系统,由path所指定路径来定义;
  Levels=levels; 缓存目录的层级数量,以及每一级的目录数量,levels=ONE:TWO:THREE,leves=1:2:2
  Keys_zone=name:size//K/v映射的内存空间的名称及大小;
  Inactive=time//非活动时长
  max_size=size//磁盘上用于缓存数据的缓存空间上限
  ###fastcgi_cache zone |off ;//调用指定的缓存空间来缓存数据;
  //作用域:http,server,location
  ###fastcgi_cache_key string;//定义用做缓存项的key的字符串;
  ###fastcgi_cache_min_uses number;//缓存空间中的缓存项在inactive定义的非活动内至//少要被访问所指定的次数方可被认作是活动项;
  ###fastcgi_cache_valid [code ...] time//不同响应吗各自的缓存时长;
  示例:
  http {
  ...
  fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2:1 keys_zone=fcgi:20m inactive=120s;
  ...
  server {
  ...
  location ~* \.php$ {
  ...
  fastcgi_cache fcgi;
  fastcgi_cache_key $request_uri;
  fastcgi_cache_valid 200 302 10m;
  fastcgi_cache_valid 301 1h;
  fastcgi_cache_valid any 1m;
  ...
  }
  ...
  }
  ...
  }
  fastcgi_keep_conn on
  Ngx_http_core_module:
  http核心模块
  ####aio  on|off |sendfile;   //默认为关闭
  该指令的功能是启用或禁用异步I/0 (AIO);
  适用域:http,server,location
  ####alias path;
  针对location中的位置指定一个别名,访问location中的相关信息相当于访问别名的位置;
  location /images/ {
  alias /data/w3/images/;
  }

  ####client_body_buffer_size>  设置读取客户端请求的body时的缓存大小。在某些情况下当前请求的body大于缓存尺寸时,body将被缓存到本地磁盘的临时文件中。默认情况下缓冲区大小是两个内存页的大小;
  用法:client_body_buffer_size 8K|16K
  适用域:http,server,location
  ####cilent_body_in_file_only   on|clean |off//默认为off;
  确定nginx是否应该保存整个客户端请求的body在文件里。
  适用域:http,server,location
  ####client_body_in_single_buffer   on|off
  确定Nginx是否应该保存整个客户端请求的body在单个缓存中。这个指令被推荐使用当用户使用“$request_body”变量时;
  适用域:http,server,location
  ####client_body_temp_path  path[level1 [level2 [level3 ]]];
  定义一个存储客户端请求body的临时文件目录,3级子目录的层次结构,可以使用下面指定的目录。
  示例:client_body_temp_path  /spoo/nginx/client_temp;
  适用域:http,server,location
  一个临时文件可能看起来像这样:
  / spool/nginx/client_temp/7/45/00000123457
  ####http
  为http服务器相关配置指令提供一个上下文环境
  语法:http{...}
  适用域:主配置文件
  ####if_modified_since  off|exact |before;
  规定如何对响应时间同请求头中“if-Modified-Since”字段的值进行比较。
  默认:if_modified_since  exact;
  适用域:http,server,location;
  Off “if_modified_since”字段的请求被忽略;
  Before 修改时间小于或者等于这个请求头中“if_modified_since”字段的值;
  Exact:精确匹配
  ####keepalive_disable
  禁止同行为不端的浏览器保持长连接。浏览器参数指定的浏览器将会受到影响。Misie6参数将禁止老版本的ie浏览器建立长连接;
  语法:keepalive_disable  none |browser....;
  默认:keepalive_disable  msie6;
  适用域:http,server,location;
  ####keepalive_requests number;
  设置一个长连接中最多可以允许的request请求数量。当超过这个数量后,这个链接被释放。
  默认:keepalive_requests 100;
  适用域:http,server,location
  ####keepalive_timeout
  设置一个客户端的链接在server端保持存活的超时时间。参数为0则禁止客户端的keep-alive的链接。可选参数用来在http相应头中设置一个字段,字段名称keep-alive,字段值为:header_timeou;
  语法:keepalive_timeout timeout[header_timeout];
  默认:keepalive_timeout 75s;
  适用域:http,server,location
  ####large_client_header_buffers numbersize;
  设置当读取大的客户端请求时缓冲的最大数目和尺寸。在缓冲的一个请求行不能超过这个尺寸。或者客户端414(uri太大请求)信息被返回。一个请求头部域也不能超过buffer的尺寸,或者客户端成收到400(坏的请求)信息。缓冲仅在被需要时才创建。默认的buffer的尺寸是8k字节。如果请求的处理接受后,处理连接被转换成keep-alive状态,缓冲被释放。
  默认:large_client_header_buffers 4 8k;
  适用域:http,server
  ####limit_except
  现在在一个location配置中允许的内置方法。这个方法参数可以是下面参数:GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, or PATCH。运行Get方法也允许Head方法。到其他方法的访问能够采用ngx_http_access_module和ngx_http_auth_basic_module指令来限定。
  limit_except GET {
  allow 192.168.1.0/32;
  deny  all;
  }
  ####limit_rate
  向客户端相应的传输速度限制。这个速率制定的单位是 字节/秒钟。 特殊值0禁止这个速度值限制。该限制是针对每个请求的, 为此假设一个客户端模拟打开两个客户端连接,总的被现在的速度将是制定速率的2被。
  速度也能用$limit_rate变量来设置。当速度限制在一个特定的条件下发生时,这种现实是比较好的。例如:
  server {
  if ($slow) {
  set $limit_rate 4k;
  }
  …
  }
  另外这个速度限制也能在X-Accel-Limit-Rate相应头中指令中进行控制。本指令的功能能够通过proxy_ignore_headers指令来限制。
  ####limit_rate_after
  设置初始之后,对客户端的进一步相应的速度限制.
  location /flv/ {
  flv;
  limit_rate_after 500k;
  limit_rate       50k;
  }
  ngx_http_upstream_module模块
  用于定义组负载均衡组
  ####upstream name {.....}
  定义后端的服务器组;引入一个新的上下文;
  默认的调度方法是wrr;
  作用域:http
  ####server address [parameters];
  定义服务器地址和相关的参数;
  地址格式:
  IP[:PORT]
  HOSTNAME[:PORT]
  Unix:/PATH/TO/SOME_SOCK_FILE
  参数:
  Weight=number    //权重,默认为1
  max_fails=number  //失败尝试的最大次数;
  fail_timeout=time  //设置服务器为不可用状态的超时时长;
  Backup  //把服务器标记为“备用”状态;
  Down  //手动标记其为不可用,一般灰度上线时可采用该方式;
  ####least_conn;
  最少连接调度算法:
  当server拥有不同权重时为wlc;当所有后端主机的连接数相同时;则使用wrr进行调度;
  ####least_time_header | last byte;
  最短平均响应时长和最少连接;
  Header:response_header;
  Last_byte:full_response;
  仅plus有效
  ####ip_hash;
  源地址绑定;
  ####hash key [consistent];
  基于指定的key的hash表实现请求调度,此处的key可以文本、变量或者二者的组合;
  Consistent:参数,指定使用一致性hash算法;
  示例:
  Hash $request_uri consistent
  Hash $remote_addr
  Hash $cookie_name
  ####keepalive connections;
  可以使用长连接的连接数量;
  ngx_stream_core_module模块;
  Listen address:”port”   [ssl] [udp] [backlog=number] [bind] [ipv6only=on|off] [reuseport]
  默认为监听tcp协议;
  Udp:监听udp协议的端口;
  ngx_stream_proxy_module模块
  允许在tcp,udp和Unix域套接字代理的数据流;
  proxy_pass adress;
  设置代理服务器的地址。地址可以指定为域名或IP地址和端口;
  作用域:server;
  示例:
  proxy_pass localhost:12345;
  或作为UNIX域套接字路径:
  proxy_pass unix:/tmp/stream.socket;
  如果域名解析为多个地址,则所有这些地址都将以循环方式使用。此外,地址可被指定为一个 服务器组。
  地址也可以使用变量(1.11.3)指定:
  proxy_pass $ upstream
  proxy_connect_timeout time;
  定义与代理服务器建立连接的超时;
  默认超时时间是60s;
  作用域:stream,server
  proxy_timeout timeout;
  设置timeout两者之间的连续度或者写在客户端或代理服务器连接操作。如果在此时间内没有数据传输,则连接关闭;
  六、Nginx虚拟主机配置详解
  1、什么是虚拟主机?
  虚拟主机是特殊的软硬件技术,他把一台服务器主机分成一台台“虚拟主机”,每台虚拟主机都可以成为一个独立的网站,具有独立的域名,并可提供独立的Internet服务;
  利用虚拟主机的特性,Nginx完全可以使用一台服务器提供完全独立的WWW、MAIL、FTP服务或同时为多个站点进行服务。
  2、虚拟主机的类别
  u 基于IP的虚拟主机
  u 基于端口的虚拟主机
  u 基于域名的虚拟主机
  该种虚拟主机为最常用的虚拟主机形式;
  3、虚拟主机的配置
  1、基于IP的虚拟主机
  server {
  listen       80;//监听80端口
  server_name  172.16.80.72;//服务器地址为
  #charset koi8-r;
  #access_log  /var/log/nginx/log/host.access.log  main;
  location / {
  root   /nginx/ip;//该路径为本定义虚拟主机的Document的路径
  #       index.html;//默认的主页面可以不写;
  }
  error_page  404              /404.html;
  location = /404.html {//定义404错误页面
  root /nginx/ip;
  }
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
  root  /nginx/ip
  }
  2、基于端口的虚拟主机
  server {
  listen       81;//监听80端口
  server_name  172.16.80.72;//服务器地址为
  }
  3、基于域名的虚拟主机
  server {
  listen       80;//监听80端口
  server_name  www.guoruilin.com;//服务器地址为
  }


运维网声明 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.iyunv.com/thread-633720-1-1.html 上篇帖子: 初次接触Nginx-11016142 下篇帖子: 安装nginx遇到的错误
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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