Custom nginx.conf

Bonjour,
J’essaie désespérément de paramétrer nginx comme je fais d’habitude avec un .htaccess avec Apache, mais je n’y arrive pas.

Mon .htaccess a normalement ce code, qui fonctionne avec Apache :

## Rediriger les requêtes vers le routeur :
RewriteEngine on

RewriteCond %{REQUEST_URI} !\.(css|js|jpg|png|jpeg|gif)$ [NC]
RewriteRule   (.*)  controleurs/router.php

J’ai fait quelques recherches, et normalement, le code similaire avec nginx devrait être ceci :

# Rediriger les requêtes vers le routeur :
    location /biblio/ {
        if ($request_uri !~* \.(css|js|jpg|png|jpeg|gif)$) {
            rewrite ^/(.*)$ /controleurs/router.php last;
        }
    }

A savoir que le dossier biblio, qui est dans les www de ma web_app, contient tout le projet.

J’ai essayé de le mettre dans le fichier /etc/nginx/conf.d/domaine.com.d/my_webapp.conf, puis de relancer nginx avec systemctl nginx restart. ça ne marche pas, à chaque fois que j’essaie de faire fonctionner mon projet, je suis renvoyé vers le portail sso de yunohost.

J’ai essayé d’ajouter cette ligne dans le fichier /etc/nginx/conf.d/domaine.com.conf :

server {
    [ ... ]
    include /var/www/my_webapp/www/projet/nginx.conf;
}

de mettre le même contenu que précédemment dans ce fichier appelé, de relancer le serveur, sans plus de succès.
J’ai essayé de désactiver la ligne dans /etc/nginx/conf.d/domaine.com.d/my_webapp.conf qui appelle le SSO, sans succès.

Je ne sais pas quoi faire, on ne peut pas installer Apache en parallèle de nginx, et aucune de mes modifications ne sont prises en compte. Mon code est-il faux ?
Ou bien le mets-je pas au bon endroit ?

C’est si simple avec un .htaccess … :wink:
Merci de votre aide !

Sans être expert, et sans pouvoir tester, ne connaissant pas l’architecture de ton projet:

    location ~ ^/biblio/.*\.(css|js|jpg|png|jpeg|gif)$ {
        try_files /controleurs/router.php;
    }

à mettre dans un /etc/nginx/conf.d/domaine.com.d/my_webapp.conf remis à neuf, sans toucher au bloc server de NGINX, à tester avec nginx -t avant de faire systemctl nginx reload. :wink:

Bonjour @tituspijean !
Merci pour ta réponse :slight_smile:

J’ai essayé, en supprimant mes modifs, en mettant dans le fichier /etc/nginx/conf.d/domaine.com.d/my_webapp.conf ton code légèrement modifié, parce que tel quel il ne marchait pas :

rewrite ^/$ / permanent;
location / {
 # Path to source
    alias /var/www/my_webapp/www/;

    # Common parameter to increase upload size limit in conjunction with dedicated PHP-FPM file
    #client_max_body_size 1G;

    # Default indexes and catch-all
    index index.html index.php;
    try_files $uri $uri/ /index.php?$args;

    # Prevent useless logs
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Deny access to hidden files and directories
    # location ~ ^/(.+/|)\.(?!well-known\/) {
    #    deny all;
    #}

    # Execute and serve PHP files
    location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        fastcgi_pass unix:/var/run/php/php8.2-fpm-my_webapp.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param REMOTE_USER $remote_user;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $request_filename;
    }

    # Include SSOWAT user panel.
    # include conf.d/yunohost_panel.conf.inc;

    location ~ ^/biblio/.*\.(css|js|jpg|png|jpeg|gif)$ {
        try_files $uri /biblio/controleurs/router.php;
    }

J’ai laissé le SSO commenté.
Mais sans succès, ça ne marche pas après avoir testé et relancé nginx.

Pour redonner mon architecture : my_webapp a pour nom theophile. à l’intérieur du www, j’ai mis mon dossier biblio où j’ai mis tout mon projet.

Lorsque je clique sur le lien, je devrais être renvoyé vers une page (qui n’existe pas comme un fichier, l’URI sera analysée par mon fichier router.php, et en fonction de ce qu’elle contient, on affiche le bon panneau. Du coup, cette règle est censée rediriger les URI vers le fichier router.php pour les analyser et renvoyer le bon résultat.
Et moi, même en commentant la ligne du SSO, je suis systématiquement renvoyé vers la page d’authentification de yunohost !

Merci de votre aide !

J’ai vu le compte-rendu de la dernière réunion des contributeurs, trop bien cette généralisation du nginx.conf dans les Apps !!! :grinning: :hearts:
Quand est-ce que ce sera implémenté ?

Salut,

J’a galéré avec my_webapp et Altorouter
Voici ce qui à fonctionné de mon côté.

Ngynx

#sub_path_only rewrite ^/$ / permanent;
location / {

    # Path to source
    alias /var/www/my_webapp/www/public/;

    # Common parameter to increase upload size limit in conjunction with dedicated PHP-FPM file
    #client_max_body_size 1G;

    # Default indexes and catch-all
    index index.html index.php;
    try_files $uri /index.php;
    #try_files $uri $uri/ /index.php?$args;

Et dans la config du router

$this->router->setBasePath('');

Et tout ce qui est image et CSS se trouve dans le dossier public.

ex: <link rel="stylesheet" href="/bootstrap.min.css">

Si ça peut t’aider.

Le seul soucis est que lors d’une mise à jour de la webapp via ynh, il me semble que la config est déglinguée.

Yeeeehaaaa ça marche !!!
Merci beaucoup @Nico1 :grinning:

1 Like