nginx超时配置详解

Nginx的超时timeout配置详解
更新时间:2017年12月31日 10:28:50 作者:南琴浪博客 我要评论
本篇文章主要介绍了Nginx的超时timeout配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

本文介绍 Nginx 的 超时(timeout)配置。分享给大家,具体如下:

Nginx 处理的每个请求均有相应的超时设置。如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提升 Nginx 的性能。

keepalive_timeout

HTTP 是一种无状态协议,客户端向服务器发送一个 TCP 请求,服务端响应完毕后断开连接。

如果客户端向服务器发送多个请求,每个请求都要建立各自独立的连接以传输数据。

HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。

KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。

Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接。

1
2

配置段: http, server, location

keepalive_timeout 60s;
client_body_timeout

指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。

1
2

配置段: http, server, location

client_body_timeout 20s;
client_header_timeout

客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。

1
2

配置段: http, server, location

client_header_timeout 10s;
send_timeout

服务端向客户端传输数据的超时时间。

1
2

配置段: http, server, location

send_timeout 30s;
客户度连接nginx超时, 建议5s内

接收客户端header超时, 默认60s, 如果60s内没有收到完整的http包头, 返回408

1
2
3
4
5
6
Syntax: client_header_timeout time;
Default:
client_header_timeout 60s;
Context: http, server
Defines a timeout for reading client request header. If a client does not transmit the entire header within this time,
the 408 (Request Time-out) error is returned to the client.
接收客户端body超时, 默认60s, 如果连续的60s内没有收到客户端的1个字节, 返回408

1
2
3
4
5
6
7
Syntax: client_body_timeout time;
Default:
client_body_timeout 60s;
Context: http, server, location
Defines a timeout for reading client request body. The timeout is set only for a period between two successive read operations, not for the transmission of the whole request body.
If a client does not transmit anything within this time,
the 408 (Request Time-out) error is returned to the client.
keepalive时间,默认75s,通常keepalive_timeout应该比client_body_timeout大

1
2
3
4
5
6
Syntax: keepalive_timeout timeout [header_timeout];
Default:
keepalive_timeout 75s;
Context: http, server, location
The first parameter sets a timeout during which a keep-alive client connection will stay open on the server side. The zero value disables keep-alive client connections.
The optional second parameter sets a value in the “Keep-Alive: timeout=time” response header field. Two parameters may differ.
The “Keep-Alive: timeout=time” header field is recognized by Mozilla and Konqueror. MSIE closes keep-alive connections by itself in about 60 seconds.

可以理解为TCP连接关闭时的SO_LINGER延时设置,默认5s

1
2
3
4
5
6
7
Syntax: lingering_timeout time;
Default:
lingering_timeout 5s;
Context: http, server, location
When lingering_close is in effect, this directive specifies the maximum waiting time for more client data to arrive. If data are not received during this time,
the connection is closed. Otherwise, the data are read and ignored, and nginx starts waiting for more data again.
The “wait-read-ignore” cycle is repeated, but no longer than specified by the lingering_time directive.
域名解析超时,默认30s

1
2
3
4
5
6
Syntax: resolver_timeout time;
Default:
resolver_timeout 30s;
Context: http, server, location
Sets a timeout for name resolution, for example:
resolver_timeout 5s;
发送数据至客户端超时, 默认60s, 如果连续的60s内客户端没有收到1个字节, 连接关闭

1
2
3
4
5
6
Syntax: send_timeout time;
Default:
send_timeout 60s;
Context: http, server, location
Sets a timeout for transmitting a response to the client. The timeout is set only between two successive write operations,
not for the transmission of the whole response. If the client does not receive anything within this time, the connection is closed.
nginx与upstream server的连接超时时间

1
2
3
4
5
Syntax: proxy_connect_timeout time;
Default:
proxy_connect_timeout 60s;
Context: http, server, location
Defines a timeout for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75 seconds.
nginx接收upstream server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭

1
2
3
4
5
6
Syntax: proxy_read_timeout time;
Default:
proxy_read_timeout 60s;
Context: http, server, location
Defines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations,
not for the transmission of the whole response. If the proxied server does not transmit anything within this time, the connection is closed.
nginx发送数据至upstream server超时, 默认60s, 如果连续的60s内没有发送1个字节, 连接关闭

1
2
3
4
5
6
Syntax: proxy_send_timeout time;
Default:
proxy_send_timeout 60s;
Context: http, server, location
Sets a timeout for transmitting a request to the proxied server. The timeout is set only between two successive write operations,
not for the transmission of the whole request. If the proxied server does not receive anything within this time, the connection is closed.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

PHP中 guzzle 如何使用cookie

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$jar = new \GuzzleHttp\Cookie\CookieJar();
$domain = 'www.hz419.com';
$cookies = [
'JSESSIONID' => '89886942104CF3E80D2E4B7AEA556445',
//
];
$cookieJar = $jar->fromArray($cookies, $domain);
$client = new Client([
// Base URI is used with relative requests
'base_uri' => 'http://www.hz419.com',
// You can set any number of default request options.
'timeout' => 2.0,
]);
$response = $client->request('GET', '/blackweb/quoteList.action', ['cookies' => $cookieJar]);

PHP二维数组排列组合

PHP二维数组排列组合

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
function combination(array $options)
{
$rows = [];

foreach ($options as $option => $items) {
if (count($rows) > 0) {
// 2、将第一列作为模板
$clone = $rows;

// 3、置空当前列表,因为只有第一列的数据,组合是不完整的
$rows = [];

// 4、遍历当前列,追加到模板中,使模板中的组合变得完整
foreach ($items as $item) {
$tmp = $clone;
foreach ($tmp as $index => $value) {
$value[$option] = $item;
$tmp[$index] = $value;
}

// 5、将完整的组合拼回原列表中
$rows = array_merge($rows, $tmp);
}
} else {
// 1、先计算出第一列
foreach ($items as $item) {
$rows[][$option] = $item;
}
}
}

return $rows;
}

$options = array(
'sex' => [1, 2],
'area' => [1, 2, 3, 4, 5, 6, 7, 8, 9],
'level' => [1, 2, 3, 4],
);
$rows = combination($options);

PHP二维数组排列组合

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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
`configure' 配置此包以适应多种系统。                   

Usage: ./configure [OPTION]... [VAR=VALUE]...

要分配环境变量 (e.g., CC, CFLAGS...), 请将其指定为
VAR=VALUE. 有关一些有用变量的说明,请参见下文

选项的默认值在括号中指定。

Configuration: 配置
-h, --help 显示此帮助并退出
--help=short 显示简短帮助
--help=recursive 显示附加包简短帮助
-V, --version 显示版本详情并退出
-q, --quiet, --silent 不打印 `checking ...' 信息
--cache-file=FILE 将测试结果缓存到文件FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create 不创建输出文件
--srcdir=DIR find the sources in DIR [configure dir or `..']

Installation directories: 安装目录
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc. You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.
默认情况下, `make install'将安装`/usr/local/bin'、`/usr/local/lib'等。
您可以使用`--prefix`的去指定安装路径,
例如 `--prefix=$HOME`

For better control, use the options below.
为了更好地控制,请使用下面的选项。

Fine tuning of the installation directories:安装目录的微调:
--bindir=DIR user executables 用户可执行文件 [EPREFIX/bin]
--sbindir=DIR system admin executables 系统管理可执行文件 [EPREFIX/sbin]
--libexecdir=DIR program executables 程序可执行文件 [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data 只读单机数据(配置文件路径) [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data 可修改的体系外数据 [PREFIX/com]
--localstatedir=DIR modifiable single-machine data 可修改的单机数据 [PREFIX/var]
--libdir=DIR object code libraries 对象代码库 [EPREFIX/lib]
--includedir=DIR C header files C语言头部文件 [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc 非gcc的C语言头部文件 [/usr/include]
--datarootdir=DIR read-only arch.-independent data root 只读的非依赖的结构数据根 [PREFIX/share]
--datadir=DIR read-only architecture-independent data 只读的非依赖的结构数据 [DATAROOTDIR]
--infodir=DIR info documentation 详情文档 [DATAROOTDIR/info]
--localedir=DIR locale-dependent data 区域依赖数据 [DATAROOTDIR/locale]
--mandir=DIR man documentation 手册 [DATAROOTDIR/man]
--docdir=DIR documentation root 根手册 [DATAROOTDIR/doc/PACKAGE]
--htmldir=DIR html documentation html文档 [DOCDIR]
--dvidir=DIR dvi documentation dvi文档 [DOCDIR]
--pdfdir=DIR pdf documentation pdf文档 [DOCDIR]
--psdir=DIR ps documentation ps文档 [DOCDIR]

System types: 系统类型
--build=BUILD configure for building on BUILD [guessed] 生成配置时
--host=HOST cross-compile to build programs to run on HOST [BUILD]
--target=TARGET configure for building compilers for TARGET 编译时的编译器 [HOST]

Optional Features and Packages: 可选功能和软件包:
--disable-option-checking ignore unrecognized --enable/--with options 忽视默认启用或者默认附加的选项
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) 不包含功能
--enable-FEATURE[=ARG] include FEATURE [ARG=yes] 包含功能
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes] 使用包
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) 不使用某个包
--with-libdir=NAME Look for libraries in .../NAME rather than .../lib
--disable-rpath Disable passing additional runtime library search paths 禁用在搜索路径中传递其他运行库。
--enable-re2c-cgoto Enable -g flag to re2c to use computed goto gcc extension
--disable-gcc-global-regs whether to enable GCC global register variables

SAPI modules: SAPI模块

--with-apxs2=FILE Build shared Apache 2.0 Handler module. FILE is the optional
pathname to the Apache apxs tool apxs 构建共享的Apache2.0处理程序模块。文件是可选的Apache apxs工具apxs的路径名
--disable-cli Disable building CLI version of PHP 禁用生成PHP的CLI版本
(this forces --without-pear)
--enable-embed=TYPE EXPERIMENTAL: Enable building of embedded SAPI library
TYPE is either 'shared' or 'static'. TYPE=shared
--enable-fpm Enable building of the fpm SAPI executable 启用生成SAPI可执行文件
--with-fpm-user=USER Set the user for php-fpm to run as. (default: nobody) 将php fpm的运行用户设置为
--with-fpm-group=GRP Set the group for php-fpm to run as. For a system user, this 将php fpm的运行用户组设置为
should usually be set to match the fpm username (default: nobody)
--with-fpm-systemd Activate systemd integration
--with-fpm-acl Use POSIX Access Control Lists
--with-litespeed Build PHP as litespeed module
--enable-phpdbg Build phpdbg 构建phpdbg
--enable-phpdbg-webhelper Build phpdbg web SAPI support 构建phpdbg web SAPI
--enable-phpdbg-debug Build phpdbg in debug mode 构建phpdbg
--enable-phpdbg-readline Enable readline support in phpdbg (depends on static ext/readl
--disable-cgi Disable building CGI version of PHP 禁用生成PHP的CGI版本
--with-valgrind=DIR Enable valgrind support

General settings: 一般设置

--enable-gcov Enable GCOV code coverage (requires LTP) - FOR DEVELOPERS ONLY!! 启用GCOV代码覆盖率(需要LTP)-仅限开发人员!!
--enable-debug Compile with debugging symbols 开启debug
--with-layout=TYPE Set how installed files will be laid out. Type can
be either PHP or GNU [PHP]
--with-config-file-path=PATH
Set the path in which to look for php.ini [PREFIX/lib] 设置查找php.ini的路径
--with-config-file-scan-dir=PATH
Set the path where to scan for configuration files 设置扫描配置文件的路径
--enable-sigchild Enable PHP's own SIGCHLD handler
--enable-libgcc Enable explicitly linking against libgcc 启用针对libgcc的显式链接
--disable-short-tags Disable the short-form <? start tag by default 关闭php的短标签
--enable-dmalloc Enable dmalloc 开启 dmalloc
--disable-ipv6 Disable IPv6 support 关闭ipv6
--enable-dtrace Enable DTrace support
--enable-fd-setsize Set size of descriptor sets

Extensions: 扩展

--with-EXTENSION=shared[,PATH]

NOTE: Not all extensions can be build as 'shared'.

Example: --with-foobar=shared,/usr/local/foobar/

o Builds the foobar extension as shared extension.
o foobar package install prefix is /usr/local/foobar/


--disable-all Disable all extensions which are enabled by default 禁用默认启用的所有扩展

--disable-libxml Disable LIBXML support 关闭libxml
--with-libxml-dir=DIR LIBXML: libxml2 install prefix 指定libxml2的安装路径
--with-openssl=DIR Include OpenSSL support (requires OpenSSL >= 1.0.1) 开启openssl
--with-kerberos=DIR OPENSSL: Include Kerberos support
--with-system-ciphers OPENSSL: Use system default cipher list instead of hardcoded valu 使用系统默认密码列表而不是硬编码值
--with-pcre-regex=DIR Include Perl Compatible Regular Expressions support.
DIR is the PCRE install prefix BUNDLED
--with-pcre-jit Enable PCRE JIT functionality (BUNDLED only)
--with-pcre-valgrind=DIR
Enable PCRE valgrind support. Developers only!
--without-sqlite3=DIR Do not include SQLite3 support. DIR is the prefix to
SQLite3 installation directory.
--with-zlib=DIR Include ZLIB support (requires zlib >= 1.2.0.4)
--with-zlib-dir=<DIR> Define the location of zlib install directory
--enable-bcmath Enable bc style precision math functions 启用精确数学函数
--with-bz2=DIR Include BZip2 support
--enable-calendar Enable support for calendar conversion
--disable-ctype Disable ctype functions
--with-curl=DIR Include cURL support
--enable-dba Build DBA with bundled modules. To build shared DBA
extension use --enable-dba=shared
--with-qdbm=DIR DBA: QDBM support
--with-gdbm=DIR DBA: GDBM support
--with-ndbm=DIR DBA: NDBM support
--with-db4=DIR DBA: Oracle Berkeley DB 4.x or 5.x support
--with-db3=DIR DBA: Oracle Berkeley DB 3.x support
--with-db2=DIR DBA: Oracle Berkeley DB 2.x support
--with-db1=DIR DBA: Oracle Berkeley DB 1.x support/emulation
--with-dbm=DIR DBA: DBM support
--with-tcadb=DIR DBA: Tokyo Cabinet abstract DB support
--with-lmdb=DIR DBA: Lightning memory-mapped database support
--without-cdb=DIR DBA: CDB support (bundled)
--disable-inifile DBA: INI support (bundled)
--disable-flatfile DBA: FlatFile support (bundled)
--disable-dom Disable DOM support
--with-libxml-dir=DIR DOM: libxml2 install prefix
--with-enchant=DIR Include enchant support.
GNU Aspell version 1.1.3 or higher required.
--enable-exif Enable EXIF (metadata from images) support
--disable-fileinfo Disable fileinfo support
--disable-filter Disable input filter support
--with-pcre-dir FILTER: pcre install prefix
--enable-ftp Enable FTP support
--with-openssl-dir=DIR FTP: openssl install prefix
--with-gd=DIR Include GD support. DIR is the GD library base
install directory BUNDLED
--with-webp-dir=DIR GD: Set the path to libwebp install prefix
--with-jpeg-dir=DIR GD: Set the path to libjpeg install prefix
--with-png-dir=DIR GD: Set the path to libpng install prefix
--with-zlib-dir=DIR GD: Set the path to libz install prefix
--with-xpm-dir=DIR GD: Set the path to libXpm install prefix
--with-freetype-dir=DIR GD: Set the path to FreeType 2 install prefix
--enable-gd-jis-conv GD: Enable JIS-mapped Japanese font support
--with-gettext=DIR Include GNU gettext support
--with-gmp=DIR Include GNU MP support
--with-mhash=DIR Include mhash support
--disable-hash Disable hash support
--without-iconv=DIR Exclude iconv support
--with-imap=DIR Include IMAP support. DIR is the c-client install prefix
--with-kerberos=DIR IMAP: Include Kerberos support. DIR is the Kerberos install prefi
--with-imap-ssl=DIR IMAP: Include SSL support. DIR is the OpenSSL install prefix
--with-interbase=DIR Include Firebird support. DIR is the Firebird base
install directory /opt/firebird
--enable-intl Enable internationalization support
--with-icu-dir=DIR Specify where ICU libraries and headers can be found
--disable-json Disable JavaScript Object Serialization support
--with-ldap=DIR Include LDAP support
--with-ldap-sasl=DIR LDAP: Include Cyrus SASL support
--enable-mbstring Enable multibyte string support
--disable-mbregex MBSTRING: Disable multibyte regex support
--disable-mbregex-backtrack
MBSTRING: Disable multibyte regex backtrack check
--with-libmbfl=DIR MBSTRING: Use external libmbfl. DIR is the libmbfl base
install directory BUNDLED
--with-onig=DIR MBSTRING: Use external oniguruma. DIR is the oniguruma install pr
If DIR is not set, the bundled oniguruma will be used
--with-mysqli=FILE Include MySQLi support. FILE is the path
to mysql_config. If no value or mysqlnd is passed
as FILE, the MySQL native driver will be used
--enable-embedded-mysqli
MYSQLi: Enable embedded support
Note: Does not work with MySQL native driver!
--with-mysql-sock=SOCKPATH
MySQLi/PDO_MYSQL: Location of the MySQL unix socket pointer.
If unspecified, the default locations are searched
--with-oci8=DIR Include Oracle Database OCI8 support. DIR defaults to $ORACLE_HOM
Use --with-oci8=instantclient,/path/to/instant/client/lib
to use an Oracle Instant Client installation
--with-odbcver=HEX Force support for the passed ODBC version. A hex number is expect
Use the special value of 0 to prevent an explicit ODBCVER to b
--with-adabas=DIR Include Adabas D support /usr/local
--with-sapdb=DIR Include SAP DB support /usr/local
--with-solid=DIR Include Solid support /usr/local/solid
--with-ibm-db2=DIR Include IBM DB2 support /home/db2inst1/sqllib
--with-ODBCRouter=DIR Include ODBCRouter.com support /usr
--with-empress=DIR Include Empress support \$EMPRESSPATH
(Empress Version >= 8.60 required)
--with-empress-bcs=DIR
Include Empress Local Access support \$EMPRESSPATH
(Empress Version >= 8.60 required)
--with-birdstep=DIR Include Birdstep support /usr/local/birdstep
--with-custom-odbc=DIR Include user defined ODBC support. DIR is ODBC install base
directory /usr/local. Make sure to define CUSTOM_ODBC_LIBS and
have some odbc.h in your include dirs. f.e. you should define
following for Sybase SQL Anywhere 5.5.00 on QNX, prior to
running this configure script:
CPPFLAGS=\"-DODBC_QNX -DSQLANY_BUG\"
LDFLAGS=-lunix
CUSTOM_ODBC_LIBS=\"-ldblib -lodbc\"
--with-iodbc=DIR Include iODBC support /usr/local
--with-esoob=DIR Include Easysoft OOB support /usr/local/easysoft/oob/client
--with-unixODBC=DIR Include unixODBC support /usr/local
--with-dbmaker=DIR Include DBMaker support
--disable-opcache Disable Zend OPcache support
--disable-opcache-file Disable file based caching
--disable-huge-code-pages
Disable copying PHP CODE pages into HUGE PAGES
--enable-pcntl Enable pcntl support (CLI/CGI only)
--disable-pdo Disable PHP Data Objects support
--with-pdo-dblib=DIR PDO: DBLIB-DB support. DIR is the FreeTDS home directory
--with-pdo-firebird=DIR PDO: Firebird support. DIR is the Firebird base
install directory /opt/firebird
--with-pdo-mysql=DIR PDO: MySQL support. DIR is the MySQL base directory
If no value or mysqlnd is passed as DIR, the
MySQL native driver will be used
--with-zlib-dir=DIR PDO_MySQL: Set the path to libz install prefix
--with-pdo-oci=DIR PDO: Oracle OCI support. DIR defaults to $ORACLE_HOME.
Use --with-pdo-oci=instantclient,/path/to/instant/client/lib
for an Oracle Instant Client installation.
--with-pdo-odbc=flavour,dir
PDO: Support for 'flavour' ODBC driver.
include and lib dirs are looked for under 'dir'.

'flavour' can be one of: ibm-db2, iODBC, unixODBC, generic
If ',dir' part is omitted, default for the flavour
you have selected will be used. e.g.:

--with-pdo-odbc=unixODBC

will check for unixODBC under /usr/local. You may attempt
to use an otherwise unsupported driver using the \"generic\"
flavour. The syntax for generic ODBC support is:

--with-pdo-odbc=generic,dir,libname,ldflags,cflags

When built as 'shared' the extension filename is always pdo_odbc.
--with-pdo-pgsql=DIR PDO: PostgreSQL support. DIR is the PostgreSQL base
install directory or the path to pg_config
--without-pdo-sqlite=DIR
PDO: sqlite 3 support. DIR is the sqlite base
install directory BUNDLED
--with-pgsql=DIR Include PostgreSQL support. DIR is the PostgreSQL
base install directory or the path to pg_config
--disable-phar Disable phar support
--disable-posix Disable POSIX-like functions
--with-pspell=DIR Include PSPELL support.
GNU Aspell version 0.50.0 or higher required
--with-libedit=DIR Include libedit readline replacement (CLI/CGI only)
--with-readline=DIR Include readline support (CLI/CGI only)
--with-recode=DIR Include recode support
--disable-session Disable session support
--with-mm=DIR SESSION: Include mm support for session storage
--enable-shmop Enable shmop support
--disable-simplexml Disable SimpleXML support
--with-libxml-dir=DIR SimpleXML: libxml2 install prefix
--with-snmp=DIR Include SNMP support
--with-openssl-dir=DIR SNMP: openssl install prefix
--enable-soap Enable SOAP support
--with-libxml-dir=DIR SOAP: libxml2 install prefix
--enable-sockets Enable sockets support
--with-sodium=DIR Include sodium support
--with-password-argon2=DIR Include Argon2 support in password_*. DIR is the Arg
--enable-sysvmsg Enable sysvmsg support
--enable-sysvsem Enable System V semaphore support
--enable-sysvshm Enable the System V shared memory support
--with-tidy=DIR Include TIDY support
--disable-tokenizer Disable tokenizer support
--enable-wddx Enable WDDX support
--with-libxml-dir=DIR WDDX: libxml2 install prefix
--with-libexpat-dir=DIR WDDX: libexpat dir for XMLRPC-EPI (deprecated)
--disable-xml Disable XML support
--with-libxml-dir=DIR XML: libxml2 install prefix
--with-libexpat-dir=DIR XML: libexpat install prefix (deprecated)
--disable-xmlreader Disable XMLReader support
--with-libxml-dir=DIR XMLReader: libxml2 install prefix
--with-xmlrpc=DIR Include XMLRPC-EPI support
--with-libxml-dir=DIR XMLRPC-EPI: libxml2 install prefix
--with-libexpat-dir=DIR XMLRPC-EPI: libexpat dir for XMLRPC-EPI (deprecated)
--with-iconv-dir=DIR XMLRPC-EPI: iconv dir for XMLRPC-EPI
--disable-xmlwriter Disable XMLWriter support
--with-libxml-dir=DIR XMLWriter: libxml2 install prefix
--with-xsl=DIR Include XSL support. DIR is the libxslt base
install directory (libxslt >= 1.1.0 required)
--enable-zend-test Enable zend-test extension
--enable-zip Include Zip read/write support
--with-zlib-dir=DIR ZIP: Set the path to libz install prefix
--with-pcre-dir ZIP: pcre install prefix
--with-libzip=DIR ZIP: use libzip
--enable-mysqlnd Enable mysqlnd explicitly, will be done implicitly
when required by other extensions
--disable-mysqlnd-compression-support
Disable support for the MySQL compressed protocol in mysqlnd
--with-zlib-dir=DIR mysqlnd: Set the path to libz install prefix

PEAR:

--with-pear=DIR Install PEAR in DIR [PREFIX/lib/php]
--without-pear Do not install PEAR

Zend:

--enable-maintainer-zts Enable thread safety - for code maintainers only!!
--disable-inline-optimization
If building zend_execute.lo fails, try this switch
--disable-zend-signals whether to enable zend signal handling

TSRM:

--with-tsrm-pth=pth-config
Use GNU Pth
--with-tsrm-st Use SGI's State Threads
--with-tsrm-pthreads Use POSIX threads (default)

Libtool:

--enable-shared=PKGS Build shared libraries default=yes
--enable-static=PKGS Build static libraries default=yes
--enable-fast-install=PKGS
Optimize for fast installation default=yes
--with-gnu-ld Assume the C compiler uses GNU ld default=no
--disable-libtool-lock Avoid locking (might break parallel builds)
--with-pic Try to use only PIC/non-PIC objects default=use both
--with-tags=TAGS Include additional configurations automatic


Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP C preprocessor
YACC The `Yet Another Compiler Compiler' implementation to use.
Defaults to the first program found out of: `bison -y', `byacc',
`yacc'.
YFLAGS The list of arguments that will be passed by default to $YACC.
This script will default YFLAGS to the empty string to avoid a
default value of `-d' given by some make applications.
CXX C++ compiler command
CXXFLAGS C++ compiler flags
CXXCPP C++ preprocessor

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

Report bugs to the package provider.

mysql左连接唯一键

user表的数据

1
2
3
4
5
6
7
8
9
mysql> select * from user;
+----+----------+
| id | username |
+----+----------+
| 1 | 1111 |
| 2 | admin |
| 3 | test |
+----+----------+
3 rows in set (0.00 sec)

note表的数据

1
2
3
4
5
6
7
8
9
10
11
mysql> select * from note;
+----+--------+---------+
| id | title | user_id |
+----+--------+---------+
| 1 | 111111 | 1 |
| 2 | 2222 | 2 |
| 3 | 333 | 3 |
| 4 | 333222 | 2 |
| 5 | 333222 | 5 |
+----+--------+---------+
5 rows in set (0.00 sec)

如果直接左连接,出来的结果并非以左边为唯一列,因为关联onnote.user_id不是唯一列,所以结果user表里有两个2

1
2
3
4
5
6
7
8
9
10
mysql> select * from user left join note on  note.user_id = user.id;
+----+----------+------+--------+---------+
| id | username | id | title | user_id |
+----+----------+------+--------+---------+
| 1 | 1111 | 1 | 111111 | 1 |
| 2 | admin | 2 | 2222 | 2 |
| 3 | test | 3 | 333 | 3 |
| 2 | admin | 4 | 333222 | 2 |
+----+----------+------+--------+---------+
4 rows in set (0.00 sec)

先将note表唯一列化,在用user去连接这个表,出来的结果就是 userid唯一了

1
2
3
4
5
6
7
8
9
mysql> select * from user left join (select * from note group by user_id)as n on  n.user_id = user.id;
+----+----------+------+--------+---------+
| id | username | id | title | user_id |
+----+----------+------+--------+---------+
| 1 | 1111 | 1 | 111111 | 1 |
| 2 | admin | 2 | 2222 | 2 |
| 3 | test | 3 | 333 | 3 |
+----+----------+------+--------+---------+
3 rows in set (0.00 sec)

mysql docker 主从复制实例

思路

  • 创建主服务器 mysql_master,获取ip地址,编辑mysql配置文件
  • 创建从服务器 mysal_slave,获取ip地址,编辑mysql配置文件
  • 主服务器的 mysql 中创建 slave 用户用于主从复制
  • 查看主服务器二进制日志文件的状态信息。记录Position参数
  • 改变mysql_slavemaster
  • 启动mysql_slaveslave
  • 查看slave状态,主从复制成功

配置docker环境

创建主服务器

1
2
3
4
5
6
7
docker run \
--name mysql_master \
-v /Users/panyian/code/docker/mysql_copy/master:/etc/mysql/conf.d \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
mysql:latest

创建从服务器

1
2
3
4
5
6
7
docker run \
--name mysql_slave \
-v /Users/panyian/code/docker/mysql_copy/slave:/etc/mysql/conf.d \
-p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
mysql:latest

命令详解, –name 设置名称,-v设置路径挂载,-p 端口映射,-e 环境变量设置,-d后台运行

修改MySQL配置

1
主服务器`mysql`配置文件``/Users/panyian/code/docker/mysql_copy/master/custom.cnf`

[mysqld]

设置server_id,一般设置为IP,同一局域网内注意要唯一

server_id=100

复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)

binlog-ignore-db=mysql

开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)

log-bin=edu-mysql-bin

为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存

binlog_cache_size=1M

主从复制的格式(mixed,statement,row,默认格式是statement)

binlog_format=mixed

二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。

expire_logs_days=7

跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

1
2

从服务器`mysql`配置文件`/Users/panyian/code/docker/mysql_copy/slave/custom.cnf`

[mysqld]

设置server_id,一般设置为IP,注意要唯一

server_id=101

复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)

binlog-ignore-db=mysql

开启二进制日志功能,以备Slave作为其它Slave的Master时使用

log-bin=edu-mysql-slave1-bin

为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存

binlog_cache_size=1M

主从复制的格式(mixed,statement,row,默认格式是statement)

binlog_format=mixed

二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。

expire_logs_days=7

跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

relay_log配置中继日志

relay_log=edu-mysql-relay-bin

log_slave_updates表示slave将复制事件写进自己的二进制日志

log_slave_updates=1

防止改变数据(除了特殊的线程)

read_only=1


mysql主从复制

思路

  • 创建主服务器,配置mysql
  • 创建从服务器,配置mysql
  • 主服务器中创建用户slave,复制master status 的文件名和position
  • 改变从服务器的master配置
  • 开启从服务器的slave

编辑mysql配置

编辑master配置,/Users/pan/code/docker/mysql/master

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[mysqld]
## 设置server_id,一般设置为IP,同一局域网内注意要唯一
server_id=100
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql
## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
log-bin=edu-mysql-bin
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

编辑slave配置,/Users/pan/code/docker/mysql/slave

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[mysqld]
## 设置server_id,一般设置为IP,注意要唯一
server_id=101
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=edu-mysql-slave1-bin
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## 防止改变数据(除了特殊的线程)
read_only=1

生成服务器

生成主服务器

1
docker run --name mysql_master -v /Users/pan/code/docker/mysql/master:/etc/mysql/conf.d -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

生成从服务器

1
docker run --name mysql_slave -v /Users/pan/code/docker/mysql/slave:/etc/mysql/conf.d -p 33307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

进入主服务器

1
docker exec -it mysql_master /bin/bash

创建mysql用户,授予权限

1
2
3
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
这里主要是要授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限。

获取master 的 file 和position

1
show master status;

进入从服务器

改变从服务器的master连接

1
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='edu-mysql-bin.000001', master_log_pos=929, master_connect_retry=30;  

命令解释:

  • master_host: Master 的IP地址
  • master_user: 在 Master 中授权的用于数据同步的用户
  • master_password: 同步数据的用户的密码
  • master_port: Master 的数据库的端口号
  • master_log_file: 指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
  • master_log_pos: 从哪个 Position 开始读,即上文中提到的 Position 字段的值
  • master_connect_retry: 当重新建立主从连接时,如果连接失败,重试的时间间隔,单位是秒,默认是60秒。

在 Slave 的 MySQL 终端执行查看主从同步状态

1
show slave status \G;

SlaveIORunning 和 SlaveSQLRunning 是No,表明 Slave 还没有开始复制过程。相反 SlaveIORunning 和 SlaveSQLRunning 是Yes表明已经开始工作了

执行以下命令,开始开启主从同步:

1
2
start slave;
show slave status \G;

有时start slave的时候会提示caching_sha2_password相关的错误,多试几次貌似就可以了

编译安装nginx

编译安装nginx1.16.0

一、编译安装nginx

1、系统环境

1
2
3
4
[root@ansible-server ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@ansible-server ~]# uname -r
3.10.0-862.el7.x86_64

2、安装依赖

1
2
yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y
useradd nginx -s /sbin/nologin -M

3、安装nginx1.16.0

1
2
3
4
5
6
7
8
mkdir -p /nulige/tools
cd /nulige/tools
wget https://nginx.org/download/nginx-1.16.0.tar.gz
tar zxvf nginx-1.16.0.tar.gz
cd nginx-1.16.0
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
make && make install

4、添加环境变量

1
2
3
4
[root@ansible-server sbin]# vi /etc/profile
export PATH="/usr/local/nginx/sbin"
#使环境变量生效
[root@ansible-server sbin]# source /etc/profile

5、查看版本,可以看到编译的模块

1
2
3
4
5
6
[root@ansible-server sbin]# nginx -V
nginx version: nginx/1.16.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module

6、配置启动服务

1
2
3
4
5
6
7
8
9
[root@ansible-server conf]# vi /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#重载并启动服务
[root@ansible-server conf]# systemctl daemon-reload
[root@ansible-server conf]# systemctl start nginx
[root@ansible-server conf]# systemctl enable nginx
[root@ansible-server conf]# systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; static; vendor preset: disabled)
Active: active (running) since Sat 2019-05-18 16:36:48 CST; 11s ago
Main PID: 26928 (nginx)
CGroup: /system.slice/nginx.service
├─26928 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
└─26929 nginx: worker process

May 18 16:36:48 ansible-server systemd[1]: Starting nginx - high performance web server...
May 18 16:36:48 ansible-server systemd[1]: Started nginx - high performance web server.

nginx 负载均衡

本机负载均衡例子

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

upstream nginxtest{
server 127.0.0.1:8881 weight=1;
server 127.0.0.1:8882 weight=2;
server 127.0.0.1:8883 weight=1;
}
server {
listen 8881;
server_name 127.0.0.1;
root /Users/pan/code/nginx/nginx1;
location / {
index index.html index.htm;
}
}
server {
listen 8882;
server_name 127.0.0.1;
root /Users/pan/code/nginx/nginx2;
location / {
index index.html index.htm;
}
}
server {
listen 8883;
server_name 127.0.0.1;
root /Users/pan/code/nginx/nginx3;
location / {
index index.html index.htm;
}
}
server {
listen 8880;
server_name 127.0.0.1;
root /Users/pan/code;
location / {
proxy_pass http://nginxtest;
index index.html index.htm;
}
}

docker 负载均衡例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
upstream nginxtest{
server 127.0.0.1:8841 weight=1;
server 127.0.0.1:8842 weight=1;
server 127.0.0.1:8843 weight=1;
}

server {
listen 8880;
server_name 127.0.0.1;
root /Users/pan/code;
location / {
proxy_pass http://nginxtest;
}
}

docker 运行命令

1
2
3
4
5
6
docker run -d --name nginx3 -p 8843:80
-v ~/code/docker/nginx/nginx3/www:/usr/share/nginx/html
-v ~/code/docker/nginx/nginx3/conf/nginx.conf:/etc/nginx/nginx.conf
-v ~/code/docker/nginx/nginx3/logs:/var/log/nginx
nginx

Laravel的nginx最优配置

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
server {
listen 80;
server_name example.com;
root /example.com/public;

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";

index index.html index.htm index.php;

charset utf-8;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }

error_page 404 /index.php;

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

location ~ /\.(?!well-known).* {
deny all;
}
}