nginx学习

nginx学习
反向代理,负载均衡
有一个主进程,多个工作进程
主进程用于资源分配和调度
工作进程用于处理请求

通过可执行文件启动nginx

在nginx启动后,可以通过以下命令来控制nginx:
nginx -s signal
signal的取值如下:
stop -快速关闭
quit -优雅的关闭 (会等待工作进程完成当前任务)
reload -重新加载配置文件
reopen -重新打开日志文件

nginx -s reload
会检查配置文件的语法然后才会生效,之后会开启新的工作进程并发消息关闭老的工作进程.否则,主进程会回滚所有的改变,保持原有的配置工作;老的工作进程,接收到关闭的命令后
停止接收连接并持续完成当前所拥有的请求.完成后老的工作进程就会停止.

在Unix Tool(如kill utility)的帮助下,信号也可以发送到nginx进程;在这种情况下,一个信号根据给定的进程id直接发送到一个进程。nginx主进程的进程ID是默认设置在 /usr/local/nginx/logs or /var/run
例如,如果主进程ID是1628,可以发送QUIT信号作用于nginx优雅的关闭: kill -s QUIT 1628
通过ps命令可以获取nginx正在运行的进程列表 ps -ax|grep nginx

配置文件的结构:
nignx由模块组成,这些模块被配置文件的指令控制.指令分为简单指令和块指令.简单指令是由 名字 参数; 组成,块指令和简单指令有着相同的结构,但是结尾是以{}
如果块指令内部包含了其他的指令,被称为context example:http {…}
配置文件中任何上下文之外的指令都被认为在主上下文中.event和http指令在主上下文中,server在http,location在server中
#之后的部分是注释

提供静态内容
一个重要的web服务任务是提供外部文件(例如图片或静态html).你将实现一个案例其中,根据请求,文件将会被提供从不同的本地目录: /data/www(可能包含html)和data/image(包含图片).
这将需要编辑配置文件,在包含两个location块的http块中设置一个server块

首先,创建/data/www用于存放html文件,/data/images用于存放图片,然后代开配置文件.默认的文件包含了几个server块的例子,大部分被注释掉了.注释掉所有的server块然后创建一个新的
通常,配置文件中包含几个server块,这些server块监听不同的server name和port。一旦nginx决定了哪个服务器处理一个请求,他会根据定义在server块里的location指令参数来测试
请求头里的uri
	如果有几个匹配的location块,nginx会选择最长前缀进行匹配

 /usr/local/nginx/logs or /var/log/nginx中可以查看access.log和error.log防止一些配置没有生效或出现了问题

设置简单代理服务器
nginx的一个常见用法就说设置为代理服务器,意味着服务接收请求,传递它们到被代理的服务器,并检索响应然后返回给客户端
我们将配置一个基础代理服务,使用本地目录文件里处理请求图片并将所有其他请求发送到代理服务器.如此,服务将被定于为一个单一的nginx实例

首先,通过在nginx的配置文件里增加server块去定义代理服务

连接处理方法:
select
poll
kqueue
epoll
/dev/poll
eventport

设置hash
nginx用哈希表去快速处理静态资源数据如服务名,map指令值,mime类型和请求头。
在开始和每次重配置时,nginx选择尽可能小的hash表大小如桶大小去存储相同hash值的key但不超过配置的参数(哈希桶的大小)
hashTable的大小用桶来表示,调整持续到表大小超过了hash的最大参数.
大部分hash有相应的指令可以改变这些参数,例如,对于server name hash有server_names_hash_max_size and server_names_hash_bucket_size

哈希桶的大小是处理器缓存栈的倍数。通过减少内存访问的次数来增加现代处理器哈希中key的搜索

debug-log
启用debug日志,nginx需要在构建的时候做一些配置去支持debug: ./config --with-debug…
然后debug级别应该蛇者在error_log里:error_log /path/to/log debug:
验证nginx是否被配置了debug的支持,通过nginx -v 命令: configure arguments: --with-debug…
预构建的Linux包使用nginx-debug二进制文件(1.9.8)为调试日志提供了开箱即用的支持,它可以使用命令运行:
service nginx stop
service nginx-debug start
然后可以设置debug级别。windows的nginx二进制版本总是构建了debug支持,因此只需要设置二进制级别就足够了
注意重新定义的日志没有指定debug级别将禁用调试日志。

日志记录syslog
error_log和access_log支持记录到syslog.配置参数如下: server=address
定义syslog的地址。address可以是一个域名或ip地址,可选的端口默认是udp端口514,如果一个域名被解析为几个ip地址,被解析的第一个地址将会使用。

facility=string 设置syslog消息功能,定义在RFC3164里面。Facility can be one of “kern”, “user”, “mail”, “daemon”, “auth”, “intern”, “lpr”, “news”, “uucp”, “clock”, “authpriv”, “ftp”, “ntp”, “audit”, “alert”, “cron”, “local0”..“local7”. Default is “local7”

nginx支持的命令行参数
-?|-h 打印命令函参数的帮助信息
-c file 使用一个选择的配置文件去替代默认的配置文件
-e file 选择一个文件去存储日志替代默认的文件.指定的stderr 选择标准的error文件.
-g directives 设置 global_configuration_directives 例如: nginx -g "pid /var/run/nginx.pid; wordker_processes sysctl -n hw.ncpu
-p prefix 设置nginx路径前缀,i.e.目录将保存server文件(默认值是/user/local/nginx)
-q 在配置测试期间抑制非错误信息
-s signal 发送一个信号到主进程,signal参数可以是 stop、quit、reload、reopen
-t 测试配置文件:nginx检查配置文件语法是否正确,尝试打开配置文件中的引用
-T 和t相同,但还可以把配置文件放到标准输出
-v 答应nginx版本
-V 打印nginx版本,编译版本和配置参数

Windows下的nginx
Windows的nginx版本使用win32本地api,只有select和poll连接处理方法是被使用的,因此,不应该期待高性能和可伸缩性.

负载均衡
nginx负载均衡的方法 (可以加权重,通过weight来实现)
1.循环
2.最少连接 请求被分配给拥有最少活跃连接数的server
3.ip-hash 用一个hash函数去决定server去接收请求(基于客户端的ip地址) (有点像分区管理?每个地区有一个server去处理请求)

默认负载均衡的配置
	没有指定负载均衡的方法,默认使用循环方法

服务器的健康检查
max_fails、fail_timeout

配置https服务
配置https,在server块的listen后面添加ssl参数并指定server_certificate和private_key文件
公钥和私钥必须是nginx的主进程可读的,并且可以存储在一个文件中,但必须作出限制,使得只有公钥发送给客户端
ssl_protocols和ssl_ciphers被用来限制连接仅包括ssl/tls的强版本和密码,nginx默认使用“ssl_protocols TLSv1 TLSv1.1 TLSv1.2” and “ssl_ciphers HIGH:!aNULL:!MD5”,所以通常不需要显示配置

https服务优化
ssl操作会消耗额外的cpu资源.在多核系统中,跑的工作进程数量应不少于cpu核数.最消耗cpu的操作是ssl握手.有2个方法去减少每个客户端这些操作的数量:
1.通过使用keep-alive在一个连接里面发送多个请求
2.重用ssl会话参数去避免ssl握手
session存储在worker共享的ssl session cache中,并可由ssl_session_cache指令配置.一兆字节的缓存包含了4000session,默认的缓存超时时间是5分钟.可以通过ssl_session_timeout设置

SSL证书链
一些浏览器可能抱怨由权威证书机构发布证书,一些浏览器可以接收.出现这种情况是因为权威机构颁发证书使用一个中间的证书,这个中间证书不存在于广为人知的证书权威机构被发送到部分特定的浏览器中
这种情况下,权威方提供了证书链去连接证书的签署。server的证书必须出现在组合文件证书链前.

如果server证书和bundle连接在有问题的序列中,nginx将无法启动并显示错误信息
因为nginx尝试用bundle的第一个证书的私钥替换server的证书

浏览器通常存储它们接收到的权威机构签署的证书,所以常用的浏览器可能早有需要的证书并不会抱怨在没有bundle链的情况下发送的证书
通过openssl可以确保server发送了完整的证书链

nging如何处理一个tcp/udp session
一个tcp/udp会话来自一个客户端被处理成几个连续的阶段:
Post-accept
接受了客户端连接后第一个阶段.调用ngx_stream_realip_module模块
Pre-access
初步检查.调用模块ngx_stream_limit_conn_module 和 ngx_stream_set_module
Access
真实数据处理前客户端的访问限制,会调用模块ngx_stream_access_module ,用js_access 指令去解析njs
SSL
TLS/SSL终止,调用ngx_stream_realip_module模块
Preread
数据初始化到 preread_buffer 允许ngx_stream_ssl_preread_module模块在处理前分析.调用js_preread 指令去解析njs
Content
数据真正处理的阶段,通常使用Module ngx_stream_upstream_module模块,或一个指定值返回客户端.调用js_filter 指令
Log
最后的阶段,记录客户端session进程的结果.调用ngx_stream_log_module模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值