PluXml.org

Blog ou CMS à l'Xml

NGINX, configuration et réecriture d'url(Edit)

Où déposer la configuration(Edit)

Ci-dessous, vous trouverez des exemples de fichiers de configuration pour le serveur web NGINX. Cet exemple rend possible l'utilisation de la réécriture d'url (plus d'information dans la documentation de PluXml).

Le fichier doit être placé dans l'un de ces deux emplacements :

  • /etc/nginx/conf.d/
  • /etc/nginx/sites-enabled/

Vérifiez néanmoins que le fichier /etc/nginx/nginx.conf contient bien les lignes include /etc/nginx/conf.d/*.conf; ou include /etc/nginx/sites-enabled/*;

Un fil de discussion est disponible sur le forum.

Cas 1 : Tout en HTTP(Edit)

server {
    listen 80;
    server_name nom_du_site;

    root    /var/www/site;
    index  index.php index.html;

    ## BASE

    # Règle principale
    location / {
        try_files $uri $uri/ @handler;
    }

    # Réécriture vers l'index
    location @handler {
        rewrite /(.*)$ /index.php?$1 last;
    }

    # Parseur PHP
    location ~ \.php$ {
        fastcgi_split_path_info (.+\.php)(/.+)$;
        # NOTE: Utilisez "cgi.fix_pathinfo = 0;" dans php.ini
        include fastcgi.conf;
        fastcgi_index index.php;

	    # Utilisez PHP5 ou PHP7, mais pas les deu
        #fastcgi_pass unix:/run/php5-fpm.sock;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    ## REDIRECTIONS

    # Flux RSS
    location /feed/ {
        rewrite /feed\/(.*)$ /feed.php?$1 last;
    }

    # Sitemap
    location = /sitemap.xml {
        rewrite .* /sitemap.php;
    }

    ## PROTECTION REPERTOIRES

    location /data/configuration { deny all; }
    location /version   { deny all; }
    location /update    { deny all; }
    location /readme    { deny all; }
}

Cas 2 : Site HTTP et administration HTTPS(Edit)

C'est un cas hybride que vous pouvez utiliser si vous n'avez pas de bonnes performances en HTTPS mais que vous voulez tout de même sécuriser l'administration.

# Paramètrage du socket PHP
upstream PHP_SOCKET {
    # Utilisez PHP5 ou PHP7, mais pas les deux
    #server unix unix:/run/php5-fpm.sock;
    server unix:/run/php/php7.0-fpm.sock;
}

server {
    listen 80;
    server_name nom_du_site;

    root    /var/www/site;
    index  index.php;

    ## BASE

    # Règle principale
    location / {
        try_files $uri $uri/ @handler;
    }

    # Réécriture vers l'index
    location @handler {
        rewrite /(.*)$ /index.php?$1 last;
    }

    # Parseur PHP
    location ~ \.php$ {
        fastcgi_split_path_info (.+\.php)(/.+)$;
        # NOTE: Utilisez "cgi.fix_pathinfo = 0;" dans php.ini
        include fastcgi.conf;
        fastcgi_index index.php;
        fastcgi_pass PHP_SOCKET; # This variable is set on top 
    }

    ## REDIRECTIONS

    # L'admin est en HTTPS
    location /core/admin {
        return 301 https://$host$request_uri;
    }

    # Flux RSS
    location /feed/ {
        rewrite /feed\/(.*)$ /feed.php?$1 last;
    }

    # Sitemap
    location = /sitemap.xml {
        rewrite .* /sitemap.php;
    }

    ## PROTECTION REPERTOIRES

    location /data/configuration { deny all; }
    location /version   { deny all; }
    location /update    { deny all; }
    location /readme    { deny all; }
}

server {
    listen 443 ssl http2;
    server_name nom_du_site;

    ssl_certificate /path/to/certificate;
    ssl_certificate_key /path/to/key;

    root   /var/www/site;
    index  index.php;

    # Conserver ces URL en HTTPS
    location /core/    { try_files $uri $uri/ @handler; }
    location /plugins/ { try_files $uri @handler; }
    location /data/    { try_files $uri @handler; }
    location /themes/  { try_files $uri @handler; }
    location /preview  { try_files $uri @handler; }

    # Redirection des autres URL vers HTTP
    location / {
        return 302 http://$host$request_uri;
    }
	
    # Réécriture vers l'index
    location @handler {
        rewrite /(.*)$ /index.php?$1 last;
    }

    # Parseur PHP
    location ~ \.php$ {
        fastcgi_split_path_info (.+\.php)(/.+)$;
        include       fastcgi.conf;
        fastcgi_index index.php;
        fastcgi_pass  php_socket;
    }
}

Cas 3 : Tout en HTTPS(Edit)

server {
    listen 443 ssl http2;
    server_name nom_du_site;

    ssl_certificate /path/to/certificate;
    ssl_certificate_key /path/to/key;

    root    /var/www/site;
    index  index.php index.html;

    ## BASE

    # Règle principale
    location / {
        try_files $uri $uri/ @handler;
    }

    # Réécriture vers l'index
    location @handler {
        rewrite /(.*)$ /index.php?$1 last;
    }

    # Parseur PHP
    location ~ \.php$ {
        fastcgi_split_path_info (.+\.php)(/.+)$;
        # NOTE: Utilisez "cgi.fix_pathinfo = 0;" dans php.ini
        include fastcgi.conf;
        fastcgi_index index.php;

        # Utilisez PHP5 ou PHP7, mais pas les deux
        #fastcgi_pass unix:/run/php5-fpm.sock;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    ## REDIRECTIONS

    # Flux RSS
    location /feed/ {
        rewrite /feed\/(.*)$ /feed.php?$1 last;
    }

    # Sitemap
    location = /sitemap.xml {
        rewrite .* /sitemap.php;
    }

    ## PROTECTION REPERTOIRES

    location /data/configuration { deny all; }
    location /version   { deny all; }
    location /update    { deny all; }
    location /readme    { deny all; }
}

server {
    listen 80;
    server_name nom_du_site;

    # Tout doit être en HTTPS
	return 301 https://$host$request_uri;
}

Notes sur les fichiers de conf(Edit)

Gestion du HTTP/2 : Les configurations proposée ci-dessous pour HTTPS utilisent HTTP/2 (cas 2 et cas 3). Cette nouvelle version du protocole HTTP est disponible à partir de NGINX 1.9.5. Si vous utilisez une version plus ancienne, supprimez http2 dans la ligne listen 443 ssl http2; sinon NGINX ne pourra pas démarrer.

Attention, pour fonctionner il faut placer les bonnes variables sur les lignes suivantes :

  • server_name nom_du_site;
    : "nom_du_site" doit être remplacé par le DNS ou l'adresse IP de votre serveur, vous pouvez également le remplacer par "localhost" si vous lancez le serveur web en local sur votre machine. Exemple :
    server_name pluxml.org www.pluxml.org 5.123.123.321;
  • root /var/www/site;
    : "/var/www/site" doit être remplacé par le chemin complet vers le répertoire ou a été extrait PluXml. Exemple :
    /var/www/site;
  • Si vous utilisez php5, décommentez la ligne
    fastcgi_pass unix:/run/php5-fpm.sock;
    (en supprimant le "#" devant la ligne) et commentez la ligne
    #fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    (en ajoutant un "#" devant la ligne). Inversement si vous utilisez php7.