鼎鼎知识库
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

02初识Nginx.md 11KB

Nginx使用场景

  • 静态资源服务:通过本地文件系统提供服务
  • 反向代理服务:缓存、负载均衡
  • API服务:OpenResty高性能Web平台,集成大量Lua库、第三方模块及依赖项

Why

Apache一个连接一个进程。互联网和物联网的普及。

优点

  • 高并发下的高性能
  • 可扩展
  • 可靠
  • 热部署
  • BSD许可

BSD协议

--在源代码和二进制类库中包含原来代码中的BSD协议
--不可以以源代码的作者/机构的名字做市场推广

MIT协议

--作者只想保留版权
--在源代码和二进制类库中包含原来代码中的MIT协议

几个协议的关系

修改源码后是否可以闭源?
	可以
		每个修改文件是否必须放置版权说明?
			需要放置版权说明
				Apache
			不需要放置版权说明
				衍生软件的广告是否可以用你的名字促销?
					可以用你的名字
						MIT
					不可以用你的名字
						BSD
	不可以
		新增代码是否采用同样的许可证?
			采用同样的许可证
				GPL
			可以不采用同样的许可证
				是否需要对源码修改后提供说明文档?
					需要
						Mozilla
					不需要
						LGPL

NginX的组成

  • 二进制可执行文件
  • 控制行为用Nginx.conf
  • 记录每一条http请求用acess.log
  • 记录错误日志用error.log

Nginx开源免费和商业

  • 开源: nginx.org
  • 商业:nginx.com

Tengine是淘宝网发起的Web服务器项目。

OpenResty开源免费和商业

  • 开源:openrety.org
  • 商业:openresty.com

配置语法

全局配置

字段 说明
user worker进程的用户和组。如果忽略group,那么group的名字等于用户名
worker_processes worker进程的启动数量。通常是处理器数量的1.5-2倍
error_log 所有错误的写入文件
pid 记录主进程ID的文件
use 设置使用什么样的连接方式
worker_connections 一个工作进程处理理并发数的最大值

nginx.conf

user www;
worker_processes 12;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

//一个{}就是一个上下文,events就是一个模块
events {
	use /dev/poll;
	worker_connections 2048;
}

使用include文件

为了方便维护,可以把配置文件放在nginx.conf以外的配置文件中。

--进入conf目录: cd /usr/local/nginx/conf
--创建目录:mkdir vhost
--创建文件:nano test1.com.conf

server {
	listen 8000;
	server_name test1.com
	location / {
		proxy_set_header Host #host:$server_port;
		proxy_set_header X-Real-Ip $remote_addr;
		proxy_set_hreader X-Forwarded-For $proxy_add_x_forwareded_for;
		# proxy_pass http://xxx.xxx.xxx;
		echo "test1.com";
	}
}

--创建文件:nano test2.com.conf

server {
	listen 8000;
	server_name test2.com;
	location / {
		proxy_set_header Host $host:$server_port;
		proxy_set_header X-Real-Ip $remote_addr;
		proxy_set_headeer X-Forwarded-For $proxy_add_x_forwarded_for;
		# proxy_apss http://xxx.xxx.xxx;
		echo "test2.com";
	}
}

--在nginx.conf文件中引入
include vhost/*.conf;
--编辑/etc/hosts文件:nano /etc/hosts

127.0.0.1 test1.com
127.0.0.1 test2.com
--测试:curl http://test1.com:8000
--测试:curl http://test2.com:8000

HTTPServer部分

客户端指令

指令 说明
chunked_transfer_encoding 发送给客户端的响应中,允许禁用http/1.1
client_body_buffer_size 允许客户端请求体的缓存大小,默认为两个内存页面
client_body_in_file_only 设置成on将客户端请求体强制写入磁盘文件
client_body_in_single_buffer 将客户端请求体保存在单个缓存中
client_body_temp_path 保存客户端请求体的路径
client_body_timeout 指定读取两个客户端请求体之间的时间间隔
client_header_buffer_size 指定客户端请求头的缓存大小
client_header_timeout 指定客户端请求头的超时时间
client_max_body_size 执行客户端请求体的大小,超过大小报413错误
keepalive_disable 对某些客户端禁用keepalive功能
keepalive-request 关闭keepalive功能之前可以接收多少请求
keepalive-timeout keepalive连接持续多久
large_client_header_buffers 客户端最大缓存大小
msie_padding 为了填充响应大小到512字节,对于MSIE客户端,大于400的状态码会被添加注释以便满足512字节,通过启用命令可以禁用
msie_refreshes 对于MSIE客户端,启用发送refresh头而不是redirect

文件I/O指令

指令 说明
aio 启用异步文件I/O
direction 启用操作系统特定的表之,在Linux下启用aio需要使用
direction_alignment 设置direction的算法,通常512足够
open_file_cache 配置一个缓存,用来存储文件描述符、目录查询和文件查询错误
open_file_cahce_errors 按照open_file_cache启用文件查询错误缓存
open_file_cache_min_uses open_file_cache缓存的文件描述符保留在缓存中,使用本指令配置最少使用文件描述符的次数
open_file_cache_valid 设置open_file_cache缓存有效检查的时间间隔
postpone_output 指定发送给客户端最小的数值
read_ahead 预读文件到设定的参数大小,Linux会忽略
sendfile 复制数据从一个到另一个文件描述
sendfile_max_chunk 设置sendfile(2)最大数据大小,以阻止worker进程的贪婪

Hash指令

指定Nginx分配给某些变量多大的静态内存。

指令 说明
server_names_hash_bucket_size 指定用户保存server_name散列表的大小的桶
server_names_hash_max_size 指定server_name散列表的最大值
types_hash_bucket_size 指定用于存储散列表的桶的大小
types_has_max_size 指定散列表类型表的最大大小
variables_hash_bucket_size 指定用于存储保留变量桶的大小
varialbes_hash_max_size 指定存储保留变量最大散列值大小

Socket指令

设置如何创建TCP套接字。

指令 说明
lingering_close 如何保持客户端连接
lingering_time 指定客户端连接为了处理更多数据需要保持打开连接的时间
lingering_timeout 结合lingering_close,在关闭客户端连接之前的超时时间
reset_timedout_comnnection 超时的连接将会被立即关闭,释放相关内存。
send_lowat 如果非零,在客户端套接字尝试减少发送操作
send_timeout 在两个成功客户端接收响应的写操作之间设置一个超时时间
tcp_nodelay 启用禁用TCP_NODELAY用于配合keep-alive
tcp_nopush 仅依赖于sendfile的使用。在一个数据包中尝试发送响应头以及在数据包中发送一个完整的文件

示例

http {
	include /opt/local/etc/nginx/mime.types;
	default_type application/octer-stream;
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	server_names_has_max_size 1024;
}

虚拟服务器

server开头的部分称为虚拟服务器,会根据不同的server_name指令逻辑分隔资源。一个虚拟服务器由listenserver_name指令组合定义。

Listen指令

指令 说明
default_server 定义addres:port组合
setfib 为套接字监听设置FIB,仅支持FreeBSD,不支持UNIX域套接字
backlog 在listen()中设置,FreeBSD默认值-1,其它系统511
rcvbuf 设置SO_RCVBUF参数
sndbuf 设置SO_SNDBUF参数
accept_filter 设置接收的过滤器:datareadyhttpready, dataready
deferred 延迟accept()调用,仅支持Linux
bind address:port套接字打开一个单独的bind调用
ipv6only
ssl 只接收HTTPS连接
so_keep-alive

location指令

用字虚拟服务器内部,设置重定向。