nginx configurer proxy

nginx configurer proxy - Logiciels - Linux et OS Alternatifs

Marsh Posté le 29-09-2014 à 14:20:49    

Bonjour,
 
sur mon serveur (openmediavault), j'écoute les ports 80 et 8080.
Le 8080 permet d'accéder uniquement à l'interface de OpenMediaVault
 
Le 80 sera mon serveur "public". Je souhaite notamment en faire un tableau de bord me permettant d'accéder à toutes mes interfaces (openmediavault, owncloud, ...).
J'aimerais donc que l'adresse http://@IP:80/omv renvoie la page http://@IP:8080
 
Voici mon fichier de configuration :
 

Code :
  1. server {
  2.     listen 80 default_server;
  3.     listen 443 ssl;
  4.     ssl_certificate     /etc/ssl/certs/openmediavault-a650546a-3224-45ad-b7b2-23b27466bca1.crt;
  5.     ssl_certificate_key /etc/ssl/private/openmediavault-a650546a-3224-45ad-b7b2-23b27466bca1.key;
  6.     set $root_path "/media/131f8b61-8a66-4572-a81d-85189ad24a9c/web";
  7.     root $root_path;
  8.     index index.html index.php;
  9.     set $socket "unix:/var/run/fpm-13d18c43-7b26-46e5-97a8-cc084192a91c.sock";
  10.     location ~ \.php$ {
  11.         fastcgi_split_path_info ^(.+\.php)(/.+)$;
  12.         fastcgi_pass $socket;
  13.         fastcgi_index index.php;
  14.         include fastcgi_params;
  15.     }
  16.     access_log /var/log/nginx/c42e6b6a-70ea-444d-a02d-d50221eaa418-access.log;
  17.     error_log  /var/log/nginx/c42e6b6a-70ea-444d-a02d-d50221eaa418-error.log;
  18.     large_client_header_buffers 4 32k;
  19.     location /omv/ {
  20.         proxy_pass http://localhost:8080/;
  21.         include  /etc/nginx/proxy_params;
  22.     }
  23. }


 
Le fichier proxy_params:

Code :
  1. proxy_set_header Host $host;
  2. proxy_set_header X-Real-IP $remote_addr;
  3. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


 
Avec cette configuration, l'accès se fait correctement, mais toutes les ressources définies avec un chemin absolu (par ex. "/images/..." ) ne passent pas par le proxy (et du coup le chemin n'est pas résolu).
 
Exemple :  
en appelant http://@ip:80/omv/images/... le résultat devrait être http://@ip:8080/images/

Reply

Marsh Posté le 29-09-2014 à 14:20:49   

Reply

Marsh Posté le 30-09-2014 à 20:03:37    

astik89 a écrit :


    location /omv/ {
        proxy_pass http://localhost:8080/;
        include  /etc/nginx/proxy_params;
    }


 [:kyjja:3] si tu définies "http://<monserveur>/omv/" (avec http://<monserveur>/ sous-entendu par nginx dans sa conf), forcément si derrière dans le code d'OMV il y a du "/images" et pas "./images", ça coince.
Essaie donc plutôt :

Code :
  1. location /{
  2.      proxy_pass http://localhost:8080/;
  3.      include  /etc/nginx/proxy_params;
  4. }


 
Autre truc, c'est plus propre de déclarer 1 server par port en listen... mais grâce à la magie du rewrite de l'url, tu bazardes ce qui arrive du 80 sur le 443 et hop ni vu ni connu :whistle:  
Par exemple pour du Promox avec nginx en frontal (sur Sheldon) :

Code :
  1. server {
  2.         listen          80;
  3.         server_name     proxmox.mondomaine.fr;
  4.         rewrite         ^ https://$hostname.mondomaine.fr$request_uri? permanent;
  5. }
  6. server {
  7.         listen                  443 ssl;
  8.         server_name             proxmox.mondomaine.fr;
  9.         ssl on;
  10.         ssl_certificate         /etc/nginx/conf.d/cert-20434-proxmox.mondomaine.fr.pem;
  11.         ssl_certificate_key     /etc/nginx/conf.d/proxmox.mondomaine.fr.key;
  12.         location / { proxy_pass https://127.0.0.1:8006; }
  13. }


Pour toi ça serait plus un truc du style :

Code :
  1. server {
  2.         listen          80;
  3.         server_name     omv.mondomaine.fr;
  4.         rewrite         ^ https://$hostname.mondomaine.fr$request_uri? permanent;
  5.         access_log /var/log/nginx/80-access.log;
  6.         error_log  /var/log/nginx/80-error.log;
  7. }
  8. server {
  9.         listen                  443 ssl;
  10.         server_name             omv.mondomaine.fr;
  11.         ssl on;
  12.         ssl_certificate     /etc/ssl/certs/openmediavault-a650546a-3224-45ad-b7b2-23b27466bca1.crt;
  13.         ssl_certificate_key /etc/ssl/private/openmediavault-a650546a-3224-45ad-b7b2-23b27466bca1.key;
  14.         large_client_header_buffers 4 32k;
  15.         location / { proxy_pass https://127.0.0.1:8080; }
  16. }


Là à ce niveau, ce qui arrive en 80 est redirigé en 443... qui lui-même est redirigé en 8080 (si si, c'est simple à suivre :pt1cable: ). C'est bien mais ce n'est pas forcément ce que tu cherches à avoir, vu que tu dis que tu auras du ounclown ( [:the clown] ) voire d'autres trucs... alors là que faire ? Faire appel à la magie du... sous-domaine !
Là plusieurs "écoles" :
- ceux qui utilisent du fastcgi
- ceux qui te font un fichier de conf de 300 lignes pour gérer ouatte-milles sous-domaine avec des trucs de fou
- ceux qui font un fichier de conf par site avec des ports d'écoutes différents
...
 
Perso je fais plutôt parti de la 2ème catégorie :

Code :
  1. server {
  2.         listen          80;
  3.         server_name  mondomaine.com *.mondomaine.com;
  4.         access_log /var/log/nginx/80-access.log;
  5.         error_log  /var/log/nginx/80-error.log;
  6.         ### CONF PHP pour notre site accueil
  7.         location ~ \.php$ {
  8.             fastcgi_split_path_info ^(.+\.php)(/.+)$;
  9.             fastcgi_pass $socket;
  10.             fastcgi_index index.php;
  11.             include fastcgi_params;
  12.         }
  13.         ### rewrite //mondomaine vers //www.mondomaine
  14.         if ($host ~* ^mondomaine\.com$) {
  15.             rewrite ^(.*) //www.mondomaine.com$1 permanent;
  16.             break;
  17.         }
  18.         ### rewrite et transfert de //omv.mondomaine.com vers s://omv.mondomaine.com
  19.        if ($host !~* ^www\.mondomaine\.com$) {}
  20.        if ($host ~* ^omv\.mondomaine\.com$) {
  21.            set $omv $1;
  22.            rewrite ^(.*) https://$omv.mondomaine.com$1 permanent;
  23.            break;
  24.        }
  25. }
  26. location / {
  27.         root   /var/www/;
  28.         index  index.html index.htm;
  29.     }
  30. }
  31. # OMV
  32. # sous domaine s://omv.mondomaine
  33. server {
  34.         listen                  443 ssl;
  35.         server_name             omv.mondomaine.fr;
  36.         ssl on;
  37.         ssl_certificate     /etc/ssl/certs/openmediavault-a650546a-3224-45ad-b7b2-23b27466bca1.crt;
  38.         ssl_certificate_key /etc/ssl/private/openmediavault-a650546a-3224-45ad-b7b2-23b27466bca1.key;
  39.         large_client_header_buffers 4 32k;
  40.         location / { proxy_pass https://127.0.0.1:8080; }
  41. }


Tu veux ajouter un truc, 2 cas de figures :
- le truc embarque son propre serveur web qui dessert sur un autre port (1234) dans le premier "server" ajouter :

Code :
  1. if ($host ~* ^monbidule\.mondomaine\.com$) {
  2.       set $monbidule $1;
  3.       rewrite ^(.*) http://$omv.mondomaine.com$1:99 permanent;
  4.       break;
  5. }


Avec un 2ème "server" :

Code :
  1. server {
  2.         listen                  99;
  3.         server_name             monbidule.mondomaine.fr;
  4.         location / { proxy_pass http://127.0.0.1:1234; }
  5. }


- le truc n'embarque pas de serveur web, je l'ai torché dans un répertoire /usr/share/nginx/www/bien/planqué/encore/plus/loin :

Code :
  1. if ($host ~* ^monbidulecaché\.mondomaine\.com$) {
  2.       set $monbidulecaché $1;
  3.       rewrite ^(.*) http://$omv.mondomaine.com$1:132 permanent;
  4.       break;
  5. }


Idem, là aussi on déclare un autre server :

Code :
  1. server {
  2.         listen                  132;
  3.         server_name             monbidulecaché.mondomaine.fr;
  4.         location / {
  5.             root   /usr/share/nginx/www/bien/planqué/encore/plus/loin/;
  6.             index  index.html index.htm;
  7.         }
  8. }


 
Tout le code est à soumettre à relecture bien entendu !


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 06-10-2014 à 07:07:26    

Ca a le mérite d'être précis et détaillé
Je pense qu'avec ces éléments je devrais y arriver
Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed