-
Notifications
You must be signed in to change notification settings - Fork 51
/
README
158 lines (96 loc) · 2.98 KB
/
README
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
nginx-mysql-module
(c) 2012 Arutyunyan Roman (arut@qip.ru)
== MySQL support in NGINX ==
* this module is asynchronous (non-blocking)
* requires nginx-mtask-module (https://github.com/arut/nginx-mtask-module)
* requires standard MySQL client shared library libmysqlclient.so
NGINX configure:
./configure --add-module=/home/rarutyunyan/nginx-mtask-module --add-module=/home/rarutyunyan/nginx-mysql-module
Usage examples:
MySQL:
USE test;
CREATE TABLE `users` (
`name` varchar(128) DEFAULT NULL,
`id` int(11) NOT NULL auto_increment, PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
nginx.conf:
http {
...
server {
...
# TCP/IP access
#mysql_host 127.0.0.1;
# unix socket access (default)
#mysql_host localhost;
#mysql_user theuser;
#mysql_password thepass;
#mysql_port theport;
mysql_database test;
mysql_connections 32;
mysql_charset utf8;
# this turns on multiple statements support
# and is REQUIRED when calling stored procedures
mysql_multi on;
mtask_stack 65536;
location ~ /all {
mysql_query "SELECT name FROM users WHERE id='$arg_id'";
}
location /multi {
mysql_query "SELECT id, name FROM users ORDER BY id DESC LIMIT 10; SELECT id, name FROM users ORDER BY id ASC LIMIT 10";
}
location ~ /select.* {
if ( $arg_id ~* ^\d+$ ) {
mysql_query "SELECT name FROM users WHERE id='$arg_id'";
}
}
location ~ /insert.* {
mysql_escape $escaped_name $arg_name;
mysql_query "INSERT INTO users(name) VALUES('$escaped_name')";
}
location ~ /update.* {
mysql_query "UPDATE users SET name='$arg_name' WHERE id=$arg_id";
}
location ~ /delete.* {
mysql_query "DELETE FROM users WHERE id=$arg_id";
}
# store number of page shows per user
location ~ /register-by-cookie-show.* {
# register show in database
# need a location with this query:
# mysql_query "INSERT INTO shows(id) VALUES('$id') ON DUPLICATE KEY UPDATE count=count+1";
mysql_subrequest /update_shows_in_mysql?id=$cookie_abcdef;
# output content
rewrite ^(.*)$ /content last;
}
# spammers use big ids in picture refs to see who opened the message
location ~/spammer-style-image-show-register.* {
# need a location with this query:
# mysql_query "INSERT INTO shows(id) VALUES('$arg_id')";
mysql_subrequest /insert_show?id=$arg_id;
rewrite ^(.*)$ /content last;
}
location ~ /session.* {
# get user session
# need a location with this query:
# mysql_query "SELECT username, lastip FROM sessions WHERE id='$id'";
mysql_subrequest /select_from_mysql?id=$cookie_abcdef $username $lastip;
# go to content generator
rewrite ^(.*)$ /content?username=$username&lastip=$lastip last;
}
...
}
...
}
access:
curl 'localhost:8080/insert?name=foo'
11
curl 'localhost:8080/select?id=11'
foo
curl 'localhost:8080/update?id=11&name=bar'
<nothing>
curl 'localhost:8080/select?id=11'
bar
curl 'localhost:8080/delete?id=11'
<nothing>
curl 'localhost:8080/select?id=11'
<nothing>