NGINX : FICHIER QUI DOWNLOAD SANS EXTENSION

Ce sujet est résolu
153731
,

NGINX : PB DOWNLOAD FICHIER EN ENLEVANT SEULEMENT l'EXTENSION DU FICHIER (exemple .PHP)

Bonjour à tous !

Alors voilà je suis confronté à un petit problème assez génant.
J'ai créé un site internet hébergé sur un serveur Debian comportant Nginx. J'ai nottament fait de la réécriture d'URL et le PHP fonctionne bien.

Mon problème est que lorsque j'enlève le suffixe du .php à mon URL, il veut télécharger la page en PHP...
J'ai essayé de prendre l'exemple de ce code suivant :

 location ~/\. {
                deny all;
                access_log off;
                log_not_found off;
        }

Auriez-vous une solution pou confronter ce problème ?
Un grand merci ! :)

66 Réponse

1 3 4
44835
,

Il faut voir comment est appelée la socket php et où
tu devrais normalement avoir qques choses qui se base sur l'extension .php

 location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass   unix:/run/php/php7.0-fpm.sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_n$
                include /etc/nginx/fastcgi_params;
   }
44835
,

Je viens de reproduire le phenomène et j'avoue m'être fait avoir par ce fameux try_files
Il faut comprendre que tous les paramètres sauf le dernier sont testés en tant que fichier à renvoyer comme réponse
et même si c'est un fichier php il sera renvoyé tel quel en réponse !!!

voici ce qui ne marche pas

try_files $uri $uri/  /$uri.php /index.php ;

la différence entre /$uri.php et /index.php c'est que le /$uri.php sera renvoyé tel-quel
tandis que /index.php (en dernière position) sera considéré comme une uri à re-traiter
dans ce cas la location .php le prendra en charge et le transmettrera à l'interpréteur php

153731
,

La solution :

try_files $uri $uri/  /$uri.php /index.php ;

Merci ;)

Default
,

Il ne sait plus quel est le type mime du fichier si tu enlèves l'extension... Pk tu veux enlever l'extension, en fait..?? C'est surtout ça la grande question :-s

153731
,

Nan c'est pas ça ! En gros je veut afficher simplement une page php avec "mapage.php" par exemple et le php fonctionne correctement. Jusque la OK. Mais c'est quand je saisie dans l'URL "mapage" il me le télécharge... Je souhaiterais que quand j'enlève le suffixe .php il m'affiche seulement une erreur :)

153731
,

Je possède bien cette structure...
Cela ne résout pas mon problème :/

153731
,

Ca download le fichier sans extension...

Default
,

Donc faudrait que tu nous envoies le "nginx.conf" en entier ;-) Doit y avoir un comportement "par défaut", définit plus proche de la racine de ton fichier, qui provoque ça...

153731
,

Merci ! Le voici :

user  www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    # limit_req_zone key zone=name:size rate=rate;
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";

    # limit the number of connections per single IP
    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;

    # limit the number of requests for a given session
    limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;

    # zone which we want to limit by upper values, we want limit whole server
    server {
        limit_conn conn_limit_per_ip 10;
        limit_req zone=req_limit_per_ip burst=10 nodelay;
        limit_req zone=one burst=5;
    }

    # if the request body size is more than the buffer size, then the entire (or partial)
    # request body is written into a temporary file
    client_body_buffer_size  128k;

    # headerbuffer size for the request header from client -- for testing environment
    client_header_buffer_size 3m;

    # maximum number and size of buffers for large headers to read from client request
    large_client_header_buffers 4 256k;

    # read timeout for the request body from client -- for testing environment
    client_body_timeout   3m;

    # how long to wait for the client to send a request header -- for testing environment
    client_header_timeout 3m;

    # BREACH protection
    ## Disable of SSL compression
    gzip off;

    include       /etc/nginx/mime.types;
    server_tokens off;
    client_max_body_size 20000m;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/website.conf;
}
Default
,

Ok, et ton website.conf?

41190
,

Bonjour,

Ça vient sûrement de ta manière de faire ta réécriture, est-ce que tu pourrais aussi nous montrer cette partie

153731
,

Je vous montre tout !

server {

        listen      80;
        server_name     www.website.fr 192.168.0.47;

        root /home/dev/www/public_html;
        index index.html index.php;
    server_tokens off;

    location ~/.well-known {
        allow all;
    }

    location ~/cloud {
        allow all;
    }   

     location ~ \.wav$ {
        add_header Content-Disposition "inline";
        }   

    # nginx configuration

    location /cloud/ {
    autoindex off;
    if (!-e $request_filename){
        rewrite ^/cloud/(.*)$ /cloud/index.php break;
    }
}

     location /db55-manager {

                # Option: cela permet de séparer les log de phpmyadmin des autres
                access_log /home/dev/www/.logs/phpmyadmin_access.log;
                error_log /home/dev/www/.logs/phpmyadmin_error.log;

                index index.php index.html index.htm;

                # Interdiction de certains fichier sensibles.
                location ~ ^/db55-manager/(README|LICENSE|ChangeLog|DCO)$ {
                        deny all;
                }
                # Interdiction des fichiers .md
                location ~ ^/db55-manager/(.+\.md)$ {
                        deny all;
                }
                # interdiction de certains répertoires sensibles.
                location ~ ^/db55-manager/(doc|sql|setup)/ {
                        deny all;
                }

                #configuration de fastCGI pour PhpMyAdmin
                location ~ ^/db55-manager/(.+\.php)$ {
                        try_files $uri =404;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        fastcgi_pass    unix:/var/run/php/php7.0-fpm.sock;
                        fastcgi_index  index.php;
                        include        fastcgi_params;
                        }

        auth_basic "Pour continuer, merci de vous authentifier sur nos serveurs !";
                auth_basic_user_file /etc/nginx/pma_password;
        }   

    location /projects/browse {
                auth_basic "Pour continuer, merci de vous authentifier sur nos serveurs.";
                auth_basic_user_file /etc/nginx/pswd_projects_website;
    }

        error_log /home/dev/www/.logs/error_log;
        access_log /home/dev/www/.logs/access_log;

    # nginx configuration

    location / {
        if ($http_host ~ "^website.fr$"){
            rewrite ^/(.*) https://www.website.fr/$1 redirect;
        }
        if ($http_host ~ "//website.fr$"){
                rewrite ^/(.*) https://www.website.fr/$1 redirect;
                }
        if ($http_host ~ "^www.website.fr$"){
        rewrite ^/(.*) https://www.website.fr/$1 redirect;
        }
        if ($http_host ~ "^85.169.121.91$"){
            rewrite ^/(.*) https://www.website.fr/$1 redirect;
        }
         if ($http_host ~ "^website.tk$"){
                rewrite ^/(.*) https://www.website.fr/$1 redirect;
                }

    try_files $uri $uri/ $uri.html $uri.php $uri.wav =404;
        autoindex on;
    }

    location /cloud {
        autoindex off;
        try_files $uri $uri/ $uri.html $uri.php;
    }

    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        limit_req zone=one burst=5;
    }

    location ~* \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }

    error_page 404 /404.html;
}

server {
        listen 80;
        server_name 85.169.121.91;
        return 301 https://www.website.fr$request_uri;
}

server {    
    listen 80;
    server_name website.tk;
    return 301 https://www.website.fr$request_uri;
}

server {
    listen 80;
    server_name website.fr;
    return 301 https://www.website.fr$request_uri;
}
server {
    listen 443 ssl;
    server_name website.fr;
    root /home/dev/www/public_html;
    index index.html index.php;

    if ($host = 'https://website.fr' ) {
         rewrite  ^/(.*)$  https://www.website.fr/$1  permanent;
      }


    location / {
        try_files $uri $uri/ $uri.html $uri.php $uri.mp3 $uri.wav =404;
        autoindex off;
    }

    location ~ \.php$ {                                                       
        try_files $uri $uri/ $uri.html $uri.php =404;                                              
        fastcgi_pass unix:/var/run/php5-fpm.sock;                         
        fastcgi_index index.php;                                         
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
        include fastcgi_params;                                                    

        }

    location ~ /\.wav$ {
        add_header Content-Disposition "inline";
        }

    location /db55-manager0 {

                # Option: cela permet de séparer les log de phpmyadmin des autres
                access_log /home/dev/www/.logs/phpmyadmin_access.log;
                error_log /home/dev/www/.logs/phpmyadmin_error.log;

                index index.php index.html index.htm;

                # Interdiction de certains fichier sensibles.
                location ~ ^/db55-manager/(README|LICENSE|ChangeLog|DCO)$ {
                        deny all;
                }
                # Interdiction des fichiers .md
                location ~ ^/db55-manager/(.+\.md)$ {
                        deny all;
                }
                # interdiction de certains répertoires sensibles.
                location ~ ^/db55-manager/(doc|sql|setup)/ {
                        deny all;
                }

                #configuration de fastCGI pour PhpMyAdmin
                location ~ ^/db55-manager/(.+\.php)$ {
                        try_files $uri =404;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        fastcgi_pass    unix:/var/run/php/php7.0-fpm.sock;
                        fastcgi_index  index.php;
                        include        fastcgi_params;
                        }

                auth_basic "Pour continuer, merci de vous authentifier sur nos serveurs !";
                auth_basic_user_file /etc/nginx/pma_password;   
        }

    location /projects/browse/ {
                auth_basic "Pour continuer, merci de vous authentifier sur nos serveurs.";
                auth_basic_user_file /etc/nginx/pswd_projects_website;
        }

        error_log /home/dev/www/.logs/error_log;
        access_log /home/dev/www/.logs/access_log;

    # Redirection documents site www.website.fr 

        # -->Section about
            rewrite ^/qui-sommes-nous$ /pages-site-internet/about/qui-sommes-nous.php last;
        # --></> Fin about

        # -->Section produits
            rewrite ^/cxs-directory$ /pages-site-internet/produits/cxs-directory.php last;      
            rewrite ^/cxs-workstation$ /pages-site-internet/produits/cxs-workstation.php last;
            rewrite ^/tools-acts$ /pages-site-internet/produits/tools-acts.php last;
        # --></> Fin produits

        # -->Section services-informations
            rewrite ^/informations-cloud$ /pages-site-internet/services-informations/informations-cloud.php last;
            rewrite ^/informations-developpement-web-et-logiciels$ /pages-site-internet/services-informations/informations-developpement-web-et-logiciels.php last;
            rewrite ^/informations-graphisme$ /pages-site-internet/services-informations/informations-graphisme.php last;
            rewrite ^/informations-vps$ /pages-site-internet/services-informations/informations-vps.php last;
        # --></>Fin services-informations

        # -->Section projects/browse
            rewrite ^/browse$ /projects/browse/ last;
        # --></>Fin projects/browse
    # Fin de toutes les redirections

    location ~*^.+(swf|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
        proxy_pass http://192.168.0.47:80;
        proxy_cache_valid 2d;
        expires max;
    }

    ssl on;
    ssl_certificate /etc/letsencrypt/live/www.website.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.website.fr/privkey.pem;

    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/www.website.fr/fullchain.pem;

    resolver 8.8.8.8 8.8.8.4 208.67.222.222 valid=300s;
    resolver_timeout 3s;

    ssl_session_cache shared:SSL:100m;
    ssl_session_timeout 24h;
    ssl_session_tickets on;
    ssl_session_ticket_key /etc/nginx/ssl/ticket.key;

    ssl_dhparam /etc/nginx/ssl/dhparam4.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

    error_page 403 /403.html;
    error_page 404 /404.html;
    error_page 500 /500.html;

    location ~ /\. { deny all; access_log off; log_not_found off; }

    location ~ [^/]\.php(/|$) 
{
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) 
    {
            return 404;
    }
}
}


Merci !

Default
,

C'est quoi l'url que tu souhaites joindre? Et ton fichier il te propose de le dl en tant qu'octet-stream?

153731
,

C'est à dire ? Mon url est un site internet que j'héberge et jusque la tout va tres bien. Mais c'est ce problème ou le fichier n'arrive pas à interpréter l'erreur et donc me demande de le télécharger.

Par contre je ne comprend pas ce que vous voulez dire par supprimer en tant qu'octet-stream...

Default
,

dl = download

Et une url c'est pas un site... Tu comprends ce que veut dire "url rewirting"? Si tu ignores ce qu'est une url c'est mal barré :-D

A quelle adresse se trouve ton fichier en question..?

153731
,

Oui je sais mais je ne parle pas d'utl rewritting mais que chaque fichier en format php si on enleve l'extension on veut le telecharger.

Je souhaite seulement que quand on enleve l'extension ".php" d'une page il me redirige vers ma page d'erreur 404.
Tout le site se trouve dans /home/dev/www/public_html
La config : /etc/nginx/ et tout le tralalère... :)

Default
,

Et quand ça les dl, c'est quoi le mime type résultant..? Octet-stream?

Parce qu'à mon avis, si tu enlèves l'extension ça match tout simplement rien et donc nginx fallback sur le default_type...

153731
,

Je te fournit le mime.types :

types {

  # Data interchange

    application/atom+xml                  atom;
    application/json                      json map topojson;
    application/ld+json                   jsonld;
    application/rss+xml                   rss;
    application/vnd.geo+json              geojson;
    application/xml                       rdf xml;


  # JavaScript

    # Normalize to standard type.
    # https://tools.ietf.org/html/rfc4329#section-7.2
    application/javascript                js;


  # Manifest files

    application/manifest+json             webmanifest;
    application/x-web-app-manifest+json   webapp;
    text/cache-manifest                   appcache;


  # Media files

    audio/midi                            mid midi kar;
    audio/mp4                             aac f4a f4b m4a;
    audio/mpeg                            mp3;
    audio/ogg                             oga ogg opus;
    audio/x-realaudio                     ra;
    audio/x-wav                           wav;
    image/bmp                             bmp;
    image/gif                             gif;
    image/jpeg                            jpeg jpg;
    image/jxr                             jxr hdp wdp;
    image/png                             png;
    image/svg+xml                         svg svgz;
    image/tiff                            tif tiff;
    image/vnd.wap.wbmp                    wbmp;
    image/webp                            webp;
    image/x-jng                           jng;
    video/3gpp                            3gp 3gpp;
    video/mp4                             f4p f4v m4v mp4;
    video/mpeg                            mpeg mpg;
    video/ogg                             ogv;
    video/quicktime                       mov;
    video/webm                            webm;
    video/x-flv                           flv;
    video/x-mng                           mng;
    video/x-ms-asf                        asf asx;
    video/x-ms-wmv                        wmv;
    video/x-msvideo                       avi;

    # Serving `.ico` image files with a different media type
    # prevents Internet Explorer from displaying then as images:
    # https://github.com/h5bp/html5-boilerplate/commit/37b5fec090d00f38de64b591bcddcb205aadf8ee

    image/x-icon                          cur ico;


  # Microsoft Office

    application/msword                                                         doc;
    application/vnd.ms-excel                                                   xls;
    application/vnd.ms-powerpoint                                              ppt;
    application/vnd.openxmlformats-officedocument.wordprocessingml.document    docx;
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet          xlsx;
    application/vnd.openxmlformats-officedocument.presentationml.presentation  pptx;


  # Web fonts

    application/font-woff                 woff;
    application/font-woff2                woff2;
    application/vnd.ms-fontobject         eot;

    # Browsers usually ignore the font media types and simply sniff
    # the bytes to figure out the font type.
    # https://mimesniff.spec.whatwg.org/#matching-a-font-type-pattern
    #
    # However, Blink and WebKit based browsers will show a warning
    # in the console if the following font types are served with any
    # other media types.

    application/x-font-ttf                ttc ttf;
    font/opentype                         otf;


  # Other

    application/java-archive              ear jar war;
    application/mac-binhex40              hqx;
    application/octet-stream              bin deb dll dmg exe img iso msi msm msp safariextz;
    application/pdf                       pdf;
    application/postscript                ai eps ps;
    application/rtf                       rtf;
    application/vnd.google-earth.kml+xml  kml;
    application/vnd.google-earth.kmz      kmz;
    application/vnd.wap.wmlc              wmlc;
    application/x-7z-compressed           7z;
    application/x-bb-appworld             bbaw;
    application/x-bittorrent              torrent;
    application/x-chrome-extension        crx;
    application/x-cocoa                   cco;
    application/x-java-archive-diff       jardiff;
    application/x-java-jnlp-file          jnlp;
    application/x-makeself                run;
    application/x-opera-extension         oex;
    application/x-perl                    pl pm;
    application/x-pilot                   pdb prc;
    application/x-rar-compressed          rar;
    application/x-redhat-package-manager  rpm;
    application/x-sea                     sea;
    application/x-shockwave-flash         swf;
    application/x-stuffit                 sit;
    application/x-tcl                     tcl tk;
    application/x-x509-ca-cert            crt der pem;
    application/x-xpinstall               xpi;
    application/xhtml+xml                 xhtml;
    application/xslt+xml                  xsl;
    application/zip                       zip;
    text/css                              css;
    text/csv                              csv;
    text/html                             htm html shtml;
    text/markdown                         md;
    text/mathml                           mml;
    text/plain                            txt;
    text/vcard                            vcard vcf;
    text/vnd.rim.location.xloc            xloc;
    text/vnd.sun.j2me.app-descriptor      jad;
    text/vnd.wap.wml                      wml;
    text/vtt                              vtt;
    text/x-component                      htc;

}

Merci de prendre de ton temps ! :D

Default
,

J'ai pas besoin du mime.types ^^' Réponds juste à ma question :-s

153731
,

Tu va me tuer mais je comprend pas trop ta question... :D

1 3 4