ホームページ > バックエンド開発 > PHPチュートリアル > Nginx バージョンの「helloworld」

Nginx バージョンの「helloworld」

WBOY
リリース: 2016-08-10 08:48:38
オリジナル
1690 人が閲覧しました

Nginx モジュールの概要

Nginx モジュールは、Apache のように動的に追加できません。すべてのモジュールを Nginx バイナリ実行可能ファイルに事前にコンパイルする必要があります。
Nginx モジュールには 3 つの役割があります:
(1) ハンドラー (処理モジュール) – HTTP リクエストを処理し、コンテンツを出力するために使用されます。
(2) フィルター (フィルター モジュール) – ヘッドラーによって出力されたコンテンツをフィルターするために使用されます。
(3) ロードバランサー (負荷分散モジュール) – 複数のサーバーから選択できる場合、バックエンド サーバーを選択し、HTTP リクエストをそのサーバーに転送します。

hello world モジュールの作成とインストール

(1) 次のコマンドを実行して、このディレクトリに Nginx モジュールを書き込みます:
mkdir -p /opt/nginx_hello_world
cd /opt/nginx_hello_world
(2) nginx モジュールに必要な設定ファイル (config という名前) の作成を開始します
vim /opt/nginx_hello_world
次に、次の内容を入力して保存して終了します:

<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) Nginx モジュール C プログラム ファイルを作成します (形式は「ngx_http_モジュール名_module.c」、この場合: 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) 私の nginx インストールの記事を参照してください。Nginx インストールのブログでは、この手順が少し異なります
。 **./configure –prefix=/usr/local/nginx –add-module=/opt/nginx_hello_world
メイク&&メイクインストール**
(5) nginx.conf (/usr/local/nginx/conf/nginx.conf) を設定し、サーバー部分に以下の内容を追加します。 **場所 = /hello{
こんにちは_世界
}**
(6) Nginx を起動し (Nginx を起動)、ブラウザを使用して http://localhost/hello にアクセスすると、記述された Nginx Hello World モジュールによって出力されたテキスト「hello world」が表示されます。

次の記事はコード解析です

著作権表示: この記事はブロガーによるオリジナル記事であり、ブロガーの許可なしに転載することはできません。

上記では、Nginx バージョンの「helloworld」をさまざまな側面を含めて紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート