Lua-resty-auto-ssl: Nginx ne démarre pas après le remplacement du contenu de nginx.conf

Créé le 2 févr. 2019  ·  11Commentaires  ·  Source: auto-ssl/lua-resty-auto-ssl

J'ai essayé d'installer lua-resty-auto-ssl sur une nouvelle installation de Debian 9

j'ai fait ce qui suit

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

J'ai ensuite remplacé /etc/nginx/nginx.conf par l'exemple minimal posté ici dans le read me https://github.com/GUI/lua-resty-auto-ssl

Mais après avoir remplacé le contenu de ngix.conf par l'exemple minimal, nginx ne peut plus démarrer

Je reçois

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'.

contenu de mon 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()
      }
    }
  }
}

Une idée de ce qui ne va pas ?

Tous les 11 commentaires

On dirait que nginx ne charge pas correctement lua.
Voici mon fichier docker, basé sur Ubuntu 16:04. Peut-être que ça t'aidera :
https://pastebin.com/dnENPEaM
Avec la bonne configuration, votre configuration devrait fonctionner correctement

On dirait que nginx ne charge pas correctement lua.
Voici mon fichier docker, basé sur Ubuntu 16:04. Peut-être que ça t'aidera :
https://pastebin.com/dnENPEaM
Avec la bonne configuration, votre configuration devrait fonctionner correctement

Merci, je vais exécuter manuellement les commandes du fichier pour l'installer. Vous pouvez installer nginx en utilisant apt avant tout, n'est-ce pas ?

J'ai commencé à suivre votre fichier, mais je ne comprends pas à quoi servent ces lignes

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

ADD ./start.sh /root/

J'ai fait tout le reste jusqu'à ce point et aucune erreur

Vous feriez probablement mieux d'utiliser openresty

Malheureusement toujours pas de succès. J'ai fait ce qui suit sur une nouvelle installation de Debian 9, cette fois je n'ai pas installé Ngix mais j'ai installé Openresty à la place

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

J'ai ensuite modifié le contenu de /etc/openresty/nginx.conf

mais j'obtiens ce qui suit après avoir essayé de le démarrer

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!

et l'erreur est

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'.

Je l'ai commencé par courir

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

Le seul problème auquel je suis confronté maintenant est que si je vais sur https://mydomain.com, le certificat est par "sni-support-required-for-valid-ssl" il semble qu'il ne génère pas de certificat letsencrypt pour mon domaine.

C'est un problème d'autorisation. Si je change d'utilisateur nginx en root, tout fonctionne bien. Je vais trouver un moyen de le réparer et ensuite j'écrirai un guide d'installation.

Merci de votre aide. J'ai écrit un guide étape par étape pour référence future

Installation de lua resty auto ssl sur Debian

Contenu de mon nginx.conf

`utilisateur www-données ;
worker_processes automatique ;
pid /run/nginx.pid;

distant le caractère d'échappement si vous allez utiliser cette configuration

inclure /etc/nginx/modules-enabled/*.conf ;

événements {
connexions_travailleurs 768 ;
}

http {

# configuration de base
envoyer le fichier activé ;
tcp_nopush activé ;
tcp_nodelay activé ;
keepalive_timeout 65 ;
types_hash_max_size 2048 ;
inclure /etc/nginx/mime.types ;
default_type application/octet-stream ;

# configuration ssl
protocoles_ssl TLSv1 TLSv1.1 TLSv1.2 ;
ssl_prefer_server_ciphers activé ;

# configuration de journalisation
log_format personnalisé '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for"' ;

access_log /var/log/nginx/access.log personnalisé ;
error_log /var/log/nginx/error.log;

# gzip
gzip activé ;

# configuration d'hôte virtuel
inclure /etc/nginx/conf.d/*.conf ;

inclure /etc/nginx/sites-enabled/* ;

lua_shared_dict prometheus_metrics 10M ;
lua_package_path "/home/kunal/Documents/nginx-lua-prometheus/?.lua;;";
init_worker_by_lua_block {
prometheus = require("prometheus").init("prometheus_metrics")
metric_requests = p rometheus:counter (
"nginx_http_requests_total", "Nombre de requêtes HTTP", {"hôte", "statut"})
metric_latency = p rometheus:histogram (
"nginx_http_request_duration_seconds", "latence de requête HTTP", {"hôte"})
metric_connections = p rometheus:gauge (
"nginx_http_connections", "Nombre de connexions HTTP", {"état"})
}
log_by_lua_block {
metric_requests :inc (1, {ngx.var.server_name, ngx.var.status})
metric_latency :observe (tonumber(ngx.var.request_time), {ngx.var.server_name})
}
`

Une suggestion sur ce qui ne va pas ici?

Merci de votre aide. J'ai écrit un guide étape par étape pour référence future

Installation de lua resty auto ssl sur Debian

Salut @arya6000 ,

Je rencontre les mêmes problèmes, mais le lien que vous avez posté est maintenant rompu :(

Pensez-vous que vous pourriez m'aider?

Cette page vous a été utile?
0 / 5 - 0 notes