{"id":565,"date":"2020-10-07T12:35:57","date_gmt":"2020-10-07T04:35:57","guid":{"rendered":"https:\/\/www.furyblog.com\/?p=565"},"modified":"2020-10-07T12:35:59","modified_gmt":"2020-10-07T04:35:59","slug":"nginx%e5%b8%b8%e8%a7%81%e9%85%8d%e7%bd%ae%e5%8f%8a%e7%bb%93%e6%9e%84%e4%bd%93","status":"publish","type":"post","link":"https:\/\/www.furyblog.com\/?p=565","title":{"rendered":"Nginx\u5e38\u89c1\u914d\u7f6e\u53ca\u7ed3\u6784\u4f53"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\" id=\"NVVMm\">\u5e38\u7528\u914d\u7f6e<\/h1>\n\n\n\n<p>Nginx\u7684\u914d\u7f6e\u6587\u4ef6nginx.conf\u662f\u6240\u6709\u6a21\u5757\u7684\u57fa\u7840\uff0c\u6307\u5bfc\u6240\u6709\u6a21\u5757\u4ee5\u914d\u7f6e\u9879\u4e3a\u6838\u5fc3\u6765\u63d0\u4f9b\u529f\u80fd\uff0c\u6bcf\u4e2a\u6a21\u5757\u90fd\u4f1a\u6709\u81ea\u5df1\u7684\u914d\u7f6e\u6587\u4ef6\u3002\u5173\u4e8enginx.conf\uff1a<\/p>\n\n\n\n<p>1. Nginx\u7684\u914d\u7f6e\u6587\u4ef6\u6bcf\u4e00\u884c\u5c31\u662f\u4e00\u6761\u547d\u4ee4\uff1b<\/p>\n\n\n\n<p>2. \u6700\u5916\u5c42\u7684\u4e3a\u6838\u5fc3\u6a21\u5757\u7684\u914d\u7f6e\u53c2\u6570\uff08\u7c7b\u578b\uff1aNGX_CORE_MODULE\uff09\uff1b\u5185\u90e8\u5d4c\u5957\u7684\u4e3a\u5404\u4e2a\u5b50\u6a21\u5757\u7684\u914d\u7f6e\uff1b<\/p>\n\n\n\n<p>3. events {} \u4e3a\u4e8b\u4ef6\u6a21\u5757\uff08\u7c7b\u578b\uff1aNGX_EVENT_MODULE\uff09\uff1b<\/p>\n\n\n\n<p>4. http {} \u4e3aHTTP\u6a21\u5757 \uff08\u7c7b\u578b\uff1aNGX_HTTP_MODULE\uff09\uff1b<\/p>\n\n\n\n<p>5. \u6a21\u5757\u5185\u8fd8\u4f1a\u5d4c\u5957\u591a\u5c42\u3002<\/p>\n\n\n\n<p>\u4f8b\u5982\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#daemon on;       #\u5b88\u62a4\u8fdb\u7a0b\u6a21\u5f0f\r\n#user  nobody;      #\u8fd0\u884c\u7684\u7528\u6237\u548c\u7528\u6237\u7ec4\r\nworker_processes  1;  #worker\u8fdb\u7a0b\u6570\r\n\r\n#error_log  logs\/error.log  error;  #\u8bbe\u7f6e\u65e5\u5fd7\u8def\u5f84\u4e0e\u7ea7\u522b\r\n#pid        logs\/nginx.pid;     #\u6307\u5b9apid\u6587\u4ef6\r\n\r\nevents {\r\n    use epoll;\r\n    worker_connections  1024;   #\u6bcf\u4e2aworker\u80fd\u591f\u5e76\u53d1\u54cd\u5e94\u7684\u6700\u5927\u8bf7\u6c42\u6570\r\n}\r\n\r\nhttp {\r\n    include       mime.types;   #\u5305\u542b\u5176\u4ed6\u914d\u7f6e\u6587\u4ef6\r\n    default_type  application\/octet-stream;   #\u9ed8\u8ba4\u6587\u4ef6\u7c7b\u578b\r\n\r\n    sendfile        on;   #\u5f00\u542f\u9ad8\u6548\u6587\u4ef6\u4f20\u8f93\uff0csendfile\u6307\u4ee4\u6307\u5b9anginx\u662f\u5426\u8c03\u7528sendfile\u51fd\u6570\r\n    #tcp_nopush     on;   #\u8c03\u7528tcp_cork\u65b9\u6cd5\uff0c\u6709\u52a9\u4e8e\u89e3\u51b3\u7f51\u7edc\u5835\u585e\r\n    \r\n    keepalive_timeout  65;    #\u8d85\u65f6\u65f6\u957f\r\n\r\n    #gzip  on;    #\u662f\u5426\u5f00\u542fgzip\u538b\u7f29\u8f93\u51fa\r\n\r\n    #nginx\u5fc5\u987b\u4f7f\u7528\u865a\u62df\u673a\u6765\u914d\u7f6e\u7ad9\u70b9\uff0c\u6bcf\u4e2a\u865a\u62df\u4e3b\u673a\u4f7f\u7528\u4e00\u4e2aserver{ }\u6bb5\u6765\u914d\u7f6e\uff1a\r\n    server {\r\n        #\u76d1\u542c\u7aef\u53e3\uff0c\u53ef\u52a0\u5176\u4ed6\u53c2\u6570\uff0crcvbuf=size\uff0csndbuf=size\uff0cssl\u7b49\r\n        listen       8000;      \r\n        server_name  localhost;   #\u4e3b\u673a\u540d\uff0c\u53ef\u4ee5\u591a\u4e2a;\u5f53\u6536\u5230\u8bf7\u6c42\u65f6\uff0c\u4e0e\u9996\u90e8\u7684server\u503c\u6bd4\u8f83\r\n\r\n        #\u4f7f\u7528\u5404location\u5339\u914d\u7528\u6237\u8bf7\u6c42\u7684URI\r\n        location \/ {    #\u7528\u4e8e\u8bbe\u7f6e\u9ed8\u8ba4\u89c4\u5219\uff0c\u6240\u6709\u89c4\u5219\u90fd\u5339\u914d\u4e0d\u5230\u65f6\uff0c\u5c31\u7528\u8be5\u914d\u7f6e\r\n            root   html;  #\u8bbe\u7f6eweb\u8d44\u6e90\u8def\u5f84\uff0c\u7528\u4e8e\u6307\u5b9a\u8bf7\u6c42\u7684\u6839\u6587\u6863\u76ee\u5f55\r\n            index  index.html index.htm;  #\u5b9a\u4e49\u9ed8\u8ba4\u4e3b\u9875\uff0c\u53ef\u4ee5\u8ddf\u591a\u4e2a\u503c\uff0c\u81ea\u5de6\u5411\u53f3\u5339\u914d\r\n        }\r\n\r\n        location ~* \\.(gif|jpg|jpeg)$ {\r\n            #\u5339\u914d\u4ee5.gif\u3001.jpg\u3001.jpeg\u7ed3\u5c3e\u7684\u8bf7\u6c42\r\n            ...\r\n        }\r\n        \r\n        #\u6839\u636eHTTP\u8fd4\u56de\u72b6\u6001\u7801\u91cd\u5b9a\u5411\u9875\u9762\r\n        #error_page  404 \/404.html;\r\n        error_page   500 502 503 504  \/50x.html;\r\n        location = \/50x.html {  \r\n            root   html;\r\n        }\r\n    }\r\n}\r\n\r\nrtmp { \r\n    server {\r\n        listen 1935;    #\u76d1\u542c\u7684\u7aef\u53e3 \r\n        chunk_size 4096;  #\u8bbe\u7f6e\u5206\u5757\u5927\u5c0f\r\n        application live {\r\n            live on;\r\n        }\r\n        application hls {\r\n            live on; \r\n            hls on; \r\n            hls_path share\/html\/hls; \r\n        } \r\n        application vod {\r\n            play share\/vod;\r\n        }\r\n    } \r\n} <\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"z6M8r\">Nginx\u6838\u5fc3\u7ed3\u6784\u4f53ngx_cycle_t\u89e3\u6790<\/h1>\n\n\n\n<p>Nginx\u6838\u5fc3\u7684\u6846\u67b6\u4ee3\u7801\u90fd\u662f\u56f4\u7ed5\u4e00\u4e2a\u7ed3\u6784\u4f53ngx_cycle_t\u5c55\u5f00\uff0c\u65e0\u8bba\u662fmaster\u7ba1\u7406\u8fdb\u7a0b\uff0c\u8fd8\u662f\u591a\u4e2aworker\u5de5\u4f5c\u8fdb\u7a0b\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u62e5\u6709\u552f\u4e00\u4e00\u4e2angx_cycle_t\u7ed3\u6784\u4f53\u3002\u5b9a\u4e49\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/* ngx_cycle_t \u5168\u5c40\u53d8\u91cf\u6570\u636e\u7ed3\u6784 *\/\r\nstruct ngx_cycle_s {\r\n    \/\/\u4fdd\u5b58\u6240\u6709\u6a21\u5757\u914d\u7f6e\u9879\u7684\u7ed3\u6784\u4f53\u6307\u9488\uff0c\u8be5\u6570\u7ec4\u6bcf\u4e2a\u6210\u5458\u53c8\u662f\u4e00\u4e2a\u6307\u9488\uff0c\u8fd9\u4e2a\u6307\u9488\u53c8\u6307\u5411\u5b58\u50a8\u6307\u9488\u7684\u6570\u7ec4\r\n    void                  ****conf_ctx; \/* \u6240\u6709\u6a21\u5757\u914d\u7f6e\u4e0a\u4e0b\u6587\u7684\u6570\u7ec4 *\/\r\n    ngx_pool_t               *pool;     \/* \u5185\u5b58\u6c60 *\/\r\n    ngx_log_t                *log;      \/* \u65e5\u5fd7 *\/\r\n    ngx_log_t                 new_log;\r\n    ngx_uint_t                log_use_stderr;  \/* unsigned  log_use_stderr:1; *\/\r\n\r\n    ngx_connection_t        **files;    \/* \u8fde\u63a5\u6587\u4ef6 *\/\r\n    ngx_connection_t         *free_connections; \/* \u7a7a\u95f2\u8fde\u63a5 *\/\r\n    ngx_uint_t                free_connection_n;\/* \u7a7a\u95f2\u8fde\u63a5\u7684\u4e2a\u6570 *\/\r\n    ngx_queue_t               reusable_connections_queue;\/* \u53ef\u518d\u5229\u7528\u7684\u8fde\u63a5\u961f\u5217 *\/\r\n    \r\n    ngx_array_t               listening;    \/* \u76d1\u542c\u6570\u7ec4 *\/\r\n    ngx_array_t               paths;        \/* \u8def\u5f84\u6570\u7ec4 *\/\r\n    ngx_list_t                open_files;   \/* \u5df2\u6253\u5f00\u6587\u4ef6\u7684\u94fe\u8868 *\/\r\n    ngx_list_t                shared_memory;\/* \u5171\u4eab\u5185\u5b58\u94fe\u8868 *\/\r\n\r\n    ngx_uint_t                connection_n; \/* \u5df2\u8fde\u63a5\u4e2a\u6570 *\/\r\n    ngx_uint_t                files_n;      \/* \u5df2\u6253\u5f00\u6587\u4ef6\u7684\u4e2a\u6570 *\/\r\n    ngx_connection_t         *connections;  \/* \u8fde\u63a5 *\/\r\n    ngx_event_t              *read_events;  \/* \u8bfb\u4e8b\u4ef6 *\/\r\n    ngx_event_t              *write_events; \/* \u5199\u4e8b\u4ef6 *\/\r\n\r\n    \/* old \u7684 ngx_cycle_t \u5bf9\u8c61\uff0c\u7528\u4e8e\u5f15\u7528\u524d\u4e00\u4e2a ngx_cycle_t \u5bf9\u8c61\u7684\u6210\u5458 *\/\r\n    ngx_cycle_t              *old_cycle;\r\n    ngx_str_t                 conf_file;    \/* nginx \u914d\u7f6e\u6587\u4ef6 *\/\r\n    ngx_str_t                 conf_param;   \/* \u547d\u4ee4\u884c\u643a\u5e26\u7684\u53c2\u6570 *\/\r\n    ngx_str_t                 conf_prefix;  \/* nginx \u914d\u7f6e\u6587\u4ef6\u7684\u8def\u5f84 *\/\r\n    ngx_str_t                 prefix;       \/* nginx \u5b89\u88c5\u8def\u5f84 *\/\r\n    ngx_str_t                 lock_file;    \/* \u52a0\u9501\u6587\u4ef6 *\/\r\n    ngx_str_t                 hostname;     \/* \u4e3b\u673a\u540d *\/\r\n};<\/code><\/pre>\n\n\n\n<p>\u5176\u4e2d\u7684ngx_array_t listening\u662f\u52a8\u6001\u6570\u7ec4\uff0c\u5143\u7d20\u7c7b\u578b\u662fngx_listening_t\uff0c\u6bcf\u4e2a\u90fd\u4ee3\u8868\u7740Nginx\u670d\u52a1\u5668\u76d1\u542c\u7684\u4e00\u4e2a\u7aef\u53e3\u4ee5\u53ca\u76f8\u5173\u53c2\u6570\uff0c\u53e6\u5916ngx_cycle_t\u7ed3\u6784\u4f53\u4e2d\u7684connections\u3001free_connections\u7b49\u6210\u5458\u662f\u4e0e\u4e8b\u4ef6\u6a21\u5757\u5f3a\u76f8\u5173\u7684\uff0cconnections\u3001free_connectionsconnection\u3001read_events\u548cwrite_events\u5c31\u6784\u6210\u4e00\u4e2a\u8fde\u63a5\u6c60\uff0c\u4ee5data\u6210\u5458\u4e3anext\u6307\u9488\u4e32\u8054\u6210\u5355\u94fe\u8868\uff08connections\u6307\u5411\u9996\u90e8\uff0cfree_connections\u6307\u5411\u7b2c\u4e00\u4e2a\u7a7a\u95f2\u8fde\u63a5\uff09\uff1bread_events\u3001write_events\u6839\u636e\u6570\u7ec4\u5e8f\u53f7\u5c31\u53ef\u4ee5\u4e0e\u6bcf\u4e00\u4e2a\u8fde\u63a5\u5bf9\u5e94\uff08\u90fd\u662f\u540c\u6837\u5927\u5c0f\u7684\u6570\u7ec4\uff09\u3002\u5982\u4e0b\u56fe\uff1a<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"556\" height=\"495\" src=\"https:\/\/www.furyblog.com\/wp-content\/uploads\/2020\/10\/1563959877863-716bb3cd-64e5-41ac-bd27-b332bd568c21.png\" alt=\"\" class=\"wp-image-569\" srcset=\"https:\/\/www.furyblog.com\/wp-content\/uploads\/2020\/10\/1563959877863-716bb3cd-64e5-41ac-bd27-b332bd568c21.png 556w, https:\/\/www.furyblog.com\/wp-content\/uploads\/2020\/10\/1563959877863-716bb3cd-64e5-41ac-bd27-b332bd568c21-300x267.png 300w\" sizes=\"(max-width: 556px) 100vw, 556px\" \/><\/figure><\/div>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"feYTX\">ngx_module_t\u89e3\u6790<\/h1>\n\n\n\n<p>\u4e0a\u7bc7\u63d0\u5230\u7684ngx_module_t\u662f\u6240\u6709\u6a21\u5757\u7684\u63a5\u53e3\uff0c\u5df2\u7ecf\u4ecb\u7ecd\u4e86\u6a21\u5757\u7c7b\u578btype\u5b57\u6bb5\uff0c\u63a5\u4e0b\u6765\u662fngx_module_t\u63a5\u53e3\u5b9a\u4e49\u4ee5\u53ca\u542b\u4e49\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>typedef struct ngx_module_s ngx_module_t;\r\nstruct ngx_module_s {\r\n    ngx_uint_t            ctx_index;    \/\/\u6bcf\u7c7b\u6a21\u5757\u4e2d\u5bf9\u5e94\u7684index\r\n    ngx_uint_t            index;        \/\/\u5728ngx_modules\u6570\u7ec4\u91cc\u7684\u552f\u4e00\u7d22\u5f15\r\n    char                 *name;         \/\/\u6a21\u5757\u540d\u5b57\r\n    \r\n    ngx_uint_t            spare0-1;     \/\/spare0\u3001spare1\u4e3a\u4fdd\u7559\u5b57\u6bb5\r\n    ...\r\n        \r\n    ngx_uint_t            version;      \/\/Nginx\u7248\u672c\r\n    const char           *signature;    \/\/ \u6a21\u5757\u7684\u4e8c\u8fdb\u5236\u517c\u5bb9\u6027\u7b7e\u540d\r\n    void                 *ctx;          \/\/\u6bcf\u7c7b\u6a21\u5757\u9700\u5177\u4f53\u5316\u7684\u4e0a\u4e0b\u6587\r\n    ngx_command_t        *commands;     \/\/ \u6a21\u5757\u652f\u6301\u7684\u6307\u4ee4\r\n    ngx_uint_t            type;         \/\/\u6a21\u5757\u7684\u7c7b\u578b\r\n    \r\n    \/\/ngx_module_t\u4f5c\u4e3a\u6240\u6709\u6a21\u5757\u7684\u901a\u7528\u63a5\u53e3\u5b9a\u4e49\u76847\u79cd\u56de\u8c03\u65b9\u6cd5\r\n    ngx_int_t           (*init_master)(ngx_log_t *log);         \/\/\u76ee\u524d\u6ca1\u6709\u4f7f\u7528\r\n    ngx_int_t           (*init_module)(ngx_cycle_t *cycle);\r\n    ngx_int_t           (*init_process)(ngx_cycle_t *cycle);\r\n    ngx_int_t           (*init_thread)(ngx_cycle_t *cycle);     \/\/\u76ee\u524d\u6ca1\u6709\u4f7f\u7528\r\n    void                (*exit_thread)(ngx_cycle_t *cycle);     \/\/\u76ee\u524d\u6ca1\u6709\u4f7f\u7528\r\n    void                (*exit_process)(ngx_cycle_t *cycle);\r\n    void                (*exit_master)(ngx_cycle_t *cycle);\r\n    \r\n    uintptr_t             spare_hook0-7;    \/\/\u6682\u65f6\u6ca1\u7528\r\n};<\/code><\/pre>\n\n\n\n<p>index\u5b57\u6bb5\u662f\u6240\u6709\u6a21\u5757\u552f\u4e00\u7684\u7d22\u5f15\uff0cctx_index\u662f\u6240\u6709\u6a21\u5757\u5728\u540c\u7c7b\u6a21\u5757\u91cc\u7684\u7d22\u5f15\uff0c\u8fd9\u91cc\u5177\u4f53\u4ecb\u7ecd\u4e00\u4e0b\u5176\u4e2d\u7684ctx\u3001commands\u5b57\u6bb5\uff1b<\/p>\n\n\n\n<p>void *ctx\uff1a\u6a21\u5757\u4e0a\u4e0b\u6587\uff0c\u901a\u5e38\u662f\u51fd\u6570\u6307\u9488\u8868\uff0c\u4e0d\u540c\u7c7b\u578b\u7684\u6a21\u5757\u5177\u6709\u4e0d\u540c\u7684\u542b\u4e49\uff0c\u6bcf\u4e00\u7c7b\u4e0b\u7684ctx\u7ed3\u6784\u662f\u4e00\u6837\u7684\uff1b<\/p>\n\n\n\n<p>\u4f8b\u5982\u6838\u5fc3\u6a21\u5757\u7c7b\u578b\u7684\u4e0a\u4e0b\u6587\u63a5\u53e3ngx_core_module_t\u5982\u4e0b\uff0c\u4ee5\u914d\u7f6e\u9879\u89e3\u6790\u4e3a\u57fa\u7840\uff0c\u63d0\u4f9b\u4e86creat_conf\u548cinit_conf\u4e24\u4e2a\u56de\u8c03\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>typedef struct {\r\n    ngx_str_t   name;   \/\/\u6838\u5fc3\u6a21\u5757\u540d\u5b57\r\n    void        *(*create_conf)(ngx_cycle_t *cycle);            \/\/\u521b\u5efa\u5b58\u50a8\u914d\u7f6e\u9879\u7684\u6570\u636e\u7ed3\u6784\r\n    char        *(*init_conf)(ngx_cycle_t *cycle, void *conf);  \/\/\u4f7f\u7528\u89e3\u6790\u51fa\u7684\u914d\u7f6e\u9879\u8fdb\u884c\u521d\u59cb\u5316\r\n} ngx_core_module_t;<\/code><\/pre>\n\n\n\n<p>\u6838\u5fc3\u6a21\u5757\u7c7b\u578b\u7684\u4e0a\u4e0b\u6587\u63a5\u53e3ngx_event_module_t\u5982\u4e0b\uff0c\u9664\u4e86\u914d\u7f6e\u89e3\u6790\uff0c\u67099\u4e2a\u4e8b\u4ef6\u9a71\u52a8\u6a21\u5757\u5982epoll\u3001select\u7b49\u5fc5\u987b\u5b9e\u73b0\u5176\u4e2d\u7684ngx_event_actions_t actions\u63a5\u53e3\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>typedef struct {\r\n    ngx_int_t  (*add)(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags);  \/\/\u6dfb\u52a0\u4e8b\u4ef6\u65b9\u6cd5\r\n    ngx_int_t  (*del)(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags);  \/\/\u5220\u9664\u4e8b\u4ef6\u65b9\u6cd5\r\n    ngx_int_t  (*enable)(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags);\/\/\u542f\u7528\u4e8b\u4ef6\u65b9\u6cd5\r\n    ngx_int_t  (*disable)(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags);\/\/\u7981\u7528\u4e8b\u4ef6\u65b9\u6cd5\r\n    ngx_int_t  (*add_conn)(ngx_connection_t *c);    \/\/\u6dfb\u52a0\u8fde\u63a5\u65b9\u6cd5\r\n    ngx_int_t  (*del_conn)(ngx_connection_t *c, ngx_uint_t flags);  \/\/\u5220\u9664\u8fde\u63a5\u65b9\u6cd5\r\n\r\n    ngx_int_t  (*notify)(ngx_event_handler_pt handler); \r\n    ngx_int_t  (*process_events)(ngx_cycle_t *cycle, ngx_msec_t timer,\r\n                                 ngx_uint_t flags);     \/\/\u5904\u7406\u4e8b\u4ef6\u65b9\u6cd5\uff0c\u6838\u5fc3\r\n\r\n    ngx_int_t  (*init)(ngx_cycle_t *cycle, ngx_msec_t timer);   \/\/\u521d\u59cb\u5316\u4e8b\u4ef6\u9a71\u52a8\u6a21\u5757\u7684\u65b9\u6cd5\r\n    void       (*done)(ngx_cycle_t *cycle);     \/\/\u9000\u51fa\u65b9\u6cd5\r\n} ngx_event_actions_t;\r\ntypedef struct {\r\n    ngx_str_t              *name;   \/\/\u4e8b\u4ef6\u6a21\u5757\u7684\u540d\u79f0\r\n    void                 *(*create_conf)(ngx_cycle_t *cycle);\r\n    char                 *(*init_conf)(ngx_cycle_t *cycle, void *conf);\r\n    ngx_event_actions_t     actions;    \/\/\u5bf9\u4e8e\u4e8b\u4ef6\u9a71\u52a8\u673a\u5236\uff0c\u9700\u8981\u5b9e\u73b0\u7684\u65b9\u6cd5\r\n} ngx_event_module_t;<\/code><\/pre>\n\n\n\n<p>\u5176\u4ed6\u4e0d\u540c\u7684\u6a21\u5757\u7c7b\u578b\u90fd\u6709\u4e0d\u540c\u7684\u4e0a\u4e0b\u6587\u63a5\u53e3\uff0c\u6bd4\u5982\u6240\u6709\u4e8b\u4ef6\u6a21\u5757\u9700\u8981\u5b9e\u73b0\u7684ngx_event_module_t\u63a5\u53e3\u548c\u6240\u6709http\u6a21\u5757\u9700\u8981\u5b9e\u73b0\u7684ngx_http_module_t\u63a5\u53e3\u3002\u90e8\u5206\u6a21\u5757\u7c7b\u578b\u7684ctx\u4e0a\u4e0b\u6587\u5982\u4e0b\u56fe\u6240\u793a\uff1a<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"694\" height=\"404\" src=\"https:\/\/www.furyblog.com\/wp-content\/uploads\/2020\/10\/1563943574704-347e3f0d-90c8-4c8e-994f-d60d9ab71b09.png\" alt=\"\" class=\"wp-image-571\" srcset=\"https:\/\/www.furyblog.com\/wp-content\/uploads\/2020\/10\/1563943574704-347e3f0d-90c8-4c8e-994f-d60d9ab71b09.png 694w, https:\/\/www.furyblog.com\/wp-content\/uploads\/2020\/10\/1563943574704-347e3f0d-90c8-4c8e-994f-d60d9ab71b09-300x175.png 300w\" sizes=\"(max-width: 694px) 100vw, 694px\" \/><\/figure><\/div>\n\n\n\n<p>ngx_command_t *commands\uff1a\u6a21\u5757\u611f\u5174\u8da3\u7684\u914d\u7f6e\u9879\u4ee5\u53ca\u5982\u4f55\u5904\u7406\uff0c\u6570\u7ec4\u5f62\u5f0f\uff08\u56e0\u4e3a\u6240\u6709\u6a21\u5757\u90fd\u662f\u4ee5\u914d\u7f6e\u9879\u6765\u5b9a\u5236\u529f\u80fd\u7684\uff09\uff1b\u4f8b\u5982\u6838\u5fc3\u6a21\u5757ngx_rtmp_module\uff08\u81ea\u884c\u6dfb\u52a0\uff09\u4e2dcommands\u5b9a\u4e49\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>static ngx_command_t  ngx_rtmp_commands&#91;] = {\r\n    { ngx_string(\"rtmp\"),   \/\/\u6307\u4ee4\u540d\u79f0\r\n      NGX_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_NOARGS,\r\n      ngx_rtmp_block,   \/\/\u5904\u7406\u65b9\u6cd5\r\n      0,\r\n      0,\r\n      NULL },\r\n      ngx_null_command\r\n};<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5e38\u7528\u914d\u7f6e Nginx\u7684\u914d\u7f6e\u6587\u4ef6nginx.conf\u662f\u6240\u6709\u6a21\u5757\u7684\u57fa\u7840\uff0c\u6307\u5bfc\u6240\u6709\u6a21\u5757\u4ee5\u914d\u7f6e\u9879\u4e3a\u6838\u5fc3\u6765\u63d0\u4f9b\u529f\u80fd\uff0c\u6bcf\u4e2a\u6a21\u5757\u90fd\u4f1a\u6709\u81ea\u5df1\u7684\u914d\u7f6e\u6587\u4ef6\u3002\u5173\u4e8enginx.conf\uff1a 1. Nginx\u7684\u914d\u7f6e\u6587\u4ef6\u6bcf\u4e00\u884c\u5c31\u662f\u4e00\u6761\u547d\u4ee4\uff1b 2. \u6700\u5916\u5c42\u7684\u4e3a\u6838\u5fc3\u6a21\u5757\u7684\u914d&#8230;<\/p>\n","protected":false},"author":1,"featured_media":567,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32,33],"tags":[],"topic":[],"class_list":["post-565","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-network-2","category-network-example"],"_links":{"self":[{"href":"https:\/\/www.furyblog.com\/index.php?rest_route=\/wp\/v2\/posts\/565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.furyblog.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.furyblog.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.furyblog.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.furyblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=565"}],"version-history":[{"count":4,"href":"https:\/\/www.furyblog.com\/index.php?rest_route=\/wp\/v2\/posts\/565\/revisions"}],"predecessor-version":[{"id":572,"href":"https:\/\/www.furyblog.com\/index.php?rest_route=\/wp\/v2\/posts\/565\/revisions\/572"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.furyblog.com\/index.php?rest_route=\/wp\/v2\/media\/567"}],"wp:attachment":[{"href":"https:\/\/www.furyblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=565"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.furyblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=565"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.furyblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=565"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.furyblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftopic&post=565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}