Installation et configuration de NGinx

Un script pour automatiser la création d'un site virtuel pour utiliser un serveur NodeJS.

Le script demande quelques informations, puis il crée ce qu'il faut pour exécuter un site par proxy.

Le tout utilise un certificat SSL Self-Signed.

#!/bin/bash
# Source : https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-nginx-for-ubuntu-14-04
# Source : https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-14-04

echo "Auteur : Tommy Gingras"
echo "Date : 2017-07-07"
echo "But : Installer et configurer Nginx."
echo "Version : 1.1.0"
echo "Note : le script a été testé sur Debian 9.0.0"

RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color

read -p "Quel est le nom du fichier de config (eg. example) ? " configfile
ip -o addr | awk '!/^[0-9]*: ?lo|link\/ether/ {gsub("/", " "); print $2" "$4}'
read -p "Quel est l'adresse ip du serveur (eg. 10.10.10.10) ? " ip
read -p "Quel est le nom du site (eg. example.com www.example.com) ? " servername
read -p "Quel est le répertoire du site (eg. /var/www/example) ? " root
mkdir -p $root

read -p "Où ce trouve les logs (eg. /var/log/nginx) ? " logpath
mkdir -p $logpath
touch $logpath/$configfile.access.log
touch $logpath/$configfile.error.log

read -p "Proxy pass port (eg. 3030)? " proxy

# Installation et configuration du serveur Web de développement avec un certificat https self-signed

apt-get update
apt-get install nginx-full -y

sed -i "s|# server_tokens off;|server_tokens off;|" /etc/nginx/nginx.conf

echo -e "${GREEN}Configuration du serveur virtuel avec https${NC}"

# GÉNÉRER LES CERTIFICATS
mkdir -p /etc/nginx/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/$configfile.key -out /etc/nginx/ssl/$configfile.crt

# Configuration du redirect à partir du port 80
echo "########### $configfile ###########" >> /etc/nginx/sites-available/$configfile

echo "########### 80 ###########" >> /etc/nginx/sites-available/$configfile
echo "server {" > /etc/nginx/sites-available/$configfile
echo "listen 80;" >> /etc/nginx/sites-available/$configfile
echo "server_name $servername;" >> /etc/nginx/sites-available/$configfile
echo "return 301 https://\$host\$request_uri;" >> /etc/nginx/sites-available/$configfile
echo "}" >> /etc/nginx/sites-available/$configfile
echo "########### 443 ###########" >> /etc/nginx/sites-available/$configfile
# Configuration du port 443 ssl
echo "server {" >> /etc/nginx/sites-available/$configfile
echo "listen 443 ssl;" >> /etc/nginx/sites-available/$configfile
echo "server_name $servername;" >> /etc/nginx/sites-available/$configfile
echo "access_log $logpath/$configfile.access.log;" >> /etc/nginx/sites-available/$configfile
echo "error_log $logpath/$configfile.error.log;" >> /etc/nginx/sites-available/$configfile
echo "ssl_certificate /etc/nginx/ssl/$configfile.crt;" >> /etc/nginx/sites-available/$configfile
echo "ssl_certificate_key /etc/nginx/ssl/$configfile.key;" >> /etc/nginx/sites-available/$configfile
echo "location / {" >> /etc/nginx/sites-available/$configfile
echo "try_files \$uri @proxy;" >> /etc/nginx/sites-available/$configfile
echo "}" >> /etc/nginx/sites-available/$configfile
echo "location @proxy {" >> /etc/nginx/sites-available/$configfile
echo "proxy_pass https://$ip:$proxy;" >> /etc/nginx/sites-available/$configfile
echo "proxy_http_version 1.1;" >> /etc/nginx/sites-available/$configfile
echo "proxy_set_header Upgrade \$http_upgrade;" >> /etc/nginx/sites-available/$configfile
echo "proxy_set_header Connection 'upgrade';" >> /etc/nginx/sites-available/$configfile
echo "proxy_set_header Host \$host;" >> /etc/nginx/sites-available/$configfile
echo "proxy_set_header X-Real-IP \$remote_addr;" >> /etc/nginx/sites-available/$configfile
echo "proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;" >> /etc/nginx/sites-available/$configfile
echo "proxy_cache_bypass \$http_upgrade;" >> /etc/nginx/sites-available/$configfile	
echo "}" >> /etc/nginx/sites-available/$configfile
echo "error_page 404 /404.html;" >> /etc/nginx/sites-available/$configfile
echo "error_page 500 502 503 504 /50x.html;" >> /etc/nginx/sites-available/$configfile
echo "location = /50x.html {" >> /etc/nginx/sites-available/$configfile
echo "root $root;" >> /etc/nginx/sites-available/$configfile
echo "}" >> /etc/nginx/sites-available/$configfile
echo "}" >> /etc/nginx/sites-available/$configfile

# On active le site
ln -s /etc/nginx/sites-available/$configfile /etc/nginx/sites-enabled/$configfile

echo "<h1>An error occur, please customize me !</h1>" > $root/50x.html
echo "<h1>What are you doing ? are you lost ...</h1>" > $root/404.html

echo -e "${RED}Suppression du fichier de defaut : /etc/nginx/sites-enabled/default${NC}";
rm /etc/nginx/sites-enabled/default

service nginx restart

echo -e "${GREEN}Installation et configuration terminée !${NC}"

 

Laisser un commentaire