QNAP [Tuto] Configuration Nginx + Reverse Proxy pour les apps QTS et autres

Celena-007

Chevalier Jedi
8 Janvier 2016
323
0
0
Objectif du Tutoriel :
L'objectif fixer est de pouvoir configurer QNginx de QoolBox de sorte a pouvoir l'utiliser en reverse proxy et d’accéder a tous les services QTS & autres via les port 80 et 443.
A l’intérieur ce trouvera :
  • La configuration de QTS
  • La configuration de Qthttpd
  • une partie dédier au paramétrage de Nginx

Logiciel utiliser dans ce tuto :
  • putty pour toutes les commande ssh a envoyer au NAS
  • Bitvise principalement pour faciliter l’édition de fichier
  • 1 éditeur de texte; pour ma part Sublime Text 3
Prérequis :
  • Logiciel installer et fonctionnel, ça coule de source
  • Avoir un Domaine ou un DDNS qui puisse être utiliser en http://mon.domaine.com/
  • Avoir un NAS ayant 2 ports ethernet
  • Connaitre les 2 IP du NAS (ScreenShot ou cela ce trouve plus loin)
  • Connaitre l'adresse IP de votre box ou routeur (Freebox dans ce tuto)

Note : les images ne sont pas héberger par le forum, je ne voudrait pas remplir le serveur d'image volumineuse :)

Configuration de QTS


Trouver les 2 IPs du NAS :
Rien de plus simple, direction QTS :
IP1&2.jpg

Explication:
Dans mon cas :
  • ce que j'appellerai IP1 = 192.168.0.42
  • ce que j'appellerai IP2 = 192.168.0.27
Note: J'ai changer le port de QTS mais ce n'est pas une obligation, c'est préférable
Note 2: Il est fortement conseiller d'utiliser des IPs fixe pour le NAS ou alors que votre routeur ou box puisse attribuer toujours la même IP a vos port ethernet, sinon a chaque changement il faudra faire pas mal de modification

Désactiver les service du NAS sur l'IP2 :
Sur QTS encore :
assoip2.jpg

Explication:
Pour plus de sécurité et éviter les conflit ultérieur avec QTS, on désélectionne toutes la colonne d'IP2. Si le nas est équipé de plus de 2 ports eth, libérer une seule interface cela suffit amplement.

Configurer le serveur Web (partie 1 via QTS) :
Direction QTS encore :
serverfWeb.jpg

Explication:
Très important de ne pas activer HTTPS et de lui affecter un port, vous ne pouvez pas changer 80, et Surtout dans la partie "Hôte Virtuel" la case "Activer l’hôte Virtuel" doit être décocher.
Note: Toutes modifications de ces 2 pages entrainera un conflit avec Nginx lorsque vous aurez fini ce tuto
 
Configuration de Qthttpd


Connexion en SSH via Bitvise :
Lancer Bitvise et faire en sorte de ce connecter sur IP1; puisque auparavant nous avons désactiver tous les service d'IP2; puis faire "login" (sur le screen j'ai déjà appuyer dessus)
bitvise%201.jpg

Une fenêtre devrai apparaitre du style :
bitvise%202.jpg

Si cette fenêtre n'apparait pas (cela est possible) la faire apparaitre via le bouton "New SFTP Window" (Ne pas la fermer)
Note: Je me connecte en admin car je ne sait pas si les utilisateurs créer et avec les droit administrateurs on le droit de modifier les fichiers config

Toutes les actions suivante sont a réaliser dans la partie : Remote files cela s'utilise comme un navigateur classique.
Navigation ver le répertoire : /etc/config/apache

Ouvrir le fichier apache.conf en faisant un double click, il risque de demander avec quel logiciel l'ouvrir (pour ma part avec SublimeText)
apache%201.jpg

Sur la ligne 17 (Pas sur que ce soit la même pour tous les Qnap) Ce trouve :
Code:
Listen 80
Modifier la ligne en :
Code:
Listen IP1:80
Rappel: IP1 est a remplacer par l'adresse IP de l'interface ethernet 1
un screen après modification :
apache%202.jpg


Explication :
Cela permet de forcer l’écoute du port 80 sur l'IP1 uniquement même si sur l'association aux services il a été désactiver sur eth2. On va dire que c'est une sécurité pour ne pas qu'il écoute sur eth2.

Commenter les Inclusion inutile (# au début des lignes) si des Vhost on été créer ou ajouter manuellement au fichier :
apache%203.jpg

Sur ce screen Ligne 207 a 209.

Sauvegarder le fichier, normalement bitvise va détecter que le fichier temporaire qu'il a ouvert (via l'appli de votre choix) a été changer et sauvegarder, il va donc le modifier sur le NAS.

Via la fenêtre principale de bitvise "New Terminal Console" ou connecter vous au Qnap via putty (le screen est avec putty mais le résultat sera le même avec bitvise).
Il suffit de taper la commande :
Code:
/etc/init.d/Qthttpd.sh restart
La réponse doit être :
Putty.jpg


S'il affiche un message du genre :
Code:
apache config restored
Ben suffit de recommencer :D et surtout de trouver pourquoi il l'a restaurer...
 
Configuration de QNginx


A partir de maintenant je part du principe que :
  • QApache de QoolBox n'est pas installer ou installer et désactiver
  • QNginx est installer et activer

Création et récupération des prérequis:
Connexion en SSH via Bitvise puis direction : /opt/QNginx/etc/nginx (Cf post précédent pour voir comment réaliser cette étape)
config-nginx-1.jpg


Avec Putty ou la console de Bitvise taper ces quelque commande :
Code:
cd /opt/QNginx/etc/nginx
mkdir conf.d
mkdir sites-enabled
touch conf.d/gzip.conf
touch conf.d/proxy.conf
touch sites-enabled/default.conf
touch sites-enabled/qts.conf
Explication:
Cela permet de créer les répertoires et de générer quelque fichiers dont je vais parler plus tard.
Note: les fichiers font 0octet c'est normal

Avant d'entamer la config proprement dite on va récupérer 2 valeurs propre a votre NAS :
Code:
grep processor /proc/cpuinfo | wc -l
ulimit -n
config-nginx-2.jpg

Explication:
La première indique le nombre de cpu logique présent dans le processeur
La seconde indique le nombre maximal de processus gérable par 1 seul cpu logique
Ces deux commandes ont pour but une meilleur optimisations d'Nginx.

Remarque: Constater que je me connecte toujours via IP1

Configuration Nginx:
Avec Bitvise ouvrez le fichier : "nginx.conf"
config-nginx-3.jpg

Vous pouvez le recopier sans problème; mise a part ces lignes:
Code:
worker_processes 2;
    worker_connections 1024;
worker_processes = Nombre de cpu logique (remplacer 2 par la valeur trouver plus haut)
worker_connections = nombre maximal de processus (remplacer 1024 par la valeur trouver plus haut)
Note: Je ne rentre pas dans les détails ce serait trop long. Sachez seulement que cette config est ultra optimiser pour de gros serveur Web.

Note importante: Lors de la mise a jour du QPKG ce fichier est effacer et remplacer par le fichier original. Je conseil de garder une copie local sur votre pc.

Sauvegarder le fichier, comme plus haut Bitvise détecte le changement et le modifie sur le NAS.

Avec Bitvise ouvrez "conf.d/gzip.conf"
Dans ce fichier ce trouve les paramètre de configuration Gzip d'Nginx, libre a vous de les modifier a votre guise pour en trouver ce qui vous convient le mieux
config-nginx-4.jpg

Explication:
Code:
gzip_comp_level     6;
pas besoin d'aller plus haut (max = 9) a moins d'avoir un d'avoir comme processeur un I7

Code:
gzip_min_length     1000;
Taille minimal du fichier a compresser 1000octet

Code:
gzip_proxied        expired no-cache no-store private auth no_etag any;
Ne pas toucher, c'est pour gzip ce qui passe en proxy

Code:
gzip_types .......
Si vous avez besoin de compresser plus de type ajouter les ici...

Avec Bitvise ouvrez "conf.d/proxy.conf"
Dans ce fichier ce trouve les paramètre de configuration Proxy d'Nginx (Vous pouvez le modifier mais les gain et paramètre sont limiter)
config-nginx-5.jpg


Avec Bitvise ouvrez "sites-enabled/default.conf"
config-nginx-6.jpg

Note: Lire 192.168.0.27 comme IP2
Explication:
Cette config présente est celle de QoolBox légèrement modifier pour qu'en version ssl le logo A+ apparaisse lors des test.
Donc tous accès a http://IP_WAN/ ou https://IP_WAN/ accèdera a Nginx en version default. (répertoire /share/html) (a ce stade n'essayer pas car cela ne fonctionnera pas encore)

Avec Bitvise ouvrez "sites-enabled/qts.conf"
Note: La config suivante peut servir comme exemple pour tous les autres services autre que QTS
config-nginx-7.jpg

Explication:
Code:
server_name qts.domaine.com;
"domaine.com" est a remplacer bien sur, qts est un sous domaine permettant d'acceder a cette partie de la configuration.

Code:
server {
    server_name qts.domaine.com;
    listen 192.168.0.27:80;
    return 301 https://$server_name$request_uri;
}
Cette petite partie sert a rediriger tous le trafic sur du HTTPS. Pourquoi? Je répondrai pourquoi ne pas se servir de la connexion ssl.
Respecter bien l'ordre des instructions, c'est très important sur Nginx.

Code:
server {
    server_name qts.domaine.com;
    listen 192.168.0.27:443 ssl http2;

    client_max_body_size 1024M;

    location / {
        # Send traffic to the backend
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
    }
}
Cette petite va donc traiter notre accès au QTS via le port 443. comme vous pouvez le constater Nginx proxy qts en non ssl http://127.0.0.1:8080
Cela ne sert a rien de proxy https sur une adresse 127.0.0.1 puisque c'est une interface virtuelle, la transmission ssl ce fait donc entre votre pc et Nginx de votre NAS uniquement. Tous les services du QTS pourrons donc être obtenu via l'adresse
  • http://qts.domaine.com/
  • http://qts.domaine.com/filestation
  • http://qts.domaine.com/....

Ce fichier peut être copier/coller pour créer d'autre accès a d'autre service
pyload.jpg

Il n'y a qu'a changer
Code:
server_name XXXXX.domaine.com;
et
Code:
proxy_pass http://127.0.0.1:XXXXX;

Sous Putty ou console Bitvise :
Code:
cd /opt/QNginx
./QNginx.sh restart
Un bon nombre de message NOTICE provenant de php apparaitrons (pas grave)
Il ne doit pas y avoir d'erreur provenant d'Nginx

Configurer Votre Routeur ou Box (Freebox ici)
Note: Consulter la notice pour avoir son adresse IP, et accéder au paramètre que je vais citer
Bon pour ma part j'ai désactiver l'UPNP de la box car je n'aime pas que les application ouvre a tous va les ports et ne les referme jamais (il ne mette pas d'expiration lors de l'ouverture)
freebox-1.jpg

Image montrant comment j'ouvre et redirige le port 80 ver l'adresse IP2 de mon NAS (j'ai pas changer son nom d'origine)
Il suffit de faire de même pour le port 443
Important: Il faut rediriger ver IP2 sinon cela ne fonctionne pas du tout !!!

Note Finale: Désoler d'avoir fait des fautes de français, je suis très nul
 
Wow, merci Celena!!!! Très claire !

Il faut juste mnt le suivre!

Sent from mobile using TapaTalk
 
giopas a dit:
Wow, merci Celena!!!! Très claire !

Il faut juste mnt le suivre!

Sent from mobile using TapaTalk

Besoin de café et d'aspirine; ça fait un moment que j'avais pas fait de tuto :?
 
Pour info, je viens de linker ce super tuto dans le forum officiel: http://forum.qnap.com/viewtopic.php?f=32&t=116833 ;)

Celena-007 a dit:
Note Finale: Désoler d'avoir fait des fautes de français, je suis très nul
Pas de soucis, on dirait juste que les participes passés ne sont pas tes meilleurs copains :D
Mais je ne peux rien dire car je ne suis même pas français :lol:
 
Je me retrouve sur le forum officiel c'est que mon Tuto doit être compréhensible.

Envoyé de mon ONE A2003 en utilisant Tapatalk
 
Bonjour,

J'ai suivi le tuto mais pour ma part, je rencontre un problème...
J'ai un certificat SSL de chez RAPIDSSL sur l'adresse de mon NAS et je n'arrive donc plus à m'y connecter mis a part par l'adresse locale...
Je suppose que le problème doit venir de la configuration de nginx puisque le message est le suivant : Échec de la connexion sécurisée

J'ai pourtant décommenté les lignes suivantes comme expliqué dans le tuto

Code:
	#Si certificat signer par une authorite decommenter ces lignes suivantes
	ssl_stapling					on;
	ssl_stapling_verify				on;
	ssl_trusted_certificate			/opt/QNginx/etc/server.crt;
	resolver						8.8.8.8 8.8.4.4;

Y a t'il autre chose à faire ???

Merci par avance...
 
Salut,

alors avec juste cette info j'ai du mal a me faire une idée de ce qui cloche ;)

Ces lignes servent juste pour augmenter la sécurité et certifier au navigateur authenticité du certificat (uniquement dans le cadre d'un certificat signe).

Voila la config exact pour avoir un A en sécurité :
Code:
    add_header                      Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
    add_header                      X-Frame-Options "DENY";

    ssl_protocols                   TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers                     "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
    ssl_buffer_size                 1400;
    ssl_prefer_server_ciphers       On;
    ssl_session_cache               builtin:1000 shared:SSL:10m;
    ssl_session_timeout             24h;
    ssl_session_tickets             off;
    ssl_certificate                 /opt/QNginx/etc/1_domaine.com_bundle.crt;
    ssl_certificate_key             /opt/QNginx/etc/domaine.key;
    ssl_dhparam                     /opt/QNginx/etc/dhparam.pem;
    ssl_stapling                    on;
    ssl_stapling_verify             on;
    resolver                        8.8.4.4 8.8.8.8 208.67.222.222 208.67.220.220 valid=300s;
    resolver_timeout                10s;
    ssl_trusted_certificate         /opt/QNginx/etc/startssl.stapling.crt;
Pour generer le dhparam :
Code:
openssl dhparam 4096 -out dhparam.pem
 
Hello,

Firstly thank you for your guide it works wonderfully and I have got this running without much issue.

I have one question: When i reboot my nas QNgnix will not start as it cant use port 443 as it is already used. I have to change the port in the QNAP gui, restart QNginx then set my port back to 443 on the QNAP gui

Has anybody else suffered this or can you not be set to the same port? I expected ip1 to monitor port 80 and ip2 to monitor port 443?

Thanks in advance
 
Celena-007 a dit:

Salut,

Le français est pas ma langue j'espère que google translate œuvres .

Je dois ben essayer de proxy inverse pendant une longue période ..

i réinitialisé mon a été formaté tous les lecteurs, restauration aux paramètres d'usine.

Je n'installé réseau et commutateur virtuel . et QNginx c'est tout ...

Je suivais les instructions upto édition gzip.conf

quand j'ouvre le fichier à éditer son vide ,

( J'ai un mac et utiliser Terminal pour SSH et j'utilise YUMMYFTP à sftp dedans )

de l'aide?


Hi,

French is not my language i hope google translate works.

I have ben trying to reverse proxy for a long time..

i reinitialised my was formatted all drives, restore back to factory settings.

I only installed Network and Virtual Switch. and QNginx thats all...

I followed instructions upto editing gzip.conf

when i open the file to edit its empty,

(i have a mac and use Terminal to SSH and i use YUMMYFTP to sftp into it)

any help?
 
it's normal, the touch command create empty file only !

you must write inside the file with the command vi gzip.conf and do the same for the other file.

If you're not famillar with vim editor :
Sorry my english is not perfect.
 
Celena-007 a dit:
it's normal, the touch command create empty file only !

you must write inside the file with the command vi gzip.conf and do the same for the other file.

If you're not famillar with vim editor :
Sorry my english is not perfect.


salut

Merci pour votre réponse rapide.

Je ne suis pas technique du tout et ai essayé de créer des proxys inverses pendant un certain temps

Im loin de la maison beaucoup pour les universités , donc j'investi dans un NAS pour les parents et moi-même à distance à des fichiers d'accès et de magasin

Il serait tellement plus facile pour moi.

tous je cherche à faire est d'avoir

plex.xxxxx.com
sonar.xxxxxx.com
books.xxxxxxx.com

Je ne suis pas technique que je pourrais simplement copier ce que vous avez dans vos photos pour les deux fichiers. copier soigneusement pour ne pas se tromper .. Je préférerais les paramètres qui le faire fonctionner indépendamment de son effet sur ​​le cpu

Ils ont un
TS - 253pro , 16gb Ram , rouges wd 2x4tb

4 cœurs , 1024

Plus d'aide serait très apprécié

Ive a eu un long moment et je veux juste la configuration nas de telle sorte que cela fonctionne et je ne devez pas toucher. les serveurs de médias . serveurs de livres. etc .. gestionnaires de photos ... Transmission configuré pour travailler avec usenet )

----

Hi

thank you for your quick response.

I am not technical at all and have been trying to create reverse proxies for some time

Im away from home a lot for universities so i invested in a NAS for the parents and myself to remotely access and store files

It would be so much easier for me.

all im looking to do is have

plex.xxxxx.com
sonar.xxxxxx.com
books.xxxxxxx.com

Im not technical would i be able to just copy what you have in your pictures for both files. copy it carefully as to not get it wrong.. I would prefer settings that would make it work regardless of its effect on cpu

They have a
TS-253pro, 16gb Ram, 2x4tb wd reds

4 cores, 1024

Anymore help would be much appreciated

Ive had it a long time and i just want the nas setup so that it works and i dont have to touch it. media servers. book servers. etc.. photo managers... Transmission configured to work alongside usenet)
 
Ok I give you the config File directly

Sample

Inside the file there are some work for you : you must follow instruction after # (Put, Replace, Change)
 
Salut Celena,

bien tôt (j'espère) je vais acheter un nouveau QNAP, plus grand, qui va marcher avec mon ancien (1 an, pas vieux du tout en faite!).

Je me trouverai donc da la situation de devoir avoir accès aux QTS et autres serveurs des deux NAS depuis l'extérieur.

Évidemment toutefois je pourrais rediriger la porte 80 et 443 uniquement sur un seul des NAS. Donc - vu que apache installé par default ne peut pas gérer des connections HTTPS (qui est nécessaire pour me connecter au deuxième NAS), je vais utiliser ta superbe méthode avec Nginx. :D

J'ai donc commencé à regarder de prêt ta guide mais je me reserve déjà le droit de demander assistance dans la composition (j'aurais en plus plus d'une dizaine de Virtual Hosts à bouger...). :lol:

giopas
 
Salut Celena007,

Je suis en train de voir de nouveau ton magnifique Tuto, et j'aurais quelque question peut-être un peu bêtes.

Vu que la plus partie de mes reverse proxy sont en http, tu pourrais me fournir un example de reverse proxy sur Nginx avec cela? J'imagine que cela doit être quelque chose du genre, n'est pas?

Code:
server {
    server_name sonarr.domaine.com;
    listen 192.168.0.27:;

    client_max_body_size 1024M;

    location / {
        # Send traffic to the backend
        proxy_pass http://127.0.0.1:8989;
        proxy_redirect off;
    }
}
De plus, est-ce que tu auras un exemple de reverse proxy Nginx avec gmail qui marche?

Finalement, j'étais en train de penser à WebDAV. Dans ta configuration je vois que tu l'as désactivé. Est-ce que avec ta solution par contre cela va quand même marcher en http (sur porte 80) et en https (mais sur quelle porte et interface du coup)?

Merci!

giopas