Nginx学习(一)

  • 来源:
  • 更新日期:2018-05-03

摘要:###Nginx学习 Mac下启动nginx: sudo nginx 重启Nginx:sudo nginx -s reload 查看php进程数:ps aux|grep -c php-fpm nginx模块分为:Global,events,http,server,location #####全局配置

###Nginx学习

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

002UASMrzy7605pjKJv15&690.jpg

#####全局配置

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

#####使用include文件

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模块

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