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
HTTP
的Server
部分指令 | 说明 |
---|---|
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 头 |
指令 | 说明 |
---|---|
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进程的贪婪 |
指定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 |
指定存储保留变量最大散列值大小 |
设置如何创建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
指令逻辑分隔资源。一个虚拟服务器由listen
和server_name
指令组合定义。
Listen
指令
指令 | 说明 |
---|---|
default_server | 定义addres:port 组合 |
setfib |
为套接字监听设置FIB ,仅支持FreeBSD ,不支持UNIX 域套接字 |
backlog | 在listen()中设置,FreeBSD 默认值-1,其它系统511 |
rcvbuf |
设置SO_RCVBUF 参数 |
sndbuf |
设置SO_SNDBUF 参数 |
accept_filter | 设置接收的过滤器:dataready 或httpready , dataready |
deferred | 延迟accept() 调用,仅支持Linux |
bind | 为address:port 套接字打开一个单独的bind 调用 |
ipv6only |
|
ssl |
只接收HTTPS 连接 |
so_keep-alive |
用字虚拟服务器内部,设置重定向。