ÔõÑùʵÏÖNginxµÄ¶¯Ì¬Ä£¿é¼ÓÔØÉèÖÃ
NginxÊÇÒ»¿î¸ßÐÔÄܵÄWebЧÀÍÆ÷ºÍ·´ÏòÊðÀíÈí¼þ£¬×î½üÐû²¼µÄNginx°æ±¾1.9.11¼°ÒÔºóµÄ°æ±¾Ö§³ÖÁ˶¯Ì¬Ä£¿éµÄ¼ÓÔØ¡£ÕâÒ»ÐÂÌØÕ÷ʹµÃÓû§Äܹ»ÔÚ²»ÖØбàÒëºÍÖØÐÂ×°ÖÃNginxµÄÇéÐÎÏ£¬Í¨¹ýÌí¼ÓеĶ¯Ì¬Ä£¿éʵÏÖ¹¦Ð§À©Õ¹ºÍ¶¨ÖÆ»¯¡£±¾ÎĽ«ÏÈÈÝÔõÑùÔÚNginxÖÐʵÏÖ¶¯Ì¬Ä£¿é¼ÓÔØÉèÖ㬲¢¸ø³öÏêϸµÄ´úÂëʾÀý¡£
Nginx¶¯Ì¬Ä£¿é¼ÓÔصÄÔÀíÊÇͨ¹ýÒ»¸öеıàÒëģʽ–¡°–add-dynamic-module=module_path¡±À´·¿ª¶Ô¶¯Ì¬Ä£¿éµÄÖ§³Ö¡£ÔÚʹÓÃÕâ¸ö±àÒëģʽʱ£¬±àÒëÌìÉúµÄÊÇÒ»¸ö¶¯Ì¬Á´½Ó¿â(.so)Îļþ£¬Õâ¸ö¶¯Ì¬Á´½Ó¿â¿ÉÒÔÔÚNginxÆô¶¯ÔËÐÐʱ±»¶¯Ì¬¼ÓÔغÍжÔØ¡£Ïà¹ØÓÚ¾²Ì¬Ä£¿é£¬¶¯Ì¬Ä£¿é¾ßÓиüºÃµÄÎÞаÐÔ¡£
ÏÂÃæ¾ÍÊÇÏêϸµÄʵÏÖÒªÁ죺
1.±àд¶¯Ì¬Ä£¿éÔ´Âë
ÒÔʵÏÖÌí¼ÓHeaderÍ·²¿ÎªÀý£¬HeaderÍ·²¿Ö¸µÄÊÇWebÓ¦ÓÃÖÐÇëÇóºÍÏìÓ¦µÄÍ·²¿£¬Nginx×Ô¼º²¢²»ÌṩÌí¼ÓHeaderÍ·²¿µÄ¹¦Ð§£¬µ«¿ÉÒÔͨ¹ý×Ô½ç˵ģ¿éÀ´ÊµÏÖ¡£ÒÔÏ´úÂëÊÇÒ»¸ö¼òÆÓµÄÌí¼ÓHeaderÍ·²¿µÄʾÀý£º
#include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h> static ngx_int_t ngx_http_add_header_handler(ngx_http_request_t *r) { ngx_table_elt_t *h; h = ngx_list_push(&r->headers_out.headers); h->hash = 1; ngx_str_set(&h->key, "MyHeader"); ngx_str_set(&h->value, "Hello Nginx!"); r->headers_out.content_length_n = sizeof("Hello Nginx!") - 1; ngx_http_clear_content_length(r); ngx_http_header_filter(r); ngx_http_send_header(r); return NGX_OK; } static ngx_int_t ngx_http_add_header_init(ngx_conf_t *cf) { ngx_http_handler_pt *h; ngx_http_core_main_conf_t *cmcf; cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module); h = ngx_array_push(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers); if(h == NULL) { return NGX_ERROR; } *h = ngx_http_add_header_handler; return NGX_OK; } static ngx_http_module_t ngx_http_add_header_module_ctx = { NULL, ngx_http_add_header_init, NULL, NULL, NULL, NULL, NULL, NULL }; ngx_module_t ngx_http_add_header_module = { NGX_MODULE_V1, &ngx_http_add_header_module_ctx, NULL, NGX_HTTP_MODULE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NGX_MODULE_V1_PADDING };
µÇ¼ºó¸´ÖÆ
Õâ¶Î´úÂëʵÏÖÁËNginx×Ô½ç˵ģ¿éngx_http_add_header_module£¬Õâ¸ö×Ô½ç˵ģ¿éÓÐÁ½¸öº¯Êýngx_http_add_header_handlerºÍngx_http_add_header_init£¬Ç°ÕßÓÃÀ´ÊµÏÖHeaderÍ·²¿Ìí¼ÓµÄÏêϸÂß¼£¬ºóÕßÓÃÀ´³õʼ»¯Ä£¿é¡£Ã¿¸öÄ£¿é±ØÐè½ç˵һ¸öÄ£¿éÉÏÏÂÎÄngx_http_add_header_module_ctx£¬ÒÔ¼°Ò»¸öngx_module_t½á¹¹Ìå±äÁ¿ngx_http_add_header_module£¬ÆäÖаüÀ¨¸ÃÄ£¿éµÄ°æ±¾ºÅ¡¢ÉÏÏÂÎĵÈÐÅÏ¢¡£
2.±àÒë²¢ÌìÉú¶¯Ì¬Á´½Ó¿â
ʹÓÃÏÂÃæµÄÏÂÁî±àÒë´úÂëÌìÉú¶¯Ì¬Á´½Ó¿â:
./configure --prefix=/usr/local/nginx --add-dynamic-module=./src/http/modules/my_module && make && make install
µÇ¼ºó¸´ÖÆ
Ö´ÐÐÉÏÃæµÄÏÂÁî»áÔÚNginxµÄHTTPÄ£¿éϽ¨Éèmy_moduleĿ¼£¬ÆäÖаüÀ¨×ÅÓÃÀ´¹¹½¨¶¯Ì¬Ä£¿éµÄMakefileÎļþºÍһЩÐëÒªµÄÔ´ÂëºÍÍ·Îļþ£¬ÌìÉúµÄ¶¯Ì¬Á´½Ó¿âÎļþ(.so)ÔÚobjs/Ŀ¼Ï¡£
3.¼ÓÔض¯Ì¬Ä£¿é
ÔÚNginxµÄÉèÖÃÎļþnginx.confÖÐÌí¼ÓÒÔÏ´úÂ룬¼ÓÔض¯Ì¬Á´½Ó¿â£º
load_module modules/ngx_http_add_header_module.so; http { server { listen 80; server_name myweb.com; location / { add_header MyHeader "Hello Nginx!"; root /var/www/html; } } }
µÇ¼ºó¸´ÖÆ
ÔÚhttpÄ£¿éÏÂͨ¹ýload_moduleÖ¸Áî¼ÓÔØngx_http_add_header_module.so¶¯Ì¬Á´½Ó¿âÎļþ£¬½ÓÏÂÀ´½ç˵һ¸öserver¿é£¬ÔÚserver¿éÖеÄlocationÉèÖÃÏîÖ¸¶¨Ìí¼ÓHeaderÍ·²¿¡£
4.ÖØмÓÔØNginx
Ö´ÐÐÒÔÏÂÏÂÁîÖØмÓÔØNginxЧÀÍÆ÷£º
nginx -s reload
µÇ¼ºó¸´ÖÆ
Õâ¸öÏÂÁî¿ÉÒÔʵÏÖÖØмÓÔØÉèÖá¢ÖØÆôNginx¡¢¹Ø±ÕNginxµÈ²Ù×÷¡£
ÖÁ´Ë£¬¾ÍÍê³ÉÁËNginxÖÐʵÏÖ¶¯Ì¬Ä£¿é¼ÓÔØÉèÖõÄÀú³Ì¡£
×ܽ᣺
ͨ¹ýÉÏÊöÏÈÈÝ£¬ÎÒÃÇ¿ÉÒÔ¼òÆÓÏàʶNginx 1.9.11¼°ÒÔºó°æ±¾ÖеĶ¯Ì¬Ä£¿é¼ÓÔØʵÏÖÒªÁ졣ʵÏÖÀú³ÌÖÐÐèҪƾ֤˳Ðò±àд¶¯Ì¬Ä£¿éÔ´Âë¡¢±àÒëÌìÉú¶¯Ì¬Á´½Ó¿â¡¢¼ÓÔØÄ£¿é¿â²¢ÇÒÖØмÓÔØNginx¡£Ê¹Óö¯Ì¬Ä£¿éÄܹ»Ê¹µÃÓû§ÔÚpost-release½×¶Î²Å¿ª·¢Ä³¸ö¹¦Ð§£¬Ê¹µÃ²úÆ·ÉÏÏß±äµÃÔ½·¢¿ìËÙ¡¢ÎÞа¡£
ÒÔÉϾÍÊÇÔõÑùʵÏÖNginxµÄ¶¯Ì¬Ä£¿é¼ÓÔØÉèÖõÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡