Nginx学习(一)

###Nginx学习php

  • Mac下启动nginx: sudo nginx
  • 重启Nginx:sudo nginx -s reload
  • 查看php进程数:ps aux|grep -c php-fpm
  • nginx模块分为:Global,events,http,server,location

#####全局配置node

  • worker_process:指定worker进程的启动数量,设置该参数为CPU绑定的负载处理器的核心的数量相同
  • error_log :错误写入文件
  • worker_connections:配置一个工做进程可以接受的并发链接最大数

#####使用include文件nginx

  • include文件能够在任何地方,以便加强配置文件的可读性

######Http的server部分 用于处理http链接正则表达式

客户端指令:算法

  • client_max_body_size:定义容许最大的客户端请求头若是大于这个值,那么客户将会是413(Request Entity Too Large)错误
  • keepalive_timeout:指定keep-alive链接持续多久

Socket:缓存

  • tcp_nodelay:启用或者禁用TCP_NODELAY选项用于keep-alive链接
  • tcp_nopush:仅依赖sendfile使用,它可以使得nginx在一个数据包中尝试发送响应头

######虚拟server部分服务器

  • 任何由关键字server开始的部分都被称做虚拟服务器

######Locations网络

  • location指令能够用在虚拟服务器server部分,而且提供来自客户端的URI或者内部重定向访问。命名location仅对内部访问重定向
  • location修饰符:~区分大小写的正则表达式,~*不区分大小写的正则表达式匹配^~:若是该location是最佳的匹配,那么对于这个location的字符串再也不进行正则表达式检测.
  • try_files:用在server部分,try_files指令将会按照给定的参数列出的顺序进行尝试,一个被匹配将会被使用
  • mail的server部分:Nginx可以代理IMAP,POP3,SMTP协议

####反向代理并发

  • Nginx 可以做为一个反向代理来终结来自于客户端的请求,而且上游服务器打开一个新的请求.在这个处理的过程当中,为了更好的相应客户端的请求,该请求能够根据它的uri,客户机参数或者一些其余的逻辑进行拆分
  • 最重要的部分是proxy_pass指令:指定请求被传递到的上游服务器,格式为URL
  • 可使用配置文件讲指令列在一块儿并保存到一个文件中,而后再包含在配置文件,与proxy_pass指令相同的location中 例:include proxy.conf 而且若是配置指令中存在不一样于location的值,那么能够经过在location部分明确设置覆盖掉原有的值

#####upstream模块app

  • 与proxy模块紧密搭配的是upstream模块,upstram指令会启用一个新的配置区段(这些服务器可能被设置了不一样的权重,权重越高的服务器,会被nginx传递越多的链接)
  • ip_hash:经过IP地址的哈希值确保客户端均匀地链接全部的服务器
  • keepalive:每个worker进程缓存到上游服务器的链接数.在使用http链接时proxy_http_version 应设置为1.1
  • least_conn:激活负载均衡算法,将请求发送到链接数最少的那台服务器

负载均衡算法:

  • upstream模块可以使用3种负载均衡round-robin,IP哈希(IPhash)和最少链接数,默认使用轮询(round-robin)算法

多个upstream服务器:

upstream app{
	server 127.0.0.1:9001;
	server 127.0.0.1:9003;
	server 127.0.0.1:9004;
}
server{
location /{
	proxy_pass http://app;
}
}

Nginx将会经过轮询的方式讲连续的请求传递给3个上游服务器。

tips:

若是一个客户端但愿老是到达同一个服务器,改善会话黏贴性,应该使用ip_hash指令,当发出的请求致使每个请求的响应的时间长短不一,那么应该选择least_conn算法

#####孤立应用程序的扩展

  • 扩展应用程序有两个方向:向上和向外扩展,向上扩展是指添加更多的资源到一台机器不断增加的可用资源池。向外扩展意味着向有效的响应池中增长更多的机器
upstream app{
//能够给服务器设置权重,权重越高会被nginx传递更多的链接
server 100.00.2.21 weight 10
server 100.00.2.22 weight 2
server 100.00.2.23 weight 3
//设置服务器为宕机状态
server 100.00.2.24 down
}
//上游服务器应该被迅速处理,将超时指令设置的低一些
//尽管如此仍然须要当心上游服务器在给定的时间内没有响应
//Nginx 可能会投递504网关超时(504Gateway Timeout error)
location / {
proxy_connection_timeout 5;
proxy_read_timeout 10;
proxy_send_timeout 10;
}

#####反向代理的性能调优 缓冲:

  • proxy_buffer_size:设置缓冲大小
  • proxy_buffering :启用代理缓冲
  • proxy_buffers:用于响应上游服务器的缓冲数量和大小
  • proxy_busy_buffers:在从上游服务器读取响应时分配给发送响应的缓冲空间大小,典型的设置是将proxy_buffers的两倍

缓存:

  • proxy_cache :定义用于缓存的共享内存区域

压缩:

优化带宽能够帮助减小响应的传输时间,gzip模块默认启用,常常被用于压缩反向代理的内容

  • gzip:对响应启用或者是禁用压缩
  • gzipbuffers:指定用于压缩响应所使用的缓冲和大小
  • gzip_comp_level :指定gzip压缩的级别

######Nginx Http服务器

  • Nginx包含一个单一的master进程和多个worker进程。全部的这些进程都是单线程,而且设计为处理同时处理成千上万个链接,worker进程是处理链接的地方,由于这个组件就是用于处理客户端请求的。Nginx使用了操做系统事件机制来快速响应这些请求.
  • Nginx的master进程负责读取配置文件,处理套接字,派生worker进程,打开日志文件和编译嵌入式的perl脚本。master进程是一个能够经过处理信号量来管理请求的进程
  • Nginx的worker进程处理请求,过滤,处理代理的链接和更多的操做都在worker进程,须要配置的worker进程要多于cpu内核数,以便于处理负载

Http是nginx的核心模块

  • port_in_redirect:肯定nginx是否对端口重定向
  • server:建立一个新的配置区段定义一个虚拟主机,Listen指令指定IP地址和端口号,server_name指令列举用于匹配的Host的值
  • server_name:配置用于响应请求的虚拟主机名称

日志:

配置文件的每个级别均可以有访问日志

  • access_log:描述如何写入日志
  • log_format:指定出如今日志文件的字段和采用什么样的格式
  • log_not_found:禁止错误日志中报告404错误

当指定了gzip后log_format便不可使用

客户端交互:

Nginx与客户端交互的方式有不少种,这些方式能够从链接自己(IP地址,超时,存活时间等)

  • error_page:定义一个用于访问的uri,在遇到设置的错误代码时将会由该URI提供访问
  • default_type:设置响应的默认类型,若是文件MIME类型不能被types匹配,那么将会使用该指令指定的类型

使用limit指令防止滥用:

滥用值得是同一个IP每秒到服务器的一个链接数,可能采用DDOS拒绝服务的形式

  • limit_conn:指定每一个键值对的最大链接数
  • limit_rate:限制客户端下载内容的速率
  • limit_conn_log_level:在Nginx限制链接的时候,达到链接限制,此时会产生错误日志,该指令用于设置日志的错误级别

约束访问:

在这里访问限制能够采起两种形式,对一组特定的IP地址限制,或者对一组特定用户限制

  • allow:容许这个IP,网络,或者所有访问
  • deny:禁止IP,网络或者all来的访问

流媒体文件:

  • Nginx提供必定的视频媒体类型解析flv和mp4模块
  • flv:支持flv模块
  • mp4:mp4模块
  • mp4_buffer_size:设置投递mp4的初使缓冲的大小
  • mp4_max_buffer_size:设置处理MP4元数据使用的最大缓冲

#####使用Nginx和PHP-FPM

  • php-fpm 使得php内核接受链接,php-fpm是将php运行在fastCGI服务器下的一种方法,PHP-FPM的master进程派生worker进程,适应站点使用,在必要的时候从新启动子进程
  • fastcgi_pass:指定fastCGI服务器如何传递请求
  • fastcgi_param:设置传递fastCGI服务器的变量和他的值
相关文章
相关标签/搜索