Home >Backend Development >PHP Tutorial >Nginx version of 'helloworld'

Nginx version of 'helloworld'

WBOY
WBOYOriginal
2016-08-10 08:48:381673browse

Nginx module overview

Nginx modules cannot be added dynamically like Apache. All modules must be pre-compiled into the Nginx binary executable file.
Nginx modules have three roles:
(1) Handlers (processing module) – used to process HTTP requests and output content.
(2) Filters (filter module) – used to filter the content output by the Headler.
(3) Load-balancers (load balancing module) – When there are multiple servers to choose from, select a back-end server and forward the HTTP request to that server.

hello world module writing and installation

(1) Execute the following command to write our Nginx module in this directory:
mkdir -p /opt/nginx_hello_world
cd /opt/nginx_hello_world
(2) Start creating the configuration file required for the nginx module (named config)
vim /opt/nginx_hello_world
Then enter the following content to save and exit:

<code>ngx_sdd
HTTP_MODULES=<span>"<span>$HTTP_MODULES</span> ngx_http_hello_world_module"</span>
NGX_ADD>"<span>$NGX_ADDON_SRCS</span><span>$ngx_addon_dir</span>/ngx_http_hello_world_module.c"
CORE_LIBS=<span>"<span>$CORE_LIBS</span> -lpcre"</span></code>

(3) Create Nginx module c program file (the format is "ngx_http_module name_module.c", in this case: ngx_http_hello_world_module.c)
vim /opt/nginx_hello_world /ngx_http_hello_world_module.c

<code><span>#include <ngx_config.h></span><span>#include<ngx_core.h></span><span>#include<ngx_http.h></span><span>static</span><span>char</span> *ngx_http_hello_world(ngx_conf_t *cf,ngx_command_t *cmd,<span>void</span> *conf);

<span>static</span> ngx_command_t ngx_http_hello_world_commands[]={
{
ngx_string(<span>"hello_world"</span>),
NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
ngx_http_hello_world,
<span>0</span>,
<span>0</span>,
<span>NULL</span>
},
ngx_null_command
};

<span>static</span> u_char ngx_hello_world[]=<span>"hello world"</span>;
<span>static</span> ngx_http_module_t ngx_http_hello_world_module_ctx ={
<span>NULL</span>,
<span>NULL</span>,

<span>NULL</span>,
<span>NULL</span>,

<span>NULL</span>,
<span>NULL</span>,

<span>NULL</span>,
<span>NULL</span>
};
ngx_module_t ngx_http_hello_world_module ={
NGX_MODULE_V1,
&ngx_http_hello_world_module_ctx,
ngx_http_hello_world_commands,
NGX_HTTP_MODULE,
<span>NULL</span>,
<span>NULL</span>,
<span>NULL</span>,
<span>NULL</span>,
<span>NULL</span>,
<span>NULL</span>,
<span>NULL</span>,
NGX_MODULE_V1_PADDING
};

<span>static</span> ngx_int_t ngx_http_hello_world_handler(ngx_http_request_t *r)
{
ngx_buf_t *b;
ngx_chain_t out;

r->headers_out<span>.content_type</span><span>.len</span> = <span>sizeof</span>(<span>"text/plain"</span>) - <span>1</span>;
r->headers_out<span>.content_type</span><span>.data</span> = (u_char *)<span>"text/plain"</span> ;

b= ngx_pcalloc(r->pool,<span>sizeof</span>(ngx_buf_t));

out<span>.buf</span> =b;
out<span>.next</span> =<span>NULL</span>;

b->pos=ngx_hello_world;
b->last =ngx_hello_world +<span>sizeof</span>(ngx_hello_world);
b->memory =<span>1</span>;
b->last_buf =<span>1</span>;

r->headers_out<span>.status</span> = NGX_HTTP_OK;
r->headers_out<span>.content_length_n</span> =<span>sizeof</span>(ngx_hello_world);
ngx_http_send_header(r);

<span>return</span> ngx_http_output_filter(r,&out);
}
<span>static</span><span>char</span> *ngx_http_hello_world(ngx_conf_t *cf,ngx_command_t *cmd, <span>void</span> *conf)
{ngx_http_core_loc_conf_t *clcf;
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
clcf->handler = ngx_http_hello_world_handler;
<span>return</span> NGX_CONF_OK;

}</code>

(4) Refer to my nginx installation article. The Nginx installation blog is slightly different in this step
**./configure –prefix=/usr/local/nginx –add-module=/opt/nginx_hello_world
make&&make install**
(5) Configure nginx.conf (/usr/local/nginx/conf/nginx.conf) and add the following content to the server part:
**location = /hello{
hello_world;
}**
(6) Start Nginx, (start Nginx), use a browser to access http://localhost/hello, you can see the text "hello world" output by the written Nginx Hello World module.

The next article is code analysis

Copyright statement: This article is an original article by the blogger and may not be reproduced without the permission of the blogger.

The above introduces the Nginx version of "helloworld", including various aspects. I hope it will be helpful to friends who are interested in PHP tutorials.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn