###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服务器的变量和他的值