在《memc_nginx+srcache_nginx+memcached构建透明的动态页面缓存》一文中,我们使用到memcached来作为缓存载体。想必大家都知道memcached有存储大小的限制,不得超过1M。 本文将使用redis来作为缓存载体。nginx的srcache_nginx模块指令参数解释参见《memc_nginx+srcache_nginx+memcached构建透明的动态页面缓存》。
1. nginx模块
--add-module=../modules/ngx_devel_kit-0.2.18 --add-module=../modules/set-misc-nginx-module-0.22rc8 --add-module=../modules/srcache-nginx-module-0.22 --add-module=../modules/redis-nginx-module-0.3.6 --add-module=../modules/redis2-nginx-module-0.10
1
2
3
4
5
|
--
add
-
module
=
.
.
/
modules
/
ngx_devel_kit
-
0.2.18
--
add
-
module
=
.
.
/
modules
/
set
-
misc
-
nginx
-
module
-
0.22rc8
--
add
-
module
=
.
.
/
modules
/
srcache
-
nginx
-
module
-
0.22
--
add
-
module
=
.
.
/
modules
/
redis
-
nginx
-
module
-
0.3.6
--
add
-
module
=
.
.
/
modules
/
redis2
-
nginx
-
module
-
0.10
|
nginx模块安装参见ttlsa.com中相关文档。
2. redis安装配置
安装步骤参见:http://www.ttlsa.com/html/1646.html
配置参数解释参见:http://www.ttlsa.com/html/1226.html
配置实例:
# vim redis.conf
daemonize yes pidfile /var/run/redis-6379.pid port 6379 bind 127.0.0.1 timeout 0 tcp-keepalive 0 loglevel notice logfile stdout databases 16 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb slave-serve-stale-data yes slave-read-only yes repl-disable-tcp-nodelay no slave-priority 100 maxmemory 8096mb maxmemory-policy volatile-ttl appendonly no appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
daemonize
yes
pidfile
/
var
/
run
/
redis
-
6379.pid
port
6379
bind
127.0.0.1
timeout
0
tcp
-
keepalive
0
loglevel
notice
logfile
stdout
databases
16
stop
-
writes
-
on
-
bgsave
-
error
yes
rdbcompression
yes
rdbchecksum
yes
dbfilename
dump
.
rdb
slave
-
serve
-
stale
-
data
yes
slave
-
read
-
only
yes
repl
-
disable
-
tcp
-
nodelay
no
slave
-
priority
100
maxmemory
8096mb
maxmemory
-
policy
volatile
-
ttl
appendonly
no
appendfsync
everysec
no
-
appendfsync
-
on
-
rewrite
no
auto
-
aof
-
rewrite
-
percentage
100
auto
-
aof
-
rewrite
-
min
-
size
64mb
lua
-
time
-
limit
5000
slowlog
-
log
-
slower
-
than
10000
slowlog
-
max
-
len
128
hash
-
max
-
ziplist
-
entries
512
hash
-
max
-
ziplist
-
value
64
list
-
max
-
ziplist
-
entries
512
list
-
max
-
ziplist
-
value
64
set
-
max
-
intset
-
entries
512
zset
-
max
-
ziplist
-
entries
128
zset
-
max
-
ziplist
-
value
64
activerehashing
yes
client
-
output
-
buffer
-
limit
normal
0
0
0
client
-
output
-
buffer
-
limit
slave
256mb
64mb
60
client
-
output
-
buffer
-
limit
pubsub
32mb
8mb
60
hz
10
aof
-
rewrite
-
incremental
-
fsync
yes
|
由于只把redis当做缓存使用,因此没有启用持久化。
3. nginx配置
# vim nginx.conf
http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '"$gzip_ratio" $request_time $bytes_sent $request_length'; log_format srcache_log '$remote_addr - $remote_user [$time_local] "$request" ' '"$status" $body_bytes_sent $request_time $bytes_sent $request_length ' '[$upstream_response_time] [$srcache_fetch_status] [$srcache_store_status] [$srcache_expire]'; set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; include vhosts/test.ttlsa.com.conf; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
http
{
include
mime
.
types
;
default_type
application
/
octet
-
stream
;
log_format
main
'$remote_addr - $remote_user [$time_local] "$request" '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'"$gzip_ratio" $request_time $bytes_sent $request_length'
;
log_format
srcache
_log
'$remote_addr - $remote_user [$time_local] "$request" '
'"$status" $body_bytes_sent $request_time $bytes_sent $request_length '
'[$upstream_response_time] [$srcache_fetch_status] [$srcache_store_status] [$srcache_expire]'
;
set_real_ip
_from
10.0.0.0
/
8
;
real_ip
_header
X
-
Forwarded
-
For
;
include
vhosts
/
test
.
ttlsa
.
com
.
conf
;
}
|
# vim vhosts/test.ttlsa.com.conf
upstream redis { server 127.0.0.1:6379; keepalive 512; } server { listen 80; server_name test.ttlsa.com; index index.html index.htm index.php; root /data/test.ttlsa.com/webroot; location ~ .*\.php { srcache_store_private on; srcache_methods GET; srcache_response_cache_control off; if ($uri ~ /ttlsa.com/pp.php$){ set $key $request_uri; set_escape_uri $escaped_key $key; srcache_fetch GET /redis $key; srcache_default_expire 172800; srcache_store PUT /redis2 key=$escaped_key&exptime=$srcache_expire; #add_header X-Cached-From $srcache_fetch_status; #set_md5 $md5key $key; #add_header X-md5-key $md5key; #add_header X-Cached-Store $srcache_store_status; #add_header X-Key $key; #add_header X-Query_String $query_string; #add_header X-expire $srcache_expire; access_log /data/httplogs/test.ttlsa.com-photo-access.log srcache_log; } include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; } location = /redis { internal; set_md5 $redis_key $args; redis_pass redis; } location = /redis2 { internal; set_unescape_uri $exptime $arg_exptime; set_unescape_uri $key $arg_key; set_md5 $key; redis2_query set $key $echo_request_body; redis2_query expire $key $exptime; redis2_pass redis; } error_log /data/httplogs/test.ttlsa.com-error.log; access_log /data/httplogs/test.ttlsa.com-aceess.log main; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
upstream
redis
{
server
127.0.0.1
:
6379
;
keepalive
512
;
}
server
{
listen
80
;
server_name
test
.
ttlsa
.
com
;
index
index
.
html
index
.
htm
index
.
php
;
root
/
data
/
test
.
ttlsa
.
com
/
webroot
;
location
~
.
*
\
.
php
{
srcache_store_private
on
;
srcache_methods
GET
;
srcache_response_cache_control
off
;
if
(
$
uri
~
/
ttlsa
.
com
/
pp
.
php
$
)
{
set
$
key
$
request_uri
;
set_escape
_uri
$
escaped
_key
$
key
;
srcache_fetch
GET
/
redis
$
key
;
srcache_default
_expire
172800
;
srcache_store
PUT
/
redis2
key
=
$
escaped_key
&
exptime
=
$
srcache_expire
;
#add_header X-Cached-From $srcache_fetch_status;
#set_md5 $md5key $key;
#add_header X-md5-key $md5key;
#add_header X-Cached-Store $srcache_store_status;
#add_header X-Key $key;
#add_header X-Query_String $query_string;
#add_header X-expire $srcache_expire;
access_log
/
data
/
httplogs
/
test
.
ttlsa
.
com
-
photo
-
access
.
log
srcache_log
;
}
include
fastcgi_params
;
fastcgi
_pass
127.0.0.1
:
9000
;
fastcgi_index
index
.
php
;
fastcgi_connect
_timeout
60
;
fastcgi_send
_timeout
180
;
fastcgi_read
_timeout
180
;
fastcgi_buffer
_size
128k
;
fastcgi
_buffers
4
256k
;
fastcgi_busy_buffers
_size
256k
;
fastcgi_temp_file_write
_size
256k
;
fastcgi_intercept_errors
on
;
fastcgi_param
SCRIPT
_FILENAME
$
document_root
$
fastcgi_script_name
;
fastcgi_split_path_info
^
(
.
+
\
.
php
)
(
.
*
)
$
;
fastcgi_param
PATH
_INFO
$
fastcgi_path_info
;
}
location
=
/
redis
{
internal
;
set
_md5
$
redis
_key
$
args
;
redis_pass
redis
;
}
location
=
/
redis2
{
internal
;
set_unescape
_uri
$
exptime
$
arg_exptime
;
set_unescape
_uri
$
key
$
arg_key
;
set
_md5
$
key
;
redis2_query
set
$
key
$
echo_request_body
;
redis2_query
expire
$
key
$
exptime
;
redis2_pass
redis
;
}
error_log
/
data
/
httplogs
/
test
.
ttlsa
.
com
-
error
.
log
;
access_log
/
data
/
httplogs
/
test
.
ttlsa
.
com
-
aceess
.
log
main
;
}
|