Lua-resty-auto-ssl: Nginx.conf рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж Nginx рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдлрд╝рд░ре░ 2019  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: auto-ssl/lua-resty-auto-ssl

рдореИрдВрдиреЗ рдбреЗрдмрд┐рдпрди 9 . рдХреА рдПрдХ рдирдИ рд╕реНрдерд╛рдкрдирд╛ рдкрд░ рд▓реБрдЖ-рд░реЗрд╕реНрдЯреА-рдСрдЯреЛ-рдПрд╕рдПрд╕рдПрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛

рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛:

apt update
apt install nginx
apt install build-essential
apt install luarocks
luarocks install lua-resty-auto-ssl
mkdir /etc/resty-auto-ssl
chown www-data /etc/resty-auto-ssl

рдореИрдВрдиреЗ рддрдм /etc/nginx/nginx.conf рдХреЛ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ https://github.com/GUI/lua-resty-auto-ssl

рд▓реЗрдХрд┐рди рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде ngix.conf рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, nginx рдЕрдм рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛

рдореБрдЭреЗ рд╕рдордЭ рдЖ рдЧрдпрд╛

root<strong i="13">@vultr</strong>:/etc/nginx# /etc/init.d/nginx start
[....] Starting nginx (via systemctl): nginx.serviceJob for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xe" for details.
 failed!
root<strong i="14">@vultr</strong>:/etc
root<strong i="17">@vultr</strong>:/etc/nginx# systemctl status nginx.service
тЧП nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2019-02-02 20:17:41 UTC; 50s ago
     Docs: man:nginx(8)
  Process: 6606 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 483 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 6923 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)
 Main PID: 496 (code=exited, status=0/SUCCESS)

Feb 02 20:17:41 vultr.guest systemd[1]: Starting A high performance web server and a reverse proxy server...
Feb 02 20:17:41 vultr.guest nginx[6923]: nginx: [emerg] unknown directive "lua_shared_dict" in /etc/nginx/nginx.conf:14
Feb 02 20:17:41 vultr.guest nginx[6923]: nginx: configuration file /etc/nginx/nginx.conf test failed
Feb 02 20:17:41 vultr.guest systemd[1]: nginx.service: Control process exited, code=exited status=1
Feb 02 20:17:41 vultr.guest systemd[1]: Failed to start A high performance web server and a reverse proxy server.
Feb 02 20:17:41 vultr.guest systemd[1]: nginx.service: Unit entered failed state.
Feb 02 20:17:41 vultr.guest systemd[1]: nginx.service: Failed with result 'exit-code'.

рдореЗрд░реЗ nginx.conf . рдХреА рд╕рд╛рдордЧреНрд░реА

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
  worker_connections 1024;
}

http {
  # The "auto_ssl" shared dict should be defined with enough storage space to
  # hold your certificate data. 1MB of storage holds certificates for
  # approximately 100 separate domains.
  lua_shared_dict auto_ssl 1m;
  # The "auto_ssl_settings" shared dict is used to temporarily store various settings
  # like the secret used by the hook server on port 8999. Do not change or
  # omit it.
  lua_shared_dict auto_ssl_settings 64k;

  # A DNS resolver must be defined for OCSP stapling to function.
  #
  # This example uses Google's DNS server. You may want to use your system's
  # default DNS servers, which can be found in /etc/resolv.conf. If your network
  # is not IPv6 compatible, you may wish to disable IPv6 results by using the
  # "ipv6=off" flag (like "resolver 8.8.8.8 ipv6=off").
  resolver 8.8.8.8;

  # Initial setup tasks.
  init_by_lua_block {
    auto_ssl = (require "resty.auto-ssl").new()

    -- Define a function to determine which SNI domains to automatically handle
    -- and register new certificates for. Defaults to not allowing any domains,
    -- so this must be configured.
    auto_ssl:set("allow_domain", function(domain)
      return true
    end)

    auto_ssl:init()
  }

  init_worker_by_lua_block {
    auto_ssl:init_worker()
  }

  # HTTPS server
  server {
    listen 443 ssl;

    # Dynamic handler for issuing or returning certs for SNI domains.
    ssl_certificate_by_lua_block {
      auto_ssl:ssl_certificate()
    }

    # You must still define a static ssl_certificate file for nginx to start.
    #
    # You may generate a self-signed fallback with:
    #
    # openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
    #   -subj '/CN=sni-support-required-for-valid-ssl' \
    #   -keyout /etc/ssl/resty-auto-ssl-fallback.key \
    #   -out /etc/ssl/resty-auto-ssl-fallback.crt
    ssl_certificate /etc/ssl/resty-auto-ssl-fallback.crt;
    ssl_certificate_key /etc/ssl/resty-auto-ssl-fallback.key;
  }

  # HTTP server
  server {
    listen 80;

    # Endpoint used for performing domain verification with Let's Encrypt.
    location /.well-known/acme-challenge/ {
      content_by_lua_block {
        auto_ssl:challenge_server()
      }
    }
  }

  # Internal server running on port 8999 for handling certificate tasks.
  server {
    listen 127.0.0.1:8999;

    # Increase the body buffer size, to ensure the internal POSTs can always
    # parse the full POST contents into memory.
    client_body_buffer_size 128k;
    client_max_body_size 128k;

    location / {
      content_by_lua_block {
        auto_ssl:hook_server()
      }
    }
  }
}

рдХреБрдЫ рдкрддрд╛ рд╣реИ рдХреНрдпрд╛ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ?

рд╕рднреА 11 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ nginx lua рдХреЛ рдареАрдХ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЙрдмрдВрдЯреВ 16:04 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдореЗрд░реА рдбреЙрдХрд░рдлрд╛рдЗрд▓ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛:
https://pastebin.com/dnENPEaM
рд╕рд╣реА рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдареАрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ nginx lua рдХреЛ рдареАрдХ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЙрдмрдВрдЯреВ 16:04 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдореЗрд░реА рдбреЙрдХрд░рдлрд╛рдЗрд▓ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛:
https://pastebin.com/dnENPEaM
рд╕рд╣реА рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдареАрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдКрдВрдЧрд╛ред рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреБрдХреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ nginx рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдареАрдХ рд╣реИ?

рдореИрдВрдиреЗ рдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдпреЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИрдВ

ADD mime.types /etc/nginx/
ADD fastcgi_params /etc/nginx/

ADD ./start.sh /root/

рдореИрдВрдиреЗ рдЙрд╕ рдмрд┐рдВрджреБ рддрдХ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдХрд┐рдпрд╛ рдФрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИ

рдЖрдк рд╢рд╛рдпрдж рдУрдкрдирд░реЗрд╕реНрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИрдВ

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЕрднреА рднреА рдХреЛрдИ рд╕рдлрд▓рддрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдбреЗрдмрд┐рдпрди 9 рдХреА рдПрдХ рдирдИ рд╕реНрдерд╛рдкрдирд╛ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛, рдЗрд╕ рдмрд╛рд░ рдореИрдВрдиреЗ Ngix рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Openresty рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛

apt update
apt upgrade
wget -qO - https://openresty.org/package/pubkey.gpg | apt-key add -
apt-get -y install software-properties-common
add-apt-repository -y "deb http://openresty.org/package/debian $(lsb_release -sc) openresty"
apt-get update
apt-get install openresty
apt install luarocks
apt install build-essential
luarocks install lua-resty-auto-ssl
mkdir /etc/resty-auto-ssl
chown www-data /etc/resty-auto-ssl

рдлрд┐рд░ рдореИрдВрдиреЗ /etc/openresty/nginx.conf . рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рдореНрди рдорд┐рд▓рддрд╛ рд╣реИ:

root<strong i="10">@vultr</strong>:/etc/openresty# /etc/init.d/openresty start
[....] Starting openresty (via systemctl): openresty.serviceJob for openresty.service failed because the control process exited with error code.
See "systemctl status openresty.service" and "journalctl -xe" for details.
 failed!

рдФрд░ рддреНрд░реБрдЯрд┐ рд╣реИ

root<strong i="14">@vultr</strong>:~# systemctl status --no-pager --full openresty.service      
тЧП openresty.service - full-fledged web platform
   Loaded: loaded (/lib/systemd/system/openresty.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sun 2019-02-03 19:44:22 UTC; 16min ago
  Process: 18855 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /usr/local/openresty/nginx/logs/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 18886 ExecStartPre=/usr/local/openresty/nginx/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)
 Main PID: 12782 (code=exited, status=0/SUCCESS)

Feb 03 19:44:22 vultr.guest systemd[1]: Starting full-fledged web platform...
Feb 03 19:44:22 vultr.guest nginx[18886]: nginx: [emerg] BIO_new_file("/etc/ssl/resty-auto-ssl-fallback.crt") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/ssl/resty-auto-ssl-fallback.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
Feb 03 19:44:22 vultr.guest nginx[18886]: nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test failed
Feb 03 19:44:22 vultr.guest systemd[1]: openresty.service: Control process exited, code=exited status=1
Feb 03 19:44:22 vultr.guest systemd[1]: Failed to start full-fledged web platform.
Feb 03 19:44:22 vultr.guest systemd[1]: openresty.service: Unit entered failed state.
Feb 03 19:44:22 vultr.guest systemd[1]: openresty.service: Failed with result 'exit-code'.

рдореИрдВрдиреЗ рдЗрд╕реЗ рджреМрдбрд╝рдХрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛

openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj '/CN=sni-support-required-for-valid-ssl' \
> -keyout /etc/ssl/resty-auto-ssl-fallback.key -out /etc/ssl/resty-auto-ssl-fallback.crt

рдЕрдм рдореИрдВ рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдореИрдВ https://mydomain.com рдкрд░ рдЬрд╛рддрд╛ рд╣реВрдВ рддреЛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ "sni-support-required-for-valid-ssl" рджреНрд╡рд╛рд░рд╛ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП letsencrypt рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рдПрдХ рдЕрдиреБрдорддрд┐ рдореБрджреНрджрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ nginx рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд░реВрдЯ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реВрдВ рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬреВрдВрдЧрд╛ рдФрд░ рдлрд┐рд░ рдореИрдВ рдПрдХ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЧрд╛рдЗрдб рд▓рд┐рдЦреВрдВрдЧрд╛ред

рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рд▓рд┐рдЦреА рд╣реИ

рдбреЗрдмрд┐рдпрди рдкрд░ рд▓реБрдЖ рд░реЗрд╕реНрдЯреА рдСрдЯреЛ рдПрд╕рдПрд╕рдПрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рдореЗрд░реЗ nginx.conf . рдХреА рд╕рд╛рдордЧреНрд░реА

`рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ www-рдбреЗрдЯрд╛;
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛_рдкреНрд░реЛрд╕реЗрд╕ рдСрдЯреЛ;
pid /run/nginx.pid;

рдпрджрд┐ рдЖрдк рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдПрд╕реНрдХреЗрдк рдЪрд╛рд░ рдХреЛ рд░рд┐рдореЛрдЯ рдХрд░реЗрдВ

рд╢рд╛рдорд┐рд▓ /etc/nginx/modules-enabled/*.conf;

рдЖрдпреЛрдЬрди {
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛_рдХрдиреЗрдХреНрд╢рди 768;
}

рдПрдЪрдЯреАрдЯреАрдкреА {

# рдмреБрдирд┐рдпрд╛рджреА рд╡рд┐рдиреНрдпрд╛рд╕
рд╕реЗрдВрдбрдлрд╛рдЗрд▓ рдЪрд╛рд▓реВ;
tcp_nopush рдСрди;
tcp_nodelay рдЪрд╛рд▓реВ;
Keepalive_timeout 65;
type_hash_max_size 2048;
/etc/nginx/mime.types рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ;
default_type рдПрдкреНрд▓рд┐рдХреЗрд╢рди/рдСрдХреНрдЯреЗрдЯ-рд╕реНрдЯреНрд░реАрдо;

# рдПрд╕рдПрд╕рдПрд▓ рд╡рд┐рдиреНрдпрд╛рд╕
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers рдЪрд╛рд▓реВ;

# рд▓реЙрдЧрд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
log_format рдХрд╕реНрдЯрдо '$remote_addr - $remote_user [$time_local] '
'"$рдЕрдиреБрд░реЛрдз" $рд╕реНрдерд┐рддрд┐ $body_bytes_sent'
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log рдХрд╕реНрдЯрдо;
error_log /var/log/nginx/error.log;

#рдЧрдЬрд╝рд┐рдк
рдЧрдЬрд╝рд┐рдк рдСрди;

# рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рд╢рд╛рдорд┐рд▓ /etc/nginx/conf.d/*.conf;

рд╢рд╛рдорд┐рд▓ /etc/nginx/рд╕рд╛рдЗрдЯ-рд╕рдХреНрд╖рдо/*;

lua_shared_dict prometheus_metrics 10M;
lua_package_path "/home/kunal/Documents/nginx-lua-prometheus/?.lua;;";
init_worker_by_lua_block {
рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("рдкреНрд░реЛрдореЗрдерд┐рдпрд╕")ред init ("prometheus_metrics")
metric_requests = p rometheus: рдХрд╛рдЙрдВрдЯрд░ (
"nginx_http_requests_total", "HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛", {"рд╣реЛрд╕реНрдЯ", "рд╕реНрдерд┐рддрд┐"})
metric_latency = p rometheus:рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо (
"nginx_http_request_duration_seconds", "HTTP рдЕрдиреБрд░реЛрдз рд╡рд┐рд▓рдВрдмрддрд╛", {"рд╣реЛрд╕реНрдЯ"})
metric_connections = p rometheus:рдЧреЗрдЬ (
"nginx_http_connections", "HTTP рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛", {"рд░рд╛рдЬреНрдп"})
}
log_by_lua_block {
рдореЗрдЯреНрд░рд┐рдХ_ рдЕрдиреБрд░реЛрдз: рдЗрдВрдХ (1, {ngx.var.server_name, ngx.var.status})
рдореАрдЯреНрд░рд┐рдХ_ рд╡рд┐рд▓рдВрдмрддрд╛: рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВ (tonumber(ngx.var.request_time), {ngx.var.server_name})
}
`

рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ рдкрд░ рдХреЛрдИ рд╕реБрдЭрд╛рд╡?

рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рд▓рд┐рдЦреА рд╣реИ

рдбреЗрдмрд┐рдпрди рдкрд░ рд▓реБрдЖ рд░реЗрд╕реНрдЯреА рдСрдЯреЛ рдПрд╕рдПрд╕рдПрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рдЕрд░реЗ @ рдЖрд░реНрдп 6000 ,

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд▓рд┐рдВрдХ рдЕрдм рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ :(

рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдк рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕