{"id":326646,"date":"2021-07-19T09:00:30","date_gmt":"2021-07-19T09:00:30","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=326646"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=326646","title":{"rendered":"Nginx. \u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430. \u0412\u0437\u0433\u043b\u044f\u0434 \u0437\u0435\u043c\u043b\u0435\u043a\u043e\u043f\u0430"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p><em>Nginx<\/em> \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0432\u0441\u044e \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447, \u043d\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e  \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u0435\u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u0442\u043e\u0433\u0434\u0430 \u043c\u044b \u043b\u0438\u0431\u043e \u0431\u0435\u0440\u0435\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u043b\u0438\u0431\u043e \u043f\u0438\u0448\u0435\u043c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439. <\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u0430\u0432\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0438 \u0438\u043c\u0435\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u043e\u0442\u0437\u044b\u0432\u044b, \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438, \u0447\u0442\u043e \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043f\u0440\u0438\u0447\u0435\u043c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0441\u0431\u043e\u0440\u043a\u0435<em>. <\/em>\u0410 <em>Nginx<\/em>, \u043a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0440\u043e\u0436\u0434\u0451\u043d \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u043c\u043e\u0434\u0443\u043b\u0438, \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u043e\u0432\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439 \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. <\/p>\n<p>\u0412 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/post\/561758\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435 <\/a>\u043c\u044b \u0441\u043d\u044f\u043b\u0438 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0441\u043b\u043e\u0439 \u0433\u0440\u0443\u043d\u0442\u0430, \u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043a\u043e\u043f\u0430\u0442\u044c \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0433\u043b\u0443\u0431\u0436\u0435. \u0412 \u0441\u0430\u043c\u043e\u043c <em>Nginx <\/em>\u0435\u0441\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0438 \u043e\u043d \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0432\u044b\u044f\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0435 \u0433\u043e\u0434\u0438\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0430\u043c \u0432\u043d\u043e\u0441\u0438\u0442 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u0443\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u0442\u0443\u0442, \u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u043b\u0443\u0447\u0448\u0435, \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 <em>dtrace<\/em>.<\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435, \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u044d\u043a\u0441\u043a\u0430\u0432\u0430\u0442\u043e\u0440\u0449\u0438\u043a\u0438 \u0433\u043e\u0442\u043e\u0432\u044f\u0442 <em>dtrace<\/em> \u0432\u043e\u0442 <a href=\"http:\/\/nginx.org\/en\/docs\/nginx_dtrace_pid_provider.html\" rel=\"noopener noreferrer nofollow\">\u0442\u0430\u043a<\/a>. \u041d\u043e \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434, \u0438\u0437-\u0437\u0430 \u0442\u044c\u043c\u044b \u043f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u0442\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043b\u0438\u0431\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432, \u043b\u0438\u0431\u043e \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0438 \u0442\u0438\u043f\u043e\u0432. \u041c\u044b, \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0447\u0435\u0440\u043d\u043e\u0440\u0430\u0431\u043e\u0447\u0438\u0435, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043f\u0440\u043e\u0449\u0435.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043c <em>Nginx<\/em> \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0434\u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c<\/p>\n<pre><code class=\"nginx\">worker_processes 1;<\/code><\/pre>\n<p>\u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e:<\/p>\n<pre><code class=\"nginx\">server {   root \/www\/example_com;   index index.html;   listen       *:80;   server_name  .example.com;   location \/ {   } }<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a\u043e\u0439 \u043f\u0443\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u0448 \u0437\u0430\u043f\u0440\u043e\u0441, \u0441\u043e\u0437\u0434\u0430\u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 <a href=\"https:\/\/docs.oracle.com\/en\/operating-systems\/oracle-linux\/dtrace-guide\/dt_dlang.html\" rel=\"noopener noreferrer nofollow\"><em>D<\/em><\/a><em> <\/em>(\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0443\u0442\u0430\u0442\u044c \u0441 \u044f\u0437\u044b\u043a\u043e\u043c <a href=\"https:\/\/dlang.org\/\" rel=\"noopener noreferrer nofollow\"><em>D<\/em><\/a>). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043e\u043f\u0446\u0438\u0435\u0439 <em>flowindent<\/em>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432.<\/p>\n<pre><code class=\"css\">#!\/usr\/sbin\/dtrace -s #pragma D option flowindent  pid$1::ngx_http_init_connection:entry {   self-&gt;traceme = 1; }  pid$1:nginx:ngx_http*:entry { }  pid$1:nginx:ngx_http*:return { }  pid$1::ngx_http_finalize_request:return {   trace(arg1);   self-&gt;traceme = 0;   exit(0); }<\/code><\/pre>\n<p>\u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u043f\u0443\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0410\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e, 169 \u0441\u0442\u0440\u043e\u043a<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>CPU FUNCTION   3  -&gt; ngx_http_init_connection   3  &lt;- ngx_http_init_connection   3  -&gt; ngx_http_wait_request_handler   3    -&gt; ngx_http_alloc_request   3    &lt;- ngx_http_alloc_request   3  &lt;- ngx_http_wait_request_handler   3  -&gt; ngx_http_process_request_line   3    -&gt; ngx_http_read_request_header   3    &lt;- ngx_http_read_request_header   3    -&gt; ngx_http_parse_request_line   3    &lt;- ngx_http_parse_request_line   3    -&gt; ngx_http_process_request_uri   3    &lt;- ngx_http_process_request_uri   3    -&gt; ngx_http_process_request_headers   3      -&gt; ngx_http_read_request_header   3      &lt;- ngx_http_read_request_header   3      -&gt; ngx_http_parse_header_line   3      &lt;- ngx_http_parse_header_line   3      -&gt; ngx_http_process_header_line   3      &lt;- ngx_http_process_header_line   3      -&gt; ngx_http_parse_header_line   3      &lt;- ngx_http_parse_header_line   3      -&gt; ngx_http_process_connection   3      &lt;- ngx_http_process_connection   3      -&gt; ngx_http_parse_header_line   3      &lt;- ngx_http_parse_header_line   3      -&gt; ngx_http_process_host   3        -&gt; ngx_http_validate_host   3        &lt;- ngx_http_validate_host   3        -&gt; ngx_http_set_virtual_server   3          -&gt; ngx_http_find_virtual_server   3          &lt;- ngx_http_find_virtual_server   3        &lt;- ngx_http_set_virtual_server   3      &lt;- ngx_http_process_host   3      -&gt; ngx_http_parse_header_line   3      &lt;- ngx_http_parse_header_line   3      -&gt; ngx_http_process_user_agent   3      &lt;- ngx_http_process_user_agent   3      -&gt; ngx_http_parse_header_line   3      &lt;- ngx_http_parse_header_line   3      -&gt; ngx_http_process_request_header   3      &lt;- ngx_http_process_request_header   3      -&gt; ngx_http_process_request   3        -&gt; ngx_http_handler   3          -&gt; ngx_http_core_generic_phase   3            -&gt; ngx_http_realip_handler   3            &lt;- ngx_http_realip_handler   3          &lt;- ngx_http_core_generic_phase   3          -&gt; ngx_http_core_rewrite_phase   3            -&gt; ngx_http_rewrite_handler   3            &lt;- ngx_http_rewrite_handler   3          &lt;- ngx_http_core_rewrite_phase   3          -&gt; ngx_http_core_find_config_phase   3            -&gt; ngx_http_core_find_location   3              -&gt; ngx_http_core_find_location   3              &lt;- ngx_http_core_find_location   3            &lt;- ngx_http_core_find_location   3            -&gt; ngx_http_update_location_config   3            &lt;- ngx_http_update_location_config   3          &lt;- ngx_http_core_find_config_phase   3          -&gt; ngx_http_core_rewrite_phase   3            -&gt; ngx_http_rewrite_handler   3            &lt;- ngx_http_rewrite_handler   3          &lt;- ngx_http_core_rewrite_phase   3          -&gt; ngx_http_core_post_rewrite_phase   3          &lt;- ngx_http_core_post_rewrite_phase   3          -&gt; ngx_http_core_generic_phase   3            -&gt; ngx_http_realip_handler   3            &lt;- ngx_http_realip_handler   3          &lt;- ngx_http_core_generic_phase   3          -&gt; ngx_http_core_generic_phase   3            -&gt; ngx_http_limit_req_handler   3            &lt;- ngx_http_limit_req_handler   3          &lt;- ngx_http_core_generic_phase   3          -&gt; ngx_http_core_generic_phase   3            -&gt; ngx_http_limit_conn_handler   3            &lt;- ngx_http_limit_conn_handler   3          &lt;- ngx_http_core_generic_phase   3          -&gt; ngx_http_core_access_phase   3            -&gt; ngx_http_access_handler   3            &lt;- ngx_http_access_handler   3          &lt;- ngx_http_core_access_phase   3          -&gt; ngx_http_core_access_phase   3            -&gt; ngx_http_auth_basic_handler   3            &lt;- ngx_http_auth_basic_handler   3          &lt;- ngx_http_core_access_phase   3          -&gt; ngx_http_core_access_phase   3            -&gt; ngx_http_auth_request_handler   3            &lt;- ngx_http_auth_request_handler   3          &lt;- ngx_http_core_access_phase   3          -&gt; ngx_http_core_post_access_phase   3          &lt;- ngx_http_core_post_access_phase   3          -&gt; ngx_http_core_generic_phase   3            -&gt; ngx_http_try_files_handler   3            &lt;- ngx_http_try_files_handler   3          &lt;- ngx_http_core_generic_phase   3          -&gt; ngx_http_core_generic_phase   3            -&gt; ngx_http_mirror_handler   3            &lt;- ngx_http_mirror_handler   3          &lt;- ngx_http_core_generic_phase   3          -&gt; ngx_http_core_content_phase   3            -&gt; ngx_http_index_handler   3            &lt;- ngx_http_index_handler   3          &lt;- ngx_http_core_content_phase   3          -&gt; ngx_http_core_content_phase   3            -&gt; ngx_http_autoindex_handler   3            &lt;- ngx_http_autoindex_handler   3          &lt;- ngx_http_core_content_phase   3          -&gt; ngx_http_core_content_phase   3            -&gt; ngx_http_gzip_static_handler   3            &lt;- ngx_http_gzip_static_handler   3          &lt;- ngx_http_core_content_phase   3          -&gt; ngx_http_core_content_phase   3            -&gt; ngx_http_static_handler   3              -&gt; ngx_http_map_uri_to_path   3              &lt;- ngx_http_map_uri_to_path   3              -&gt; ngx_http_set_disable_symlinks   3              &lt;- ngx_http_set_disable_symlinks   3              -&gt; ngx_http_discard_request_body   3              &lt;- ngx_http_discard_request_body   3              -&gt; ngx_http_set_etag   3              &lt;- ngx_http_set_etag   3              -&gt; ngx_http_set_content_type   3              &lt;- ngx_http_set_content_type   3              -&gt; ngx_http_send_header   3                -&gt; ngx_http_not_modified_header_filter   3                  -&gt; ngx_http_headers_filter   3                    -&gt; ngx_http_userid_filter   3                      -&gt; ngx_http_sub_header_filter   3                        -&gt; ngx_http_charset_header_filter   3                          -&gt; ngx_http_ssi_header_filter   3                            -&gt; ngx_http_gzip_header_filter   3                              -&gt; ngx_http_range_header_filter   3                                -&gt; ngx_http_chunked_header_filter   3                                  -&gt; ngx_http_header_filter   3                                    -&gt; ngx_http_time   3                                    &lt;- ngx_http_time   3                                    -&gt; ngx_http_write_filter   3                                    &lt;- ngx_http_write_filter   3                                  &lt;- ngx_http_header_filter   3                                &lt;- ngx_http_charset_header_filter   3                              &lt;- ngx_http_headers_filter   3                              -&gt; ngx_http_output_filter   3                                -&gt; ngx_http_range_body_filter   3                                  -&gt; ngx_http_copy_filter   3                                    -&gt; ngx_http_trailers_filter   3                                      -&gt; ngx_http_sub_body_filter   3                                        -&gt; ngx_http_charset_body_filter   3                                          -&gt; ngx_http_ssi_body_filter   3                                            -&gt; ngx_http_postpone_filter   3                                              -&gt; ngx_http_gzip_body_filter   3                                                -&gt; ngx_http_chunked_body_filter   3                                                  -&gt; ngx_http_write_filter   3                                                    -&gt; ngx_http_complex_value_size   3                                                    &lt;- ngx_http_complex_value_size   3                                                  &lt;- ngx_http_write_filter   3                                                &lt;- ngx_http_chunked_body_filter   3                                              &lt;- ngx_http_gzip_body_filter   3                                            &lt;- ngx_http_ssi_body_filter   3                                          &lt;- ngx_http_charset_body_filter   3                                        &lt;- ngx_http_trailers_filter   3                                      &lt;- ngx_http_copy_filter   3                                    &lt;- ngx_http_output_filter   3                                  &lt;- ngx_http_static_handler   3                                  -&gt; ngx_http_finalize_request   3                                   | ngx_http_finalize_request:return   3                                  &lt;- ngx_http_finalize_request       34399759824 <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439, \u043c\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0448\u0435\u043b \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043f\u0443\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0444\u0430\u0437\u0430\u043c\u0438 <em>Nginx. <\/em>\u0423\u0431\u0435\u0434\u0438\u043c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c:<\/p>\n<pre><code class=\"bash\">$ cat \/tmp\/tree.txt | grep -F phase | grep \"\\-&gt;\" | uniq | awk '{print $3}' ngx_http_core_generic_phase ngx_http_core_rewrite_phase ngx_http_core_find_config_phase ngx_http_core_rewrite_phase ngx_http_core_post_rewrite_phase ngx_http_core_generic_phase ngx_http_core_access_phase ngx_http_core_post_access_phase ngx_http_core_generic_phase ngx_http_core_content_phase<\/code><\/pre>\n<p>\u0424\u0430\u0437 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 11, \u0430 \u0437\u0434\u0435\u0441\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043b\u043e\u0441\u044c 10 \u044d\u0442\u0430\u043f\u043e\u0432. \u0412 \u044d\u0442\u043e\u043c \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0430 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f <em>ngx_http_finalize_connection<\/em>, <em>ngx_http_free_request<\/em> \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u044d\u0442\u0430\u043f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043b\u043e\u0433.<\/p>\n<p>\u0421\u043e\u043e\u0442\u043d\u0435\u0441\u0435\u043c \u043d\u0430\u0448\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0444\u0430\u0437:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p>1<\/p>\n<\/td>\n<td data-colwidth=\"341\" width=\"341\">\n<p>NGX_HTTP_POST_READ_PHASE<\/p>\n<\/td>\n<td>\n<p>ngx_http_core_generic_phase<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p>2<\/p>\n<\/td>\n<td data-colwidth=\"341\" width=\"341\">\n<p>NGX_HTTP_SERVER_REWRITE_PHASE <\/p>\n<\/td>\n<td>\n<p>ngx_http_core_rewrite_phase<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p>3<\/p>\n<\/td>\n<td data-colwidth=\"341\" width=\"341\">\n<p>NGX_HTTP_FIND_CONFIG_PHASE<\/p>\n<\/td>\n<td>\n<p>ngx_http_core_find_config_phase<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p>4<\/p>\n<\/td>\n<td data-colwidth=\"341\" width=\"341\">\n<p>NGX_HTTP_REWRITE_PHASE<\/p>\n<\/td>\n<td>\n<p>ngx_http_core_rewrite_phase<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p>5<\/p>\n<\/td>\n<td data-colwidth=\"341\" width=\"341\">\n<p>NGX_HTTP_POST_REWRITE_PHASE<\/p>\n<\/td>\n<td>\n<p>ngx_http_core_post_rewrite_phase<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p>6<\/p>\n<\/td>\n<td data-colwidth=\"341\" width=\"341\">\n<p>NGX_HTTP_PREACCESS_PHASE <\/p>\n<\/td>\n<td>\n<p>ngx_http_core_generic_phase<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p>7<\/p>\n<\/td>\n<td data-colwidth=\"341\" width=\"341\">\n<p>NGX_HTTP_ACCESS_PHASE<\/p>\n<\/td>\n<td>\n<p>ngx_http_core_access_phase<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p>8<\/p>\n<\/td>\n<td data-colwidth=\"341\" width=\"341\">\n<p>NGX_HTTP_POST_ACCESS_PHASE<\/p>\n<\/td>\n<td>\n<p>ngx_http_core_post_access_phase<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p>9<\/p>\n<\/td>\n<td data-colwidth=\"341\" width=\"341\">\n<p>NGX_HTTP_PRECONTENT_PHASE<\/p>\n<\/td>\n<td>\n<p>ngx_http_core_generic_phase<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p>10<\/p>\n<\/td>\n<td data-colwidth=\"341\" width=\"341\">\n<p>NGX_HTTP_CONTENT_PHASE<\/p>\n<\/td>\n<td>\n<p>ngx_http_core_content_phase<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p>11<\/p>\n<\/td>\n<td data-colwidth=\"341\" width=\"341\">\n<p>NGX_HTTP_LOG_PHASE<\/p>\n<\/td>\n<td>\n<p>ngx_http_core_generic_phase<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0437\u0435, \u0442\u043e \u0435\u0451 \u043f\u0440\u043e\u0431\u0443 \u043d\u0430\u043c \u0438 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043e\u0437\u044c\u043c\u0435\u043c <em>NGX_HTTP_POST_ACCESS_PHASE<\/em> \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0435\u0451 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430:<\/p>\n<pre><code class=\"css\">#!\/usr\/sbin\/dtrace -s  pid$1::ngx_http_init_connection:entry {     printf(\"init\\n\");     elapsed_post_access = 0; }  pid$1::ngx_http_core_post_access_phase:entry {     begin_post_access = timestamp;     printf(\"begin (post_access): %d\\n\", begin_post_access); }  pid$1::ngx_http_core_post_access_phase:return \/begin_post_access &gt; 0\/ {     elapsed_post_access += timestamp - begin_post_access;     begin_post_access = 0;     printf(\"elapsed (post_access): %d\\n\", elapsed_post_access); }  pid$1::ngx_http_finalize_request:return \/elapsed_post_access &gt; 0\/ {     printf(\"final (post_access)\\n\");     @elapsed_post_access = avg(elapsed_post_access);     elapsed_post_access = 0;     exit(0); }<\/code><\/pre>\n<pre><code># dtrace -s .\/post_access.d 97725 dtrace: script '.\/post_access.d' matched 4 probes CPU     ID                    FUNCTION:NAME   7  71748   ngx_http_init_connection:entry init    7  71754 ngx_http_core_post_access_phase:entry begin (post_access): 18833138568826655    7  71755 ngx_http_core_post_access_phase:return elapsed (post_access): 3543    7  71751 ngx_http_finalize_request:return final (post_access)                3543<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u0435\u0447\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043f\u0430\u044f\u0441\u044c \u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0445 \u0442\u0435\u043b\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0445 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0437\u0430\u0434\u0430\u0447\u0443, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <em>index.html<\/em> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0443 <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc2822\" rel=\"noopener noreferrer nofollow\"><em>rfc2822<\/em><\/a>, \u0438 \u0441\u043e\u0431\u0435\u0440\u0435\u043c <em>Nginx<\/em> c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0440\u043e\u0434\u043d\u043e\u0433\u043e <em>http_sub_module<\/em> \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e <em>ngx_http_substitutions_filter_module<\/em>.<\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0430 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0432\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"nginx\">  location \/ {     sub_filter 'span'  'div';     sub_filter_once off;       }<\/code><\/pre>\n<pre><code class=\"nginx\">  location \/ {     subs_filter 'span'  'div';   }<\/code><\/pre>\n<p>\u0418 \u0434\u0432\u0430 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f <em>dtrace:<\/em><\/p>\n<details class=\"spoiler\">\n<summary>sub<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"css\">#!\/usr\/sbin\/dtrace -s  pid$1::ngx_http_init_connection:entry {     printf(\"init\\n\");     elapsed_sub_filter = 0; }  pid$1::ngx_http_sub_body_filter:entry {     begin_sub_filter = timestamp;     printf(\"begin (sub_filter): %d\\n\", begin_sub_filter); }  pid$1::ngx_http_sub_body_filter:return \/begin_sub_filter &gt; 0\/ {     elapsed_sub_filter += timestamp - begin_sub_filter;     begin_sub_filter = 0;     printf(\"elapsed (sub_filter): %d\\n\", elapsed_sub_filter); }  pid$1::ngx_http_finalize_request:return \/elapsed_sub_filter &gt; 0\/ {     exit(0); }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>subs<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"css\">#!\/usr\/sbin\/dtrace -s  pid$1::ngx_http_init_connection:entry {     printf(\"init\\n\");     elapsed_subs_filter = 0; }  pid$1::ngx_http_subs_body_filter:entry {     begin_subs_filter = timestamp;     printf(\"begin (subs_filter): %d\\n\", begin_subs_filter); }  pid$1::ngx_http_subs_body_filter:return \/begin_subs_filter &gt; 0\/ {     elapsed_subs_filter += timestamp - begin_subs_filter;     begin_subs_filter = 0;     printf(\"elapsed (subs_filter): %d\\n\", elapsed_subs_filter); }  pid$1::ngx_http_finalize_request:return \/elapsed_subs_filter &gt; 0\/ {    exit(0); } <\/code><\/pre>\n<\/div>\n<\/details>\n<pre><code># dtrace -s .\/sub_filter.d `pgrep -f 'nginx: worker process'` dtrace: script '.\/sub_filter.d' matched 4 probes CPU     ID                    FUNCTION:NAME   2  71748   ngx_http_init_connection:entry init    2  71752   ngx_http_sub_body_filter:entry begin (sub_filter): 19078115202094268    2  71753  ngx_http_sub_body_filter:return elapsed (sub_filter): 58548    2  71752   ngx_http_sub_body_filter:entry begin (sub_filter): 19078115202360871    2  71753  ngx_http_sub_body_filter:return elapsed (sub_filter): 118098    2  71752   ngx_http_sub_body_filter:entry begin (sub_filter): 19078115202697212    2  71753  ngx_http_sub_body_filter:return elapsed (sub_filter): 169395    2  71752   ngx_http_sub_body_filter:entry begin (sub_filter): 19078115202919509    2  71753  ngx_http_sub_body_filter:return elapsed (sub_filter): 225577    2  71752   ngx_http_sub_body_filter:entry begin (sub_filter): 19078115203186481    2  71753  ngx_http_sub_body_filter:return elapsed (sub_filter): 256872    2  71751 ngx_http_finalize_request:return<\/code><\/pre>\n<pre><code># dtrace -s .\/subs_filter.d `pgrep -f 'nginx: worker process'` dtrace: script '.\/subs_filter.d' matched 4 probes CPU     ID                    FUNCTION:NAME   2  71748   ngx_http_init_connection:entry init    2  71749  ngx_http_subs_body_filter:entry begin (subs_filter): 19078177580261158    2  71750 ngx_http_subs_body_filter:return elapsed (subs_filter): 195538    2  71749  ngx_http_subs_body_filter:entry begin (subs_filter): 19078177580467254    2  71750 ngx_http_subs_body_filter:return elapsed (subs_filter): 336789    2  71749  ngx_http_subs_body_filter:entry begin (subs_filter): 19078177580616159    2  71750 ngx_http_subs_body_filter:return elapsed (subs_filter): 484982    2  71749  ngx_http_subs_body_filter:entry begin (subs_filter): 19078177580772832    2  71750 ngx_http_subs_body_filter:return elapsed (subs_filter): 623289    2  71749  ngx_http_subs_body_filter:entry begin (subs_filter): 19078177580916291    2  71750 ngx_http_subs_body_filter:return elapsed (subs_filter): 700474    2  71751 ngx_http_finalize_request:return final<\/code><\/pre>\n<p>\u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0448\u0442\u0443\u0447\u043d\u043e\u043c\u0443 \u0442\u0435\u0441\u0442\u0443 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0441\u043e\u0431\u0440\u0430\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<details class=\"spoiler\">\n<summary>sub_filter_avg.d<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"css\">#!\/usr\/sbin\/dtrace -s  pid$1::ngx_http_init_connection:entry {     elapsed_sub_filter = 0; }  pid$1::ngx_http_sub_body_filter:entry {     begin_sub_filter = timestamp; }  pid$1::ngx_http_sub_body_filter:return \/begin_sub_filter &gt; 0\/ {     elapsed_sub_filter += timestamp - begin_sub_filter;     begin_sub_filter = 0; }  pid$1::ngx_http_finalize_request:return \/elapsed_sub_filter &gt; 0\/ {     @elapsed_sub_filter = avg(elapsed_sub_filter); }<\/code><\/pre>\n<\/div>\n<\/details>\n<pre><code>$ ab -k -c1 -n1000000 'example.com\/index.html'<\/code><\/pre>\n<pre><code># dtrace -s .\/sub_filter_avg.d `pgrep -f 'nginx: worker process'` dtrace: script '.\/sub_filter_avg.d' matched 4 probes ^C             245971<\/code><\/pre>\n<pre><code># dtrace -s .\/subs_filter_avg.d `pgrep -f 'nginx: worker process'` dtrace: script '.\/subs_filter_avg.d' matched 4 probes ^C             651586<\/code><\/pre>\n<p>\u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0432 2.6 \u0440\u0430\u0437\u0430, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 &#8212; \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 400 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430. \u041d\u043e \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <em>regex<\/em>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0435 \u0434\u0430\u0451\u0442 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432.<\/p>\n<p>\u0411\u044b\u0442\u0443\u0435\u0442 \u043c\u043d\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0441 \u0432\u0435\u0442\u043e\u043a 1.9+ <em>sub_filter<\/em> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0441\u044f. \u0420\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u044f \u043e\u0442\u043a\u0430\u0442\u0438\u043b\u0441\u044f \u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439<\/p>\n<p>1.8.1:<\/p>\n<pre><code># dtrace -s .\/sub_filter_avg.d `pgrep -f 'nginx: worker process'` dtrace: script '.\/sub_filter_avg.d' matched 4 probes ^C             244136<\/code><\/pre>\n<p>1.6.3:<\/p>\n<pre><code># dtrace -s .\/sub_filter_avg.d `pgrep -f 'nginx: worker process'` dtrace: script '.\/sub_filter_avg.d' matched 4 probes ^C             240079<\/code><\/pre>\n<p>\u043d\u043e \u043d\u0430 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b.<\/p>\n<p>\u041f\u043e\u0434\u0432\u043e\u0434\u044f \u0438\u0442\u043e\u0433\u0438. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0445\u043e\u0442\u044f <em>OpenResty<\/em> \u0438 \u043d\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u0432\u0441\u0451 \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0441 \u0446\u0435\u043b\u044c\u044e \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 <a href=\"https:\/\/habr.com\/ru\/post\/561758\/#comment_23187166\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439<\/a> \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u042f \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u0440\u044f\u043c\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e \u0431\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443 \u043c\u0435\u043d\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u0442, \u043d\u043e \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043c\u043e\u0433, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0442\u043e\u0442 \u043f\u0443\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0432\u0435\u043b \u043c\u0435\u043d\u044f \u043a \u043e\u0442\u043a\u0430\u0437\u0443, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043e\u0442 <em>OpenResty<\/em> \u0432\u043e\u043e\u0431\u0449\u0435, \u0442\u043e, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0435\u0433\u043e \u0441 \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u0430\u043a, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u0438 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044f.<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/567978\/\"> https:\/\/habr.com\/ru\/post\/567978\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p><em>Nginx<\/em> \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0432\u0441\u044e \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447, \u043d\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e  \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u0435\u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u0442\u043e\u0433\u0434\u0430 \u043c\u044b \u043b\u0438\u0431\u043e \u0431\u0435\u0440\u0435\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u043b\u0438\u0431\u043e \u043f\u0438\u0448\u0435\u043c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439. <\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u0430\u0432\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0438 \u0438\u043c\u0435\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u043e\u0442\u0437\u044b\u0432\u044b, \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438, \u0447\u0442\u043e \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043f\u0440\u0438\u0447\u0435\u043c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0441\u0431\u043e\u0440\u043a\u0435<em>. <\/em>\u0410 <em>Nginx<\/em>, \u043a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0440\u043e\u0436\u0434\u0451\u043d \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u043c\u043e\u0434\u0443\u043b\u0438, \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u043e\u0432\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439 \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. <\/p>\n<p>\u0412 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/post\/561758\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435 <\/a>\u043c\u044b \u0441\u043d\u044f\u043b\u0438 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0441\u043b\u043e\u0439 \u0433\u0440\u0443\u043d\u0442\u0430, \u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043a\u043e\u043f\u0430\u0442\u044c \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0433\u043b\u0443\u0431\u0436\u0435. \u0412 \u0441\u0430\u043c\u043e\u043c <em>Nginx <\/em>\u0435\u0441\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0438 \u043e\u043d \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0432\u044b\u044f\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0435 \u0433\u043e\u0434\u0438\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0430\u043c \u0432\u043d\u043e\u0441\u0438\u0442 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u0443\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u0442\u0443\u0442, \u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u043b\u0443\u0447\u0448\u0435, \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 <em>dtrace<\/em>.<\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435, \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u044d\u043a\u0441\u043a\u0430\u0432\u0430\u0442\u043e\u0440\u0449\u0438\u043a\u0438 \u0433\u043e\u0442\u043e\u0432\u044f\u0442 <em>dtrace<\/em> \u0432\u043e\u0442 <a href=\"http:\/\/nginx.org\/en\/docs\/nginx_dtrace_pid_provider.html\" rel=\"noopener noreferrer nofollow\">\u0442\u0430\u043a<\/a>. \u041d\u043e \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434, \u0438\u0437-\u0437\u0430 \u0442\u044c\u043c\u044b \u043f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u0442\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043b\u0438\u0431\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432, \u043b\u0438\u0431\u043e \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0438 \u0442\u0438\u043f\u043e\u0432. \u041c\u044b, \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0447\u0435\u0440\u043d\u043e\u0440\u0430\u0431\u043e\u0447\u0438\u0435, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043f\u0440\u043e\u0449\u0435.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043c <em>Nginx<\/em> \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0434\u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c<\/p>\n<pre><code class=\"nginx\">worker_processes 1;<\/code><\/pre>\n<p>\u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e:<\/p>\n<pre><code class=\"nginx\">server {   root \/www\/example_com;   index index.html;   listen       *:80;   server_name  .example.com;   location \/ {   } }<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a\u043e\u0439 \u043f\u0443\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u0448 \u0437\u0430\u043f\u0440\u043e\u0441, \u0441\u043e\u0437\u0434\u0430\u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 <a href=\"https:\/\/docs.oracle.com\/en\/operating-systems\/oracle-linux\/dtrace-guide\/dt_dlang.html\" rel=\"noopener noreferrer nofollow\"><em>D<\/em><\/a><em> <\/em>(\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0443\u0442\u0430\u0442\u044c \u0441 \u044f\u0437\u044b\u043a\u043e\u043c <a href=\"https:\/\/dlang.org\/\" rel=\"noopener noreferrer nofollow\"><em>D<\/em><\/a>). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043e\u043f\u0446\u0438\u0435\u0439 <em>flowindent<\/em>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432.<\/p>\n<pre><code class=\"css\">#!\/usr\/sbin\/dtrace -s #pragma D option flowindent  pid$1::ngx_http_init_connection:entry {   self-&gt;traceme = 1; }  pid$1:nginx:ngx_http*:entry { }  pid$1:nginx:ngx_http*:return { }  pid$1::ngx_http_finalize_request:return {   trace(arg1);   self-&gt;traceme = 0;   exit(0); }<\/code><\/pre>\n<p>\u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u043f\u0443\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0410\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e, 169 \u0441\u0442\u0440\u043e\u043a<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>CPU FUNCTION   3  -&gt; ngx_http_init_connection   3  &lt;- ngx_http_init_connection   3  -&gt; ngx_http_wait_request_handler   3    -&gt; ngx_http_alloc_request   3    &lt;- ngx_http_alloc_request   3  &lt;- ngx_http_wait_request_handler   3  -&gt; ngx_http_process_request_line   3    -&gt; ngx_http_read_request_header   3    &lt;- ngx_http_read_request_header   3    -&gt; ngx_http_parse_request_line   3    &lt;- ngx_http_parse_request_line   3    -&gt; ngx_http_process_request_uri   3    &lt;- ngx_http_process_request_uri   3    -&gt; ngx_http_process_request_headers   3      -&gt; ngx_http_read_request_header   3      &lt;- ngx_http_read_request_header   3      -&gt; ngx_http_parse_header_line   3      &lt;- ngx_http_parse_header_line   3      -&gt; ngx_http_process_header_line   3      &lt;- ngx_http_process_header_line   3      -&gt; ngx_http_parse_header_line   3      &lt;- ngx_http_parse_header_line   3      -&gt; ngx_http_process_connection   3      &lt;- ngx_http_process_connection   3      -&gt; ngx_http_parse_header_line   3      &lt;- ngx_http_parse_header_line   3      -&gt; ngx_http_process_host   3        -&gt; ngx_http_validate_host   3        &lt;- ngx_http_validate_host   3        -&gt; ngx_http_set_virtual_server   3          -&gt; ngx_http_find_virtual_server   3          &lt;- ngx_http_find_virtual_server   3        &lt;- ngx_http_set_virtual_server   3      &lt;- ngx_http_process_host   3      -&gt; ngx_http_parse_header_line   3      &lt;- ngx_http_parse_header_line   3      -&gt; ngx_http_process_user_agent   3      &lt;- ngx_http_process_user_agent   3      -&gt; ngx_http_parse_header_line   3      &lt;- ngx_http_parse_header_line   3      -&gt; ngx_http_process_request_header   3      &lt;- ngx_http_process_request_header   3      -&gt; ngx_http_process_request   3        -&gt; ngx_http_handler   3          -&gt; ngx_http_core_generic_phase   3            -&gt; ngx_http_realip_handler   3            &lt;- ngx_http_realip_handler   3          &lt;- ngx_http_core_generic_phase   3          -&gt; ngx_http_core_rewrite_phase   3            -&gt; ngx_http_rewrite_handler   3            &lt;- ngx_http_rewrite_handler   3          &lt;- ngx_http_core_rewrite_phase   3          -&gt; ngx_http_core_find_config_phase   3            -&gt; ngx_http_core_find_location   3              -&gt; ngx_http_core_find_location   3              &lt;- ngx_http_core_find_location   3            &lt;- ngx_http_core_find_location   3            -&gt; ngx_http_update_location_config   3            &lt;- ngx_http_update_location_config   3          &lt;- ngx_http_core_find_config_phase   3          -&gt; ngx_http_core_rewrite_phase   3            -&gt; ngx_http_rewrite_handler   3            &lt;- ngx_http_rewrite_handler   3          &lt;- ngx_http_core_rewrite_phase   3          -&gt; ngx_http_core_post_rewrite_phase   3          &lt;- ngx_http_core_post_rewrite_phase   3          -&gt; ngx_http_core_generic_phase   3            -&gt; ngx_http_realip_handler   3            &lt;- ngx_http_realip_handler   3          &lt;- ngx_http_core_generic_phase   3          -&gt; ngx_http_core_generic_phase   3            -&gt; ngx_http_limit_req_handler   3            &lt;- ngx_http_limit_req_handler   3          &lt;- ngx_http_core_generic_phase   3          -&gt; ngx_http_core_generic_phase   3            -&gt; ngx_http_limit_conn_handler   3            &lt;- ngx_http_limit_conn_handler   3          &lt;- ngx_http_core_generic_phase   3          -&gt; ngx_http_core_access_phase   3            -&gt; ngx_http_access_handler   3            &lt;- ngx_http_access_handler   3          &lt;- ngx_http_core_access_phase   3          -&gt; ngx_http_core_access_phase   3            -&gt; ngx_http_auth_basic_handler   3            &lt;- ngx_http_auth_basic_handler   3          &lt;- ngx_http_core_access_phase   3          -&gt; ngx_http_core_access_phase   3            -&gt; ngx_http_auth_request_handler   3            &lt;- ngx_http_auth_request_handler   3          &lt;- ngx_http_core_access_phase   3          -&gt; ngx_http_core_post_access_phase   3          &lt;- ngx_http_core_post_access_phase   3          -&gt; ngx_http_core_generic_phase   3            -&gt; ngx_http_try_files_handler   3            &lt;- ngx_http_try_files_handler   3          &lt;- ngx_http_core_generic_phase   3          -&gt; ngx_http_core_generic_phase   3            -&gt; ngx_http_mirror_handler   3            &lt;- ngx_http_mirror_handler   3          &lt;- ngx_http_core_generic_phase   3          -&gt; ngx_http_core_content_phase   3            -&gt; ngx_http_index_handler   3            &lt;- ngx_http_index_handler   3          &lt;- ngx_http_core_content_phase   3          -&gt; ngx_http_core_content_phase   3            -&gt; ngx_http_autoindex_handler   3            &lt;- ngx_http_autoindex_handler   3          &lt;- ngx_http_core_content_phase   3          -&gt; ngx_http_core_content_phase   3            -&gt; ngx_http_gzip_static_handler   3            &lt;- ngx_http_gzip_static_handler   3          &lt;- ngx_http_core_content_phase   3          -&gt; ngx_http_core_content_phase   3            -&gt; ngx_http_static_handler   3              -&gt; ngx_http_map_uri_to_path   3              &lt;- ngx_http_map_uri_to_path   3              -&gt; ngx_http_set_disable_symlinks   3              &lt;- ngx_http_set_disable_symlinks   3              -&gt; ngx_http_discard_request_body   3              &lt;- ngx_http_discard_request_body   3              -&gt; ngx_http_set_etag   3              &lt;- ngx_http_set_etag   3              -&gt; ngx_http_set_content_type   3              &lt;- ngx_http_set_content_type   3              -&gt; ngx_http_send_header   3                -&gt; ngx_http_not_modified_header_filter   3                  -&gt; ngx_http_headers_filter   3                    -&gt; ngx_http_userid_filter   3                      -&gt; ngx_http_sub_header_filter   3                        -&gt; ngx_http_charset_header_filter   3                          -&gt; ngx_http_ssi_header_filter   3                            -&gt; ngx_http_gzip_header_filter   3                              -&gt; ngx_http_range_header_filter   3                                -&gt; ngx_http_chunked_header_filter   3                                  -&gt; ngx_http_header_filter   3                                    -&gt; ngx_http_time   3                                    &lt;- ngx_http_time   3                                    -&gt; ngx_http_write_filter   3                                    &lt;- ngx_http_write_filter   3                                  &lt;- ngx_http_header_filter   3                                &lt;- ngx_http_charset_header_filter   3                              &lt;- ngx_http_headers_filter   3                              -&gt; ngx_http_output_filter   3                                -&gt; ngx_http_range_body_filter   3                                  -&gt; ngx_http_copy_filter   3                                    -&gt; ngx_http_trailers_filter   3                                      -&gt; ngx_http_sub_body_filter   3                                        -&gt; ngx_http_charset_body_filter   3                                          -&gt; ngx_http_ssi_body_filter   3                                            -&gt; ngx_http_postpone_filter   3                                              -&gt; ngx_http_gzip_body_filter   3                                                -&gt; ngx_http_chunked_body_filter   3                                                  -&gt; ngx_http_write_filter   3                                                    -&gt; ngx_http_complex_value_size   3                                                    &lt;- ngx_http_complex_value_size   3                                                  &lt;- ngx_http_write_filter   3                                                &lt;- ngx_http_chunked_body_filter   3                                              &lt;- ngx_http_gzip_body_filter   3                                            &lt;- ngx_http_ssi_body_filter   3                                          &lt;- ngx_http_charset_body_filter   3                                        &lt;- ngx_http_trailers_filter   3                                      &lt;- ngx_http_copy_filter   3                                    &lt;- ngx_http_output_filter   3         <\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-326646","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/326646","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=326646"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/326646\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=326646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=326646"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=326646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}