nginx-php类似nginx-lua的扩展,nginx-php中文开发文档
2020年6月2日10:19:03
github:https://github.com/rryqszq4/ngx_php7
php5的版本 https://github.com/rryqszq4/ngx_php
发现是从框架性能测试的 https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=fortune发现的
这个是参照ngx_lua做的,目前我自己还未做测试,先把文档翻译成中文的,作者也应该是中国人,官方QQ群:558795330
感谢ta 对发展php的生态做的贡献
2020年6月3日09:31:49
因为cnblog的目前不支持mkdown语法,在有道上分享的一个更方便观看的版本
https://note.youdao.com/ynoteshare1/index.html?id=8131b1a6ad57cc15b109bbb9942a72f9&type=note
ngx_php7
ngx_php7是高性能Web服务器nginx的扩展模块,它实现嵌入式php7脚本来处理nginx的位置和变量。
ngx_php7借鉴ngx_lua的设计,并致力于提供比php-cgi,mod_php,php-fpm,和hhvm具有显着性能优势的非阻塞Web服务。
ngx_php7不想替换任何东西,只想提供一个解决方案。
有ngx_php5的旧版,它记录了我过去的一些代码实践,也很有价值。
ngx_php7 and php 的性能测试
目录
- 官方php有什么不同
- 运行条件
- 安装
- 概要
- 测试
- 指令
- Nginx API for php
- Nginx non-blocking API for php
- Nginx 常量
- 版权和许可
官方php有什么不同
- 全局变量在每个请求中都不安全
- 类的静态变量在每个请求中都不安全
- 不要设计单例模式
- 本机IO功能可以正常工作,但是会减慢Nginx的速度
运行条件
- 仅支持 Linux
- PHP-7.0.* ~ PHP-7.4.*
- nginx-1.4.7 ~ nginx-1.17.8
安装
编译安装
$ wget 'http://php.net/distributions/php-7.3.10.tar.gz'
$ tar xf php-7.3.10.tar.gz
$ cd php-7.3.10$ ./configure --prefix=/path/to/php --enable-embed
$ make && make install$ git clone https://github.com/rryqszq4/ngx_php7.git$ wget 'http://nginx.org/download/nginx-1.12.2.tar.gz'
$ tar -zxvf nginx-1.12.2.tar.gz
$ cd nginx-1.12.2$ export PHP_CONFIG=/path/to/php/bin/php-config
$ export PHP_BIN=/path/to/php/bin
$ export PHP_INC=/path/to/php/include/php
$ export PHP_LIB=/path/to/php/lib$ ./configure --user=www --group=www \
$ --prefix=/path/to/nginx \
$ --with-ld-opt="-Wl,-rpath,$PHP_LIB" \
$ --add-module=/path/to/ngx_php7/third_party/ngx_devel_kit \
$ --add-module=/path/to/ngx_php7
$ make && make install
CentOS / RedHat 7
yum -y install https://extras.getpagespeed.com/release-el7-latest.rpm
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm yum-utils
yum-config-manager --enable remi-php73
yum install nginx-module-php7
编辑 nginx.conf
并在顶部加载所需的模块:
load_module modules/ndk_http_module.so;
load_module modules/ngx_http_php_module.so;
Docker
$ docker build -t nginx-php7 .
$ : "app.conf: Create nginx config"
$ docker run -p 80:80 -v $PWD/app.conf:/etc/nginx/conf.d/default.conf nginx-php7
概要
worker_processes auto;events {worker_connections 102400;
}http {include mime.types;default_type application/octet-stream;keepalive_timeout 65;client_max_body_size 64k; client_body_buffer_size 64k;php_ini_path /usr/local/php/etc/php.ini;server {listen 80;server_name localhost;default_type 'application/json; charset=UTF-8';location /php {content_by_php_block {echo "hello ngx_php7";}}location = /ngx_request {content_by_php_block {echo ngx_request_document_uri();}}# curl /ngx_get?a=1&b=2location = /ngx_get {content_by_php_block {echo "ngx_query_args()\n";var_dump(ngx_query_args());}}# curl -d 'a=1&b=2' /ngx_postlocation = /ngx_post {content_by_php_block {echo "ngx_post_args()\n";var_dump(ngx_post_args());}}location = /ngx_sleep {content_by_php_block {echo "ngx_sleep start\n";yield ngx_sleep(1);echo "ngx_sleep end\n";}}location = /ngx_socket2 {default_type 'application/json;charset=UTF-8';content_by_php_block {$fd = ngx_socket_create();yield ngx_socket_connect($fd, "hq.sinajs.cn", 80);$send_buf = "GET /list=s_sh000001 HTTP/1.0\r\nHost: hq.sinajs.cn\r\nConnection: close\r\n\r\n";yield ngx_socket_send($fd, $send_buf, strlen($send_buf));$recv_buf = "";yield ngx_socket_recv($fd, $recv_buf);var_dump($recv_buf);yield ngx_socket_close($fd);}}location = /ngx_var {set $a 1234567890;content_by_php_block {$a = ngx_var_get("a");var_dump($a);}}# set content-type of response headerslocation = /ngx_header {content_by_php_block {ngx_header_set("Content-Type", "text/html; charset=UTF-8");}}# run a php filelocation = /php {content_by_php_block {include "name_of_php_file.php";}}# run any php file in rootlocation = / {content_by_php_block {include ngx_var_get("uri");}}}
}
测试
使用Test :: Nginx模块的perl进行测试,搜索和发现ngx_php7中的问题。
ngx_php7 test ...
nginx version: nginx/1.12.2
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
configure arguments: --prefix=/home/travis/build/rryqszq4/ngx_php7/build/nginx --with-ld-opt=-Wl,-rpath,/home/travis/build/rryqszq4/ngx_php7/build/php/lib --add-module=../../../ngx_php7/third_party/ngx_devel_kit --add-module=../../../ngx_php7
t/001-hello.t ..................... ok
t/002-ini.t ....................... ok
t/003-error.t ..................... ok
t/004-ngx_request.t ............... ok
t/005-ngx_log.t ................... ok
t/006-ngx_sleep.t ................. ok
t/007-ngx_socket.t ................ ok
t/008-ngx_exit.t .................. ok
t/009-ngx_query_args.t ............ ok
t/010-ngx_post_args.t ............. ok
t/011-ngx_constants.t ............. ok
t/012-function.t .................. ok
t/013-class.t ..................... ok
t/014-ngx_var.t ................... ok
t/015-ngx_header.t ................ 1/? WARNING: TEST 2: set content-length of response headers - unexpected extra bytes after last chunk in response: "Testing ngx_header!\x{0a}"
t/015-ngx_header.t ................ ok
t/016-rewrite_by_php.t ............ ok
t/017-ngx_redirect.t .............. ok
t/018-ngx_mysql.t ................. ok
t/019-php_set.t ................... ok
t/020-ngx_cookie.t ................ ok
t/021-content_by_php_block.t ...... ok
t/022-init_worker_by_php_block.t .. ok
All tests successful.
Files=22, Tests=84, 14 wallclock secs ( 0.09 usr 0.02 sys + 2.19 cusr 0.43 csys = 2.73 CPU)
Result: PASS
指令
- php_ini_path
- init_worker_by_php
- init_worker_by_php_block
- rewrite_by_php
- rewrite_by_php_block
- access_by_php
- access_by_php_block
- content_by_php
- content_by_php_block
- log_by_php
- log_by_php_block
- header_filter_by_php
- header_filter_by_php_block
- body_filter_by_php
- body_filter_by_php_block
- php_keepalive
- php_set
- php_socket_keepalive
- php_socket_buffer_size
php_ini_path
syntax: php_ini_path
<php.ini file path>
context: http
phase: loading-config
该指令允许加载正式的php配置文件php.ini,该文件将由后续的PHP代码使用。
init_worker_by_php
syntax: init_worker_by_php
<php script code>
context: http
phase: starting-worker
init_worker_by_php_block
syntax: init_worker_by_php_block
{php script code}
context: http
phase: starting-worker
rewrite_by_php
syntax: rewrite_by_php
<php script code>
context: http, server, location, location if
phase: rewrite
In the rewrite phase of nginx, you can execute inline php code.
rewrite_by_php_block
syntax: rewrite_by_php_block
{php script code}
context: location, location if
phase: rewrite
In the rewrite phase of nginx, you can execute inline php code.
access_by_php
syntax: access_by_php
<php script code>
context: http, server, location, location if
phase: access
In the access phase of nginx, you can execute inline php code.
access_by_php_block
syntax: access_by_php_block
{php script code}
context: location, location if
phase: access
In the access phase of nginx, you can execute inline php code.
content_by_php
syntax: content_by_php
<php script code>
context: http, server, location, location if
phase: content
In the content phase of nginx, you can execute inline php code.
content_by_php_block
syntax: content_by_php_block
{php script code}
context: location, location if
phase: content
In the content phase of nginx, you can execute inline php code.
log_by_php
syntax: log_by_php
<php script code>
context: http, server, location, location if
phase: log
log_by_php_block
syntax: log_by_php_block
{php script code}
context: location, location if
phase: log
header_filter_by_php
syntax: header_filter_by_php
<php script code>
context: http, server, location, location if
phase: output-header-filter
header_filter_by_php_block
syntax: header_filter_by_php_block
{php script code}
context: location, location if
phase: output-header-filter
body_filter_by_php
syntax: body_filter_by_php
<php script code>
context: http, server, location, location if
phase: output-body-filter
body_filter_by_php_block
syntax: body_filter_by_php_block
{php script code}
context: location, location if
phase: output-body-filter
php_keepalive
syntax: php_keepalive
<size>
default: 0
context: http, server
In php, set upstream connection pool size.
php_set
syntax: php_set
$variable
<php script code>
context: http, server, location, location if
phase: loading-config
Installs a php handler for the specified variable.
php_socket_keepalive
syntax: php_socket_keepalive
<size>
default: 0
context: http, server
php_socket_buffer_size
syntax: php_socket_buffer_size
<size>
default: 4k
context: http, server, location, location if
Nginx API for php
- ngx_php7
- Table of contents
- 官方php有什么不同
- 运行条件
- 安装
- 编译安装
- CentOS / RedHat 7
- Docker
- 概要
- 测试
- 指令
- php_ini_path
- init_worker_by_php
- init_worker_by_php_block
- rewrite_by_php
- rewrite_by_php_block
- access_by_php
- access_by_php_block
- content_by_php
- content_by_php_block
- log_by_php
- log_by_php_block
- header_filter_by_php
- header_filter_by_php_block
- body_filter_by_php
- body_filter_by_php_block
- php_keepalive
- php_set
- php_socket_keepalive
- php_socket_buffer_size
- Nginx API for php
- ngx_exit
- ngx_query_args
- ngx_post_args
- ngx_log_error
- ngx_request_method
- ngx_request_document_root
- ngx_request_document_uri
- ngx_request_script_name
- ngx_request_script_filename
- ngx_request_query_string
- ngx_request_uri
- ngx_request_server_protocol
- ngx_request_remote_addr
- ngx_request_server_addr
- ngx_request_remote_port
- ngx_request_server_port
- ngx_request_server_name
- ngx_request_headers
- ngx_var_get
- ngx_var_set
- ngx_header_set
- ngx_header_get
- ngx_header_gets
- ngx_redirect
- ngx_cookie_get_all
- ngx_cookie_get
- ngx_cookie_set
- Nginx non-blocking API for php
- ngx_sleep
- ngx_msleep
- ngx_socket_create
- ngx_socket_iskeepalive
- ngx_socket_connect
- ngx_socket_close
- ngx_socket_send
- ngx_socket_recv
- ngx_socket_recvpage
- ngx_socket_recvsync
- ngx_socket_clear
- Nginx 常量
- 版本常量
- PHP的日志常量
- PHP的状态常量
- PHP的HTTP状态常量
- 版权和许可
ngx_exit
syntax: ngx_exit(int $status) : void
parameters:
status: int
context: rewrite_by_php*, access_by_php*, content_by_php*
当前请求结束并返回http状态代码。
ngx_query_args
syntax: ngx_query_args(void) : array
or ngx::query_args(void) : array
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
通过URL参数(即查询字符串)传递给当前脚本的变量的关联数组。
而不是PHP官方常量$ _GET。
ngx_post_args
syntax: ngx_post_args(void) : array
or ngx::post_args(void) : array
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
通过HTTP POST方法传递给当前脚本的变量的关联数组
在请求中使用application / x-www-form-urlencoded或multipart / form-data作为HTTP Content-Type时。
而不是php官方常量$ _POST。
ngx_log_error
syntax: ngx_log_error(int $level, string $log_str) : void
or ngx_log::error(int $level, string $log_str) : void
parameters:
level: int
log_str: string
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_request_method
syntax: ngx_request_method(void) : string
or ngx_request::method(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
使用哪种请求方法来访问页面,例如“ GET”,“ POST”,“ PUT”,“ DELETE”等等。
ngx_request_document_root
syntax: ngx_request_document_root(void) : string
or ngx_request::document_root(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
服务器配置文件中定义的当前脚本正在其下执行的文档根目录。
ngx_request_document_uri
syntax: ngx_request_document_uri(void) : string
or ngx_request::document_uri(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_request_script_name
syntax: ngx_request_script_name(void) : string
or ngx_request::script_name(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
包含当前脚本的路径。 这对于需要指向自身的页面很有用。
__FILE__常量包含当前(包含)文件的完整路径和文件名。
ngx_request_script_filename
syntax: ngx_request_script_filename(void) : string
or ngx_request::script_filename(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
当前正在执行的脚本文件名的绝对路径名。
ngx_request_query_string
syntax: ngx_request_query_string(void) : string
or ngx_request::query_string(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
用于访问页面的查询字符串(如果有)。
ngx_request_uri
syntax: ngx_request_uri(void) : string
or ngx_request::uri(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
为了访问该页面而给出的URI,例如'/index.html'。
ngx_request_server_protocol
syntax: ngx_request_server_protocol(void) : string
or ngx_request::server_protocol(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
通过其请求页面的信息协议的名称和修订,例如“ HTTP / 1.0”。
ngx_request_remote_addr
syntax: ngx_request_remote_addr(void) : string
or ngx_request::remote_addr(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
用户正在从中查看当前页面的IP地址。
ngx_request_server_addr
syntax: ngx_request_server_addr(void) : string
or ngx_request::server_addr(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
当前脚本正在其下执行的服务器的IP地址。
ngx_request_remote_port
syntax: ngx_request_remote_port(void) : int
or ngx_request::remote_port(void) : int
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
用户计算机上用于与Web服务器通信的端口。
ngx_request_server_port
syntax: ngx_request_server_port(void) : int
or ngx_request::server_port(void) : int
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
Web服务器用于通信的服务器计算机上的端口。 对于默认设置,
这将是"80"; 例如,使用SSL会将其更改为您定义的安全HTTP端口。
ngx_request_server_name
syntax: ngx_request_server_name(void) : string
or ngx_request::server_name(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
正在执行当前脚本的服务器主机的名称。
如果脚本在虚拟主机上运行,则将是为该虚拟主机定义的值。
ngx_request_headers
syntax: ngx_request_headers(void): array
or ngx_request::headers(void) : array
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
获取http请求的标头完整信息。
ngx_var_get
syntax: ngx_var_get(string $key) : string
or ngx_var::get(string $key) : string
parameters:
key: string
context: rewrite_by_php*, access_by_php*, content_by_php*
在nginx配置中获取变量。
ngx_var_set
syntax: ngx_var_set(string $key, string $value) : void
or ngx_var::set(string $key, string $value) : void
parameters:
key: string
value: string
context: rewrite_by_php*, access_by_php*, content_by_php*
在nginx配置中设置变量。
ngx_header_set
syntax: ngx_header_set(string $key, string $value) : bool
parameters:
key: string
value: string
context: rewrite_by_php*, access_by_php*, content_by_php*
设置http响应的头信息。
ngx_header_get
syntax: ngx_header_get(string $key) : string
parameters:
key: string
context: rewrite_by_php*, access_by_php*, content_by_php*
获取http响应的头信息。
ngx_header_gets
syntax: ngx_header_gets(void) : array
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
获取http响应的标头完整信息。
ngx_redirect
syntax: ngx_redirect(string $uri, int $status) : bool
parameters:
uri: string
status: int
context: rewrite_by_php*, access_by_php*, content_by_php*
设置响应头重定向。
ngx_cookie_get_all
syntax: ngx_cookie_get_all(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_cookie_get
syntax: ngx_cookie_get(string $key) : string
parameters:
key: string
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_cookie_set
syntax: ngx_cookie_set(string $data): bool
parameters:
data: string
context: rewrite_by_php*, access_by_php*, content_by_php*
Nginx non-blocking API for php
- yield ngx_sleep
- yield ngx_msleep
- ngx_socket_create
- ngx_socket_iskeepalive
- yield ngx_socket_connect
- yield ngx_socket_close
- yield ngx_socket_send
- yield ngx_socket_recv
- yield ngx_socket_recvpage
- ngx_socket_recvsync
- ngx_socket_clear
ngx_sleep
syntax: yield ngx_sleep(int seconds)
parameters:
secodes: int
context: rewrite_by_php*, access_by_php*, content_by_php*
将程序执行延迟给定的秒数。
ngx_msleep
syntax: yield ngx_msleep(int milliseconds)
parameters:
milliseconds: int
context: rewrite_by_php*, access_by_php*, content_by_php*
将程序执行延迟给定的毫秒数。
ngx_socket_create
syntax: ngx_socket_create(int $domain, int $type, int $protocol) : resource
parameters:
domain: int
type: int
protocol: int
context: rewrite_by_php*, access_by_php*, content_by_php*
创建并返回套接字资源,也称为通信的端点。
典型的网络连接由2个套接字组成,其中一个充当客户端的角色,
另一个执行服务器的角色。
ngx_socket_iskeepalive
syntax: ngx_socket_iskeepalive(void) : bool
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_socket_connect
syntax: ( yield ngx_socket_connect(resource $socket, string $address, int $port) ) : bool
parameters:
socket: resource
address: string
port: int
context: rewrite_by_php*, access_by_php*, content_by_php*
使用套接字资源套接字启动到地址的连接,该套接字必须是有效的
使用ngx_socket_create()创建的套接字资源。
ngx_socket_close
syntax: ( yield ngx_socket_close(resource $socket) ) : bool
parameters:
socket: resource
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_socket_close()关闭套接字给定的套接字资源。 此功能特定于
套接字,不能在任何其他类型的资源上使用。
ngx_socket_send
syntax: ( yield ngx_socket_send(resource $socket, string $buf, int $len) ) : int
parameters:
socket: resource
buf: string
len: int
context: rewrite_by_php*, access_by_php*, content_by_php*
函数ngx_socket_send()将len个字节从buf发送到套接字套接字。
ngx_socket_recv
syntax: ( yield ngx_socket_recv(resource $socket, string &$buf, int $len) ) : int
parameters:
socket: resource
buf: string
len: int
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_socket_recv()函数从套接字接收buf中的len字节数据。 ngx_socket_recv()可以是
用于从连接的套接字收集数据。
buf通过引用传递,因此必须在参数列表中将其指定为变量。
ngx_socket_recv()从套接字读取的数据将以buf返回。
ngx_socket_recvpage
syntax: ( yield ngx_socket_recvpage(resource $socket, string &$buf, int &$rc) ) : int
parameters:
socket: resource
buf: string
rc: int
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_socket_recvsync
syntax: ngx_socket_recvsync(resource $socket, string &$buf, int $len) : int
parameters:
socket: resource
buf: string
len: int
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_socket_clear
syntax: ngx_socket_recv(resource $socket) : bool
parameters:
socket: resource
context: rewrite_by_php*, access_by_php*, content_by_php*
Close the socket resource and is blocking but hight performance.
Nginx 常量
- version constants
- log constants for php
- status constants for php
- http status constants for php
版本常量
name | value |
---|---|
NGINX_VAR | NGINX |
NGINX_VERSION | 1.12.2 |
NGX_HTTP_PHP_MODULE_VERSION | 0.0.21 |
NGX_HTTP_PHP_MODULE_NAME | ngx_php |
PHP的日志常量
name | value |
---|---|
NGX_OK | 0 |
NGX_ERROR | -1 |
NGX_AGAIN | -2 |
NGX_BUSY | -3 |
NGX_DONE | -4 |
NGX_DECLINED | -5 |
NGX_ABORT | -6 |
PHP的状态常量
name | value |
---|---|
NGX_LOG_STDERR | 0 |
NGX_LOG_EMERG | 1 |
NGX_LOG_ALERT | 2 |
NGX_LOG_CRIT | 3 |
NGX_LOG_ERR | 4 |
NGX_LOG_WARN | 5 |
NGX_LOG_NOTICE | 6 |
NGX_LOG_INFO | 7 |
NGX_LOG_DEBUG | 8 |
PHP的HTTP状态常量
name | value |
---|---|
NGX_HTTP_CONTINUE | 100 |
NGX_HTTP_SWITCHING_PROTOCOLS | 101 |
NGX_HTTP_PROCESSING | 102 |
NGX_HTTP_OK | 200 |
NGX_HTTP_CREATED | 201 |
NGX_HTTP_ACCEPTED | 202 |
NGX_HTTP_NO_CONTENT | 204 |
NGX_HTTP_PARTIAL_CONTENT | 206 |
NGX_HTTP_SPECIAL_RESPONSE | 300 |
NGX_HTTP_MOVED_PERMANENTLY | 301 |
NGX_HTTP_MOVED_TEMPORARILY | 302 |
NGX_HTTP_SEE_OTHER | 303 |
NGX_HTTP_NOT_MODIFIED | 304 |
NGX_HTTP_TEMPORARY_REDIRECT | 307 |
NGX_HTTP_PERMANENT_REDIRECT | 308 |
NGX_HTTP_BAD_REQUEST | 400 |
NGX_HTTP_UNAUTHORIZED | 401 |
NGX_HTTP_FORBIDDEN | 403 |
NGX_HTTP_NOT_FOUND | 404 |
NGX_HTTP_NOT_ALLOWED | 405 |
NGX_HTTP_REQUEST_TIME_OUT | 408 |
NGX_HTTP_CONFLICT | 409 |
NGX_HTTP_LENGTH_REQUIRED | 411 |
NGX_HTTP_PRECONDITION_FAILED | 412 |
NGX_HTTP_REQUEST_ENTITY_TOO_LARGE | 413 |
NGX_HTTP_REQUEST_URI_TOO_LARGE | 414 |
NGX_HTTP_UNSUPPORTED_MEDIA_TYPE | 415 |
NGX_HTTP_RANGE_NOT_SATISFIABLE | 416 |
NGX_HTTP_CLOSE | 444 |
NGX_HTTP_NGINX_CODES | 494 |
NGX_HTTP_REQUEST_HEADER_TOO_LARGE | 494 |
NGX_HTTPS_CERT_ERROR | 495 |
NGX_HTTPS_NO_CERT | 496 |
NGX_HTTP_TO_HTTPS | 497 |
NGX_HTTP_CLIENT_CLOSED_REQUEST | 499 |
NGX_HTTP_INTERNAL_SERVER_ERROR | 500 |
NGX_HTTP_NOT_IMPLEMENTED | 501 |
NGX_HTTP_BAD_GATEWAY | 502 |
NGX_HTTP_SERVICE_UNAVAILABLE | 503 |
NGX_HTTP_GATEWAY_TIME_OUT | 504 |
NGX_HTTP_INSUFFICIENT_STORAGE | 507 |
版权和许可
Copyright (c) 2016-2020, rryqszq4 <rryqszq@gmail.com>
All rights reserved.Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:* Redistributions of source code must retain the above copyright notice, thislist of conditions and the following disclaimer.* Redistributions in binary form must reproduce the above copyright notice,this list of conditions and the following disclaimer in the documentationand/or other materials provided with the distribution.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ngx_php7
ngx_php7是高性能Web服务器nginx的扩展模块,它实现嵌入式php7脚本来处理nginx的位置和变量。
ngx_php7借鉴ngx_lua的设计,并致力于提供比php-cgi,mod_php,php-fpm,和hhvm具有显着性能优势的非阻塞Web服务。
ngx_php7不想替换任何东西,只想提供一个解决方案。
有ngx_php5的旧版,它记录了我过去的一些代码实践,也很有价值。
ngx_php7 and php 的性能测试
Table of contents
- 官方php有什么不同
- 运行条件
- 安装
- 概要
- 测试
- 指令
- Nginx API for php
- Nginx non-blocking API for php
- Nginx 常量
- 版权和许可
官方php有什么不同
- 全局变量在每个请求中都不安全
- 类的静态变量在每个请求中都不安全
- 不要设计单例模式
- 本机IO功能可以正常工作,但是会减慢Nginx的速度
运行条件
- 仅支持 Linux
- PHP-7.0.* ~ PHP-7.4.*
- nginx-1.4.7 ~ nginx-1.17.8
安装
编译安装
$ wget 'http://php.net/distributions/php-7.3.10.tar.gz'
$ tar xf php-7.3.10.tar.gz
$ cd php-7.3.10$ ./configure --prefix=/path/to/php --enable-embed
$ make && make install$ git clone https://github.com/rryqszq4/ngx_php7.git$ wget 'http://nginx.org/download/nginx-1.12.2.tar.gz'
$ tar -zxvf nginx-1.12.2.tar.gz
$ cd nginx-1.12.2$ export PHP_CONFIG=/path/to/php/bin/php-config
$ export PHP_BIN=/path/to/php/bin
$ export PHP_INC=/path/to/php/include/php
$ export PHP_LIB=/path/to/php/lib$ ./configure --user=www --group=www \
$ --prefix=/path/to/nginx \
$ --with-ld-opt="-Wl,-rpath,$PHP_LIB" \
$ --add-module=/path/to/ngx_php7/third_party/ngx_devel_kit \
$ --add-module=/path/to/ngx_php7
$ make && make install
CentOS / RedHat 7
yum -y install https://extras.getpagespeed.com/release-el7-latest.rpm
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm yum-utils
yum-config-manager --enable remi-php73
yum install nginx-module-php7
编辑 nginx.conf
并在顶部加载所需的模块:
load_module modules/ndk_http_module.so;
load_module modules/ngx_http_php_module.so;
Docker
$ docker build -t nginx-php7 .
$ : "app.conf: Create nginx config"
$ docker run -p 80:80 -v $PWD/app.conf:/etc/nginx/conf.d/default.conf nginx-php7
概要
worker_processes auto;events {worker_connections 102400;
}http {include mime.types;default_type application/octet-stream;keepalive_timeout 65;client_max_body_size 64k; client_body_buffer_size 64k;php_ini_path /usr/local/php/etc/php.ini;server {listen 80;server_name localhost;default_type 'application/json; charset=UTF-8';location /php {content_by_php_block {echo "hello ngx_php7";}}location = /ngx_request {content_by_php_block {echo ngx_request_document_uri();}}# curl /ngx_get?a=1&b=2location = /ngx_get {content_by_php_block {echo "ngx_query_args()\n";var_dump(ngx_query_args());}}# curl -d 'a=1&b=2' /ngx_postlocation = /ngx_post {content_by_php_block {echo "ngx_post_args()\n";var_dump(ngx_post_args());}}location = /ngx_sleep {content_by_php_block {echo "ngx_sleep start\n";yield ngx_sleep(1);echo "ngx_sleep end\n";}}location = /ngx_socket2 {default_type 'application/json;charset=UTF-8';content_by_php_block {$fd = ngx_socket_create();yield ngx_socket_connect($fd, "hq.sinajs.cn", 80);$send_buf = "GET /list=s_sh000001 HTTP/1.0\r\nHost: hq.sinajs.cn\r\nConnection: close\r\n\r\n";yield ngx_socket_send($fd, $send_buf, strlen($send_buf));$recv_buf = "";yield ngx_socket_recv($fd, $recv_buf);var_dump($recv_buf);yield ngx_socket_close($fd);}}location = /ngx_var {set $a 1234567890;content_by_php_block {$a = ngx_var_get("a");var_dump($a);}}# set content-type of response headerslocation = /ngx_header {content_by_php_block {ngx_header_set("Content-Type", "text/html; charset=UTF-8");}}# run a php filelocation = /php {content_by_php_block {include "name_of_php_file.php";}}# run any php file in rootlocation = / {content_by_php_block {include ngx_var_get("uri");}}}
}
测试
使用Test :: Nginx模块的perl进行测试,搜索和发现ngx_php7中的问题。
ngx_php7 test ...
nginx version: nginx/1.12.2
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
configure arguments: --prefix=/home/travis/build/rryqszq4/ngx_php7/build/nginx --with-ld-opt=-Wl,-rpath,/home/travis/build/rryqszq4/ngx_php7/build/php/lib --add-module=../../../ngx_php7/third_party/ngx_devel_kit --add-module=../../../ngx_php7
t/001-hello.t ..................... ok
t/002-ini.t ....................... ok
t/003-error.t ..................... ok
t/004-ngx_request.t ............... ok
t/005-ngx_log.t ................... ok
t/006-ngx_sleep.t ................. ok
t/007-ngx_socket.t ................ ok
t/008-ngx_exit.t .................. ok
t/009-ngx_query_args.t ............ ok
t/010-ngx_post_args.t ............. ok
t/011-ngx_constants.t ............. ok
t/012-function.t .................. ok
t/013-class.t ..................... ok
t/014-ngx_var.t ................... ok
t/015-ngx_header.t ................ 1/? WARNING: TEST 2: set content-length of response headers - unexpected extra bytes after last chunk in response: "Testing ngx_header!\x{0a}"
t/015-ngx_header.t ................ ok
t/016-rewrite_by_php.t ............ ok
t/017-ngx_redirect.t .............. ok
t/018-ngx_mysql.t ................. ok
t/019-php_set.t ................... ok
t/020-ngx_cookie.t ................ ok
t/021-content_by_php_block.t ...... ok
t/022-init_worker_by_php_block.t .. ok
All tests successful.
Files=22, Tests=84, 14 wallclock secs ( 0.09 usr 0.02 sys + 2.19 cusr 0.43 csys = 2.73 CPU)
Result: PASS
指令
- php_ini_path
- init_worker_by_php
- init_worker_by_php_block
- rewrite_by_php
- rewrite_by_php_block
- access_by_php
- access_by_php_block
- content_by_php
- content_by_php_block
- log_by_php
- log_by_php_block
- header_filter_by_php
- header_filter_by_php_block
- body_filter_by_php
- body_filter_by_php_block
- php_keepalive
- php_set
- php_socket_keepalive
- php_socket_buffer_size
php_ini_path
syntax: php_ini_path
<php.ini file path>
context: http
phase: loading-config
该指令允许加载正式的php配置文件php.ini,该文件将由后续的PHP代码使用。
init_worker_by_php
syntax: init_worker_by_php
<php script code>
context: http
phase: starting-worker
init_worker_by_php_block
syntax: init_worker_by_php_block
{php script code}
context: http
phase: starting-worker
rewrite_by_php
syntax: rewrite_by_php
<php script code>
context: http, server, location, location if
phase: rewrite
In the rewrite phase of nginx, you can execute inline php code.
rewrite_by_php_block
syntax: rewrite_by_php_block
{php script code}
context: location, location if
phase: rewrite
In the rewrite phase of nginx, you can execute inline php code.
access_by_php
syntax: access_by_php
<php script code>
context: http, server, location, location if
phase: access
In the access phase of nginx, you can execute inline php code.
access_by_php_block
syntax: access_by_php_block
{php script code}
context: location, location if
phase: access
In the access phase of nginx, you can execute inline php code.
content_by_php
syntax: content_by_php
<php script code>
context: http, server, location, location if
phase: content
In the content phase of nginx, you can execute inline php code.
content_by_php_block
syntax: content_by_php_block
{php script code}
context: location, location if
phase: content
In the content phase of nginx, you can execute inline php code.
log_by_php
syntax: log_by_php
<php script code>
context: http, server, location, location if
phase: log
log_by_php_block
syntax: log_by_php_block
{php script code}
context: location, location if
phase: log
header_filter_by_php
syntax: header_filter_by_php
<php script code>
context: http, server, location, location if
phase: output-header-filter
header_filter_by_php_block
syntax: header_filter_by_php_block
{php script code}
context: location, location if
phase: output-header-filter
body_filter_by_php
syntax: body_filter_by_php
<php script code>
context: http, server, location, location if
phase: output-body-filter
body_filter_by_php_block
syntax: body_filter_by_php_block
{php script code}
context: location, location if
phase: output-body-filter
php_keepalive
syntax: php_keepalive
<size>
default: 0
context: http, server
In php, set upstream connection pool size.
php_set
syntax: php_set
$variable
<php script code>
context: http, server, location, location if
phase: loading-config
Installs a php handler for the specified variable.
php_socket_keepalive
syntax: php_socket_keepalive
<size>
default: 0
context: http, server
php_socket_buffer_size
syntax: php_socket_buffer_size
<size>
default: 4k
context: http, server, location, location if
Nginx API for php
- ngx_php7
- Table of contents
- 官方php有什么不同
- 运行条件
- 安装
- 编译安装
- CentOS / RedHat 7
- Docker
- 概要
- 测试
- 指令
- php_ini_path
- init_worker_by_php
- init_worker_by_php_block
- rewrite_by_php
- rewrite_by_php_block
- access_by_php
- access_by_php_block
- content_by_php
- content_by_php_block
- log_by_php
- log_by_php_block
- header_filter_by_php
- header_filter_by_php_block
- body_filter_by_php
- body_filter_by_php_block
- php_keepalive
- php_set
- php_socket_keepalive
- php_socket_buffer_size
- Nginx API for php
- ngx_exit
- ngx_query_args
- ngx_post_args
- ngx_log_error
- ngx_request_method
- ngx_request_document_root
- ngx_request_document_uri
- ngx_request_script_name
- ngx_request_script_filename
- ngx_request_query_string
- ngx_request_uri
- ngx_request_server_protocol
- ngx_request_remote_addr
- ngx_request_server_addr
- ngx_request_remote_port
- ngx_request_server_port
- ngx_request_server_name
- ngx_request_headers
- ngx_var_get
- ngx_var_set
- ngx_header_set
- ngx_header_get
- ngx_header_gets
- ngx_redirect
- ngx_cookie_get_all
- ngx_cookie_get
- ngx_cookie_set
- Nginx non-blocking API for php
- ngx_sleep
- ngx_msleep
- ngx_socket_create
- ngx_socket_iskeepalive
- ngx_socket_connect
- ngx_socket_close
- ngx_socket_send
- ngx_socket_recv
- ngx_socket_recvpage
- ngx_socket_recvsync
- ngx_socket_clear
- Nginx 常量
- 版本常量
- log constants for php
- status constants for php
- http status constants for php
- 版权和许可
ngx_exit
syntax: ngx_exit(int $status) : void
parameters:
status: int
context: rewrite_by_php*, access_by_php*, content_by_php*
当前请求结束并返回http状态代码。
ngx_query_args
syntax: ngx_query_args(void) : array
or ngx::query_args(void) : array
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
通过URL参数(即查询字符串)传递给当前脚本的变量的关联数组。
而不是PHP官方常量$ _GET。
ngx_post_args
syntax: ngx_post_args(void) : array
or ngx::post_args(void) : array
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
通过HTTP POST方法传递给当前脚本的变量的关联数组
在请求中使用application / x-www-form-urlencoded或multipart / form-data作为HTTP Content-Type时。
而不是php官方常量$ _POST。
ngx_log_error
syntax: ngx_log_error(int $level, string $log_str) : void
or ngx_log::error(int $level, string $log_str) : void
parameters:
level: int
log_str: string
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_request_method
syntax: ngx_request_method(void) : string
or ngx_request::method(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
使用哪种请求方法来访问页面,例如“ GET”,“ POST”,“ PUT”,“ DELETE”等等。
ngx_request_document_root
syntax: ngx_request_document_root(void) : string
or ngx_request::document_root(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
服务器配置文件中定义的当前脚本正在其下执行的文档根目录。
ngx_request_document_uri
syntax: ngx_request_document_uri(void) : string
or ngx_request::document_uri(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_request_script_name
syntax: ngx_request_script_name(void) : string
or ngx_request::script_name(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
包含当前脚本的路径。 这对于需要指向自身的页面很有用。
__FILE__常量包含当前(包含)文件的完整路径和文件名。
ngx_request_script_filename
syntax: ngx_request_script_filename(void) : string
or ngx_request::script_filename(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
当前正在执行的脚本文件名的绝对路径名。
ngx_request_query_string
syntax: ngx_request_query_string(void) : string
or ngx_request::query_string(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
用于访问页面的查询字符串(如果有)。
ngx_request_uri
syntax: ngx_request_uri(void) : string
or ngx_request::uri(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
为了访问该页面而给出的URI,例如'/index.html'。
ngx_request_server_protocol
syntax: ngx_request_server_protocol(void) : string
or ngx_request::server_protocol(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
通过其请求页面的信息协议的名称和修订,例如“ HTTP / 1.0”。
ngx_request_remote_addr
syntax: ngx_request_remote_addr(void) : string
or ngx_request::remote_addr(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
用户正在从中查看当前页面的IP地址。
ngx_request_server_addr
syntax: ngx_request_server_addr(void) : string
or ngx_request::server_addr(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
当前脚本正在其下执行的服务器的IP地址。
ngx_request_remote_port
syntax: ngx_request_remote_port(void) : int
or ngx_request::remote_port(void) : int
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
用户计算机上用于与Web服务器通信的端口。
ngx_request_server_port
syntax: ngx_request_server_port(void) : int
or ngx_request::server_port(void) : int
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
Web服务器用于通信的服务器计算机上的端口。 对于默认设置,
这将是"80"; 例如,使用SSL会将其更改为您定义的安全HTTP端口。
ngx_request_server_name
syntax: ngx_request_server_name(void) : string
or ngx_request::server_name(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
正在执行当前脚本的服务器主机的名称。
如果脚本在虚拟主机上运行,则将是为该虚拟主机定义的值。
ngx_request_headers
syntax: ngx_request_headers(void): array
or ngx_request::headers(void) : array
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
获取http请求的标头完整信息。
ngx_var_get
syntax: ngx_var_get(string $key) : string
or ngx_var::get(string $key) : string
parameters:
key: string
context: rewrite_by_php*, access_by_php*, content_by_php*
在nginx配置中获取变量。
ngx_var_set
syntax: ngx_var_set(string $key, string $value) : void
or ngx_var::set(string $key, string $value) : void
parameters:
key: string
value: string
context: rewrite_by_php*, access_by_php*, content_by_php*
在nginx配置中设置变量。
ngx_header_set
syntax: ngx_header_set(string $key, string $value) : bool
parameters:
key: string
value: string
context: rewrite_by_php*, access_by_php*, content_by_php*
设置http响应的头信息。
ngx_header_get
syntax: ngx_header_get(string $key) : string
parameters:
key: string
context: rewrite_by_php*, access_by_php*, content_by_php*
获取http响应的头信息。
ngx_header_gets
syntax: ngx_header_gets(void) : array
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
获取http响应的标头完整信息。
ngx_redirect
syntax: ngx_redirect(string $uri, int $status) : bool
parameters:
uri: string
status: int
context: rewrite_by_php*, access_by_php*, content_by_php*
设置响应头重定向。
ngx_cookie_get_all
syntax: ngx_cookie_get_all(void) : string
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_cookie_get
syntax: ngx_cookie_get(string $key) : string
parameters:
key: string
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_cookie_set
syntax: ngx_cookie_set(string $data): bool
parameters:
data: string
context: rewrite_by_php*, access_by_php*, content_by_php*
Nginx non-blocking API for php
- yield ngx_sleep
- yield ngx_msleep
- ngx_socket_create
- ngx_socket_iskeepalive
- yield ngx_socket_connect
- yield ngx_socket_close
- yield ngx_socket_send
- yield ngx_socket_recv
- yield ngx_socket_recvpage
- ngx_socket_recvsync
- ngx_socket_clear
ngx_sleep
syntax: yield ngx_sleep(int seconds)
parameters:
secodes: int
context: rewrite_by_php*, access_by_php*, content_by_php*
将程序执行延迟给定的秒数。
ngx_msleep
syntax: yield ngx_msleep(int milliseconds)
parameters:
milliseconds: int
context: rewrite_by_php*, access_by_php*, content_by_php*
将程序执行延迟给定的毫秒数。
ngx_socket_create
syntax: ngx_socket_create(int $domain, int $type, int $protocol) : resource
parameters:
domain: int
type: int
protocol: int
context: rewrite_by_php*, access_by_php*, content_by_php*
创建并返回套接字资源,也称为通信的端点。
典型的网络连接由2个套接字组成,其中一个充当客户端的角色,
另一个执行服务器的角色。
ngx_socket_iskeepalive
syntax: ngx_socket_iskeepalive(void) : bool
parameters:
void
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_socket_connect
syntax: ( yield ngx_socket_connect(resource $socket, string $address, int $port) ) : bool
parameters:
socket: resource
address: string
port: int
context: rewrite_by_php*, access_by_php*, content_by_php*
使用套接字资源套接字启动到地址的连接,该套接字必须是有效的
使用ngx_socket_create()创建的套接字资源。
ngx_socket_close
syntax: ( yield ngx_socket_close(resource $socket) ) : bool
parameters:
socket: resource
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_socket_close()关闭套接字给定的套接字资源。 此功能特定于
套接字,不能在任何其他类型的资源上使用。
ngx_socket_send
syntax: ( yield ngx_socket_send(resource $socket, string $buf, int $len) ) : int
parameters:
socket: resource
buf: string
len: int
context: rewrite_by_php*, access_by_php*, content_by_php*
函数ngx_socket_send()将len个字节从buf发送到套接字套接字。
ngx_socket_recv
syntax: ( yield ngx_socket_recv(resource $socket, string &$buf, int $len) ) : int
parameters:
socket: resource
buf: string
len: int
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_socket_recv()函数从套接字接收buf中的len字节数据。 ngx_socket_recv()可以是
用于从连接的套接字收集数据。
buf通过引用传递,因此必须在参数列表中将其指定为变量。
ngx_socket_recv()从套接字读取的数据将以buf返回。
ngx_socket_recvpage
syntax: ( yield ngx_socket_recvpage(resource $socket, string &$buf, int &$rc) ) : int
parameters:
socket: resource
buf: string
rc: int
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_socket_recvsync
syntax: ngx_socket_recvsync(resource $socket, string &$buf, int $len) : int
parameters:
socket: resource
buf: string
len: int
context: rewrite_by_php*, access_by_php*, content_by_php*
ngx_socket_clear
syntax: ngx_socket_recv(resource $socket) : bool
parameters:
socket: resource
context: rewrite_by_php*, access_by_php*, content_by_php*
Close the socket resource and is blocking but hight performance.
Nginx 常量
- version constants
- log constants for php
- status constants for php
- http status constants for php
版本常量
name | value |
---|---|
NGINX_VAR | NGINX |
NGINX_VERSION | 1.12.2 |
NGX_HTTP_PHP_MODULE_VERSION | 0.0.21 |
NGX_HTTP_PHP_MODULE_NAME | ngx_php |
log constants for php
name | value |
---|---|
NGX_OK | 0 |
NGX_ERROR | -1 |
NGX_AGAIN | -2 |
NGX_BUSY | -3 |
NGX_DONE | -4 |
NGX_DECLINED | -5 |
NGX_ABORT | -6 |
status constants for php
name | value |
---|---|
NGX_LOG_STDERR | 0 |
NGX_LOG_EMERG | 1 |
NGX_LOG_ALERT | 2 |
NGX_LOG_CRIT | 3 |
NGX_LOG_ERR | 4 |
NGX_LOG_WARN | 5 |
NGX_LOG_NOTICE | 6 |
NGX_LOG_INFO | 7 |
NGX_LOG_DEBUG | 8 |
http status constants for php
name | value |
---|---|
NGX_HTTP_CONTINUE | 100 |
NGX_HTTP_SWITCHING_PROTOCOLS | 101 |
NGX_HTTP_PROCESSING | 102 |
NGX_HTTP_OK | 200 |
NGX_HTTP_CREATED | 201 |
NGX_HTTP_ACCEPTED | 202 |
NGX_HTTP_NO_CONTENT | 204 |
NGX_HTTP_PARTIAL_CONTENT | 206 |
NGX_HTTP_SPECIAL_RESPONSE | 300 |
NGX_HTTP_MOVED_PERMANENTLY | 301 |
NGX_HTTP_MOVED_TEMPORARILY | 302 |
NGX_HTTP_SEE_OTHER | 303 |
NGX_HTTP_NOT_MODIFIED | 304 |
NGX_HTTP_TEMPORARY_REDIRECT | 307 |
NGX_HTTP_PERMANENT_REDIRECT | 308 |
NGX_HTTP_BAD_REQUEST | 400 |
NGX_HTTP_UNAUTHORIZED | 401 |
NGX_HTTP_FORBIDDEN | 403 |
NGX_HTTP_NOT_FOUND | 404 |
NGX_HTTP_NOT_ALLOWED | 405 |
NGX_HTTP_REQUEST_TIME_OUT | 408 |
NGX_HTTP_CONFLICT | 409 |
NGX_HTTP_LENGTH_REQUIRED | 411 |
NGX_HTTP_PRECONDITION_FAILED | 412 |
NGX_HTTP_REQUEST_ENTITY_TOO_LARGE | 413 |
NGX_HTTP_REQUEST_URI_TOO_LARGE | 414 |
NGX_HTTP_UNSUPPORTED_MEDIA_TYPE | 415 |
NGX_HTTP_RANGE_NOT_SATISFIABLE | 416 |
NGX_HTTP_CLOSE | 444 |
NGX_HTTP_NGINX_CODES | 494 |
NGX_HTTP_REQUEST_HEADER_TOO_LARGE | 494 |
NGX_HTTPS_CERT_ERROR | 495 |
NGX_HTTPS_NO_CERT | 496 |
NGX_HTTP_TO_HTTPS | 497 |
NGX_HTTP_CLIENT_CLOSED_REQUEST | 499 |
NGX_HTTP_INTERNAL_SERVER_ERROR | 500 |
NGX_HTTP_NOT_IMPLEMENTED | 501 |
NGX_HTTP_BAD_GATEWAY | 502 |
NGX_HTTP_SERVICE_UNAVAILABLE | 503 |
NGX_HTTP_GATEWAY_TIME_OUT | 504 |
NGX_HTTP_INSUFFICIENT_STORAGE | 507 |
版权和许可
nginx-php类似nginx-lua的扩展,nginx-php中文开发文档相关推荐
- luajit开发文档中文版(二)LuaJIT扩展
2022年6月10日15:33:04 luajit开发文档中文版(一)下载和安装 luajit开发文档中文版(二)LuaJIT扩展 luajit开发文档中文版(三)FAQ 常见问题 luajit开发文 ...
- luajit开发文档wiki中文版(二) LuaJIT 扩展
2022年6月9日09:39:53 luajit开发文档中文版(一)下载和安装 luajit开发文档中文版(二)LuaJIT扩展 luajit开发文档中文版(三)FAQ 常见问题 luajit开发文档 ...
- xxx.nginx转发+OpenResty(nginx升级版)_web服务器+lua
看上图,鼠标右键-在新标签中打开图片食用 内容分为三部分: nginx转发 OpenResty(nginx升级版)_web服务器+lua 测试 1.nginx转发 1.1.搭建nginx 略: 翻阅其 ...
- V3_Chrome扩展中文翻译文档V3目录
本系列文章是Chrome开发者网站扩展程序开发文档V3的中文译文,英文文档链接: Chrome Developers - Extensions.译者为博主自己. 目录 V3 01_Welcome 「欢 ...
- 给lnmp一键包中的nginx安装openresty的lua扩展
lnmp一键包(https://lnmp.org)本人在使用之后发现确实好用,能帮助我们快速搭建起lnmp.lamp和lnmpa的web生产环境,因此推荐大家可以多试试.但有的朋友可能需要使用open ...
- Nginx安装配置(lua全模块、GEOIP、加入系统服务)---无坑安装
nginx安装一般两种:A下载安装包安装.B直接yum在线安装 A:在线安装是最简便的,如果只需基本的web和转发服务就别往下看,直接[yum install nginx],少折腾,稳定才是王道. B ...
- Java扩展Nginx之二:编译nginx-clojure源码
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 为什么要编译nginx-clojure源码 作为< ...
- 《精通Nginx》——1.2 从源代码安装Nginx
本节书摘来自异步社区<精通Nginx>一书中的第1章,第1.2节,作者: [瑞士]Dimitri Aivaliotis 更多章节内容可以访问云栖社区"异步社区"公众号查 ...
- Nginx安装、默认虚拟主机、Nginx用户认证、Nginx域名重定向
12.6 Nginx安装 安装包下载到/usr/local/src目录 [root@taoyuan ~]# cd /usr/local/src [root@taoyuan src]# wget htt ...
最新文章
- 【codeforces 812C】Sagheer and Nubian Market
- 六年磨一剑 Novell转身云计算架构供应商
- DELPHI设置枚举类型size
- C语言标准库stdlib.h
- linux httpd 支持php配置,Linux9.5 配置httpd支持php
- linux kworker cpu,Kworker,它是什么,为什么它占用这么多 CPU?
- (转)对冲基金投身“另类数据”淘金热
- cad的php文件怎么用,CAD无法弹出打开、保存等窗口,用FILEDIA解决
- EI的检索方法快速检索(Quick Search)
- 常用的网络进行广告推广的落实措施都有哪些渠道呢
- 微信支付服务器请求错误,windows系统下微信支付调用出错 msxml3.dll
- JDK1.8和JDK1.7的HashMap源码分析以及线程不安全问题
- 49. 把字符串转换成整数
- Tomcat安装及配置详解
- 【python 笔记/小白快速入门python】python浅谈(一)犹抱琵琶半遮面
- 数字IC笔记-scan chain 压缩和解压缩
- Apache ECharts快速入门
- ->在C语言或C++中的含义
- 关于当代大学生娱乐活动的调查
- 2 files found with path ‘lib/armeabi-v7a/libavcodec.so‘ from inputs: