diff --git a/plugins/nginx-vhosts/commands b/plugins/nginx-vhosts/commands index 84ca6d895..cafe92a28 100755 --- a/plugins/nginx-vhosts/commands +++ b/plugins/nginx-vhosts/commands @@ -2,6 +2,17 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x source "$(dirname $0)/../common/functions" +validate_nginx () { + set +e + sudo /usr/sbin/nginx -t > /dev/null 2>&1 + exit_code=$? + set -e + if [[ "$exit_code" -ne "0" ]]; then + sudo /usr/sbin/nginx -t + exit "$exit_code" + fi +} + restart_nginx () { case "$DOKKU_DISTRO" in ubuntu) @@ -98,6 +109,7 @@ EOF pluginhook nginx-pre-reload $APP $DOKKU_APP_LISTEN_PORT $DOKKU_APP_LISTEN_IP dokku_log_verbose "Reloading nginx" + validate_nginx restart_nginx fi diff --git a/plugins/nginx-vhosts/install b/plugins/nginx-vhosts/install index 29ac86ee2..c348c3b22 100755 --- a/plugins/nginx-vhosts/install +++ b/plugins/nginx-vhosts/install @@ -1,19 +1,17 @@ #!/usr/bin/env bash set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x -if [[ ! -f /etc/sudoers.d/dokku-nginx ]]; then - case "$DOKKU_DISTRO" in - ubuntu) - echo "%dokku ALL=(ALL) NOPASSWD:/etc/init.d/nginx reload" >> /etc/sudoers.d/dokku-nginx - ;; +case "$DOKKU_DISTRO" in + ubuntu) + echo "%dokku ALL=(ALL) NOPASSWD:/etc/init.d/nginx reload, /usr/sbin/nginx -t" > /etc/sudoers.d/dokku-nginx + ;; - opensuse) - echo "%dokku ALL=(ALL) NOPASSWD:/sbin/service nginx reload" >> /etc/sudoers.d/dokku-nginx - ;; - esac + opensuse) + echo "%dokku ALL=(ALL) NOPASSWD:/sbin/service nginx reload, /usr/sbin/nginx -t" > /etc/sudoers.d/dokku-nginx + ;; +esac - chmod 0440 /etc/sudoers.d/dokku-nginx -fi +chmod 0440 /etc/sudoers.d/dokku-nginx # if dokku.conf has not been created, create it if [[ ! -f /etc/nginx/conf.d/dokku.conf ]]; then