ngx_http_uwsgi_module模块允许将请求传递给uwsgi服务器。
示例配置
location / { include uwsgi_params; uwsgi_pass localhost:9000; }
uwsgi_bind
语法:uwsgi_bind address [transparent] | off
默认:—
上下文:http, server, location
从指定本地IP地址向uwsgi建立外部连接。参数值可以包含变量(1.3.12+)。特殊值off(1.3.12+)取消继承自上级配置中uwsgi_bind指令的影响,允许系统自动指派本地IP地址。
transparent参数(1.11.0+)允许从非本地IP地址向uwsgi服务器建立外部连接,例如,从一个客户端的真实IP:
uwsgi_bind $remote_addr transparent;
为了使这个参数生效,需要以超级用户运行nginx工作进程,并配置内核路由表以接货来自uwsgi服务器的网络流量。
uwsgi_buffer_size
语法:uwsgi_buffer_size size
默认:uwsgi_buffer_size 4k|8k
上下文:http, server, location
设置用于读取从uwsgi服务器收到的响应第一部分的缓冲区大小。这一部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一页内存。这个值是4k或8k,取决于平台。但是可以设置的更小。
uwsgi_buffering
语法:uwsgi_buffering on | off
默认:uwsgi_buffering on
上下文:http, server, location
启用或禁用从uwsgi服务器收到响应的缓冲区。
当缓冲区启用时,nginx从uwsgi服务器收到响应后,尽快的将其保存到uwsgi_buffer_size和uwsgi_buffers指令设置的缓冲区中。如果整个响应不能放入内存,一部分可以保存到磁盘上的临时文件中。写入到临时文件由uwsgi_max_temp_file_size和uwsgi_temp_file_write_size指令控制。
当缓冲区禁用时,响应会在收到后同步的传递给客户端。nginx不会尝试从uwsgi服务器读取全部响应。每次nginx可以从服务器获取的数据大小由uwsgi_buffer_size指令设置。
缓冲区也可以通过响应头域中的“X-Accel-Buffering”的“yes”值或“no”值启用或禁用。这个功能可以使用uwsgi_ignore_headers指令禁用。
uwsgi_buffers
语法:uwsgi_buffers number size
默认:uwsgi_buffers 8 4k|8k
上下文:http, server, location
设置用于从uwsgi服务器读取响应的缓冲区数量和大小。默认情况下,缓冲区大小等于一页内存。这个值是4k或8k,取决于平台。
uwsgi_busy_buffers_size
语法:uwsgi_busy_buffers_size size
默认:uwsgi_busy_buffers_size 8k|16k
上下文:http, server, location
当从uwsgi服务器读取响应的缓存开启,限制当响应没有完全读取时,可以发送给客户端的缓冲区总大小。与此同时,缓冲区的其余部分可以用于读取响应,如果需要,缓冲部分响应到临时文件。默认情况下,大小由uwsgi_buffer_size和uwsgi_buffers指令设置的两个缓冲区大小限制。
uwsgi_cache
语法:uwsgi_cache zone | off
默认:uwsgi_cache off
上下文:http, server, location
定义一个用于缓存的共享内存区域。相同的区域可以用在多个位置。参数值可以包含变量(1.7.9+)。参数off禁用继承自上级配置的缓存。
uwsgi_cache_bypass
语法:uwsgi_cache_bypass string …
默认:—
上下文:http, server, location
定义哪些情况下响应不会从缓存中取。如果string参数至少有一个是非“0”的非空字符串,响应不会从缓存中取:
uwsgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment; uwsgi_cache_bypass $http_pragma $http_authorization;
可以与uwsgi_no_cache指令一同使用。
uwsgi_cache_key
语法:uwsgi_cache_key string
默认:—
上下文:http, server, location
定义一个缓存的关键字,例如:
uwsgi_cache_key localhost:9000$request_uri;
uwsgi_cache_lock
语法:uwsgi_cache_lock on | off
默认:uwsgi_cache_lock off
上下文:http, server, location
版本:1.1.12+
当启用时,同一时间只有一个请求可以占用一个新的缓存元素。其他的使用相同缓存元素的请求会等待响应出现在缓存中或等到由uwsgi_cache_lock_timeout指令定义的时间达到后释放这个元素的锁定。
uwsgi_cache_lock_age
语法:uwsgi_cache_lock_age time
默认:uwsgi_cache_lock_age 5s
上下文:http, server, location
版本:1.7.8+
如果最后一个传递给uwsgi服务器的请求占用一个新的缓存元素,并在指定的时间内没有完成,一个或更多的请求可以传递给uwsgi服务器。
uwsgi_cache_lock_timeout
语法:uwsgi_cache_lock_timeout time
默认:uwsgi_cache_lock_timeout 5s
上下文:http, server, location
版本:1.1.12+
为uwsgi_cache_lock设置超时时间。当这个时间过期,请求可以发送到uwsgi服务器,但是响应不会被缓存。
在1.7.8版本之前,响应会被缓存。
uwsgi_cache_methods
语法:uwsgi_cache_methods GET | HEAD | POST …
默认:uwsgi_cache_methods GET HEAD
上下文:http, server, location
如果客户端请求方式列于这个指令中,响应会被缓存。“GET”和“HEAD”方法总会被添加到列表中,推荐显式的定义他们。参见uwsgi_no_cache指令。
uwsgi_cache_min_uses
语法:uwsgi_cache_min_uses number
默认:uwsgi_cache_min_uses 1
上下文:http, server, location
设置请求的数量,超过这个数量后响应会被缓存。
uwsgi_cache_path
语法:uwsgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time]
默认:—
上下文:http
设置缓存的路径和其他参数。缓存数据保存在文件中。缓存中的文件名是缓存关键字MD5的结果。levels参数定义了缓存的层级。例如下面的配置
uwsgi_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
缓存中的文件名类似:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
缓存的响应首先写入到临时文件,然后进行重命名。从0.8.9版本开始,临时文件和缓存可以放在不同的文件系统上。但是,需要明白的是,这种情况下文件会在两个文件系统中复制,而不是代价更小的重命名操作。因此建议同时给出缓存和放置临时文件的临时目录并放置于同一个文件系统上。临时目录基于use_temp_path参数设置(1.7.10+)。如果这个参数忽略或设置为on,将会使用uwsgi_temp_path指令设置的位置。如果值设置为off,临时文件将直接放到缓存目录中。
另外,所有活动的关键字和数据信息保存在共享内存区域中,名字和大小由keys_zone参数配置。1M的区域可以存储大约8000个关键字。
缓存数据在inactive参数指定的时间期间内没有被访问,会从缓存中移除不管它们的新鲜度。默认情况下inactive设置为10分钟。
特殊的“cache manager”进程监视max_size参数设置的最大缓存大小。当大小超过限制,会移除最近最少使用的数据。
在启动后一分钟,“cache loader”进程激活。它加载之前保存在磁盘上的缓存数据信息到缓存区域。加载过程是迭代的。每次迭代过程中不超过loader_files个项目会被载入(默认是100)。一次迭代的时长由loader_threshold参数限制(默认是200毫秒)。在迭代之间,会有由loader_sleep参数设置的暂停(默认是50毫秒)。
下面的参数在商业版可用(商业版本不进行翻译):
purger=on|off
Instructs whether cache entries that match a wildcard key will be removed from the disk by the cache purger (1.7.12). Setting the parameter to on (default is off) will activate the “cache purger” process that permanently iterates through all cache entries and deletes the entries that match the wildcard key.
purger_files=number
Sets the number of items that will be scanned during one iteration (1.7.12). By default, purger_files is set to 10.
purger_threshold=number
Sets the duration of one iteration (1.7.12). By default, purger_threshold is set to 50 milliseconds.
purger_sleep=number
Sets a pause between iterations (1.7.12). By default, purger_sleep is set to 50 milliseconds.
uwsgi_cache_purge
语法:uwsgi_cache_purge string …
默认:—
上下文:http, server, location
版本:1.5.7+
定义在哪些条件下请求会被视为清除缓存请求。如果string参数只要有一个为非“0”的非空值,则相应的缓存关键字会被删除。成功的操作会返回204响应码。
如果清除缓存的关键字请求以星号(“*”)结尾,所有的缓存匹配关键字的都会移除。但是会在磁盘中保留直到被inactivity删除或cache purger(1.7.12+)处理或客户端尝试访问它们。
示例配置:
uwsgi_cache_path /data/nginx/cache keys_zone=cache_zone:10m; map $request_method $purge_method { PURGE 1; default 0; } server { ... location / { uwsgi_pass backend; uwsgi_cache cache_zone; uwsgi_cache_key $uri; uwsgi_cache_purge $purge_method; } }
该功能在商业版本中可用。
uwsgi_cache_revalidate
语法:uwsgi_cache_revalidate on | off
默认:uwsgi_cache_revalidate off
上下文:http, server, location
版本:1.5.7+
启用对过期的缓存通过“If-Modified-Since”和“If-None-Match”条件请求头域进行重验证。
uwsgi_cache_use_stale
语法:uwsgi_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_503 | http_403 | http_404 | off …
默认:uwsgi_cache_use_stale off
上下文:http, server, location
定义在与uwsgi服务器通信发生错误时,哪些情况下陈旧的缓存响应会被使用。这个指令的参数与uwsgi_next_upstream指令匹配。
error参数在不能选择一个uwsgi服务器处理请求时也允许使用陈旧的缓存响应。
updating参数在当前缓存更新时允许使用陈旧的缓存响应。这让当更新缓存数据时,减少访问uwsgi服务器。
为了在占用一个新缓存元素时减少访问uwsgi服务器的次数,可以是用uwsgi_cache_lock指令。
uwsgi_cache_valid
语法:uwsgi_cache_valid [code …] time
默认:—
上下文:http, server, location
为不同的响应码设置缓存时间。例如,下面的指令
uwsgi_cache_valid 200 302 10m; uwsgi_cache_valid 404 1m;
为200和302响应码设置10分钟的缓存,为404返回码设置了1分钟的缓存。
如果只有缓存时间指定了
uwsgi_cache_valid 5m;
只有200、301和302的响应会被缓存。
any参数可以指定缓存所有响应:
uwsgi_cache_valid 200 302 10m; uwsgi_cache_valid 301 1h; uwsgi_cache_valid any 1m;
缓存的参数也可以直接在响应头中设置。这个的优先级要比指令设置的缓存时间更高。
- “X-Accel-Expires”头域设置了缓存响应的秒数。零值禁用缓存响应。如果值以“@”前缀开头,则设置了一个从纪元开始的秒数的绝对时间,一直会缓存到这个时间。
- 如果头中不包含“X-Accel-Expires”字段,缓存参数可能设置在“Expires”或“Cache-Control”字段中。
- 如果头中包含“Set-Cookie”字段,响应不会被缓存。
- 如果头中包含“Vary”字段值是 “*”,响应不会被缓存(1.7.7+)。如果头中包含“Vary”字段,值是其他值,是否缓存响应会考虑相应的请求头域(1.7.7+)。
处理一个或更多响应头域的功能可以通过uwsgi_ignore_headers指令禁用。
uwsgi_connect_timeout
语法:uwsgi_connect_timeout time
默认:uwsgi_connect_timeout 60s
上下文:http, server, location
为与uwsgi服务器建立连接定义一个超时时间。注意这个超时时间通常不超过75秒。
uwsgi_force_ranges
语法:uwsgi_force_ranges on | off
默认:uwsgi_force_ranges off
上下文:http, server, location
版本:1.7.7+
为缓存和不缓存的响应启用byte-range支持,不管响应的“Accept-Ranges”头域。
uwsgi_hide_header
语法:uwsgi_hide_header field
默认:—
上下文:http, server, location
默认情况下,nginx不会传递来自于uwsgi服务器的“Status”和“X-Accel-…”响应头域到客户端。uwsgi_hide_header指令设置了其他不会传递的字段。如果相反,需要允许传递字段,可以使用uwsgi_pass_header指令。