Forum Linux.débutant Changer le upload_tmp_dir : nginx, php-fpm, nextcloud

Posté par . Licence CC by-sa.
Tags : aucun
0
6
juin
2018

Bonjour à tous,

J'ai mis en oeuvre le serveur nextcloud sur ma raspberry pi 3.

J'ai monté un disque dur externe sur /mnt pour éviter de charger la carte SD de 8Go.

De cette facon, j'aimerais changer le upload_tmp_dir (/tmp et /mnt/data_tmp) tandis que le data_dir se change sans problème.

L'interface web de nextcloud permet de télécharger les fichiers depuis le serveur (via webdav et oc web interface menu).

De ce téléchargement se déclanche 3 process :
-1 nginx
-2 pool www

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
mysql     1003  0.1  1.8 638020 18164 ?        Ssl  20:28   0:05 /usr/sbin/mysqld
root      2335  0.0  1.5 137980 15504 ?        Ss   21:18   0:00 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
www-data  2337  1.1  2.1 140608 21532 ?        S    21:18   0:10 php-fpm: pool www
www-data  2338  1.0  1.8 138472 18888 ?        S    21:18   0:09 php-fpm: pool www
root      2355  0.0  0.1  47568  1292 ?        Ss   21:18   0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data  2356 10.9  0.3  47744  3752 ?        S    21:18   1:43 nginx: worker process
www-data  2357  7.8  1.2  56088 12132 ?        R    21:18   1:14 nginx: worker process
www-data  2358  0.0  0.2  47568  2836 ?        S    21:18   0:00 nginx: worker process
www-data  2359  0.0  0.2  47568  2836 ?        S    21:18   0:00 nginx: worker process
pi        2636  0.0  0.2   7732  2788 pts/0    R+   21:34   0:00 ps aux

J'ai trouvé quelques pistes pour résoudre le problème, je pense notemment à la conf nginx et php (surtout openbase_dir).

https://raspberry-hosting.com/en/faq/how-install-nginx-php-fpm-raspberry-pi
https://www.techandme.se/increase-max-file-size/
https://serverfault.com/questions/642034/nginx-and-php-fpm-permission
https://support.plesk.com/hc/en-us/articles/360001540233-How-to-change-a-directory-for-temporary-PHP-files

Je vous remercie par avance.

Ci-dessous ma conf nginx pour mon serveur.

upstream php-handler {
    #server 127.0.0.1:8000;
    server unix:/var/run/php/php7.0-fpm.sock;
}

server {
    listen 101;
    listen [::]:101;
    server_name www.domaine.org;
    # enforce https
    return 301 https://$host$request_uri;
}

server {
    listen 102 ssl http2;
    listen [::]:102 ssl http2;
    server_name www.domaine.org;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/www.domaine.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.domaine.org/privkey.pem;

    # .well-known doit resté accessible
    location .well-known/ {
        allow all;
    }

    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.
    # add_header Strict-Transport-Security "max-age=15768000;
    # includeSubDomains; preload;";
    #
    # WARNING: Only add the preload option once you read about
    # the consequences in https://hstspreload.org/. This option
    # will add the domain to a hardcoded list that is shipped
    # in all major browsers and getting removed from this list
    # could take several months.
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    # Path to the root of your installation
    root /var/www/nextcloud/;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
    # last;

    location = /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }

    # set max upload size
    client_max_body_size 10G; #or 0 to disable allowed size
    fastcgi_buffers 64 128K;

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    location / {
        rewrite ^ /index.php$uri;
        client_body_temp_path /tmp;
        #upload_tmp_dir /mnt/my_data/tmp;
        #tempdirectory /mnt/my_data/tmp;
    }

    location ~ ^/.well-known/acme-challenge/* {
        allow all;
    }
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        #Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;

        #upload_tmp_dir = /tmp;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~ \.(?:css|js|woff|svg|gif)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=15778463";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        # add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
        #
        # WARNING: Only add the preload option once you read about
        # the consequences in https://hstspreload.org/. This option
        # will add the domain to a hardcoded list that is shipped
        # in all major browsers and getting removed from this list
        # could take several months.
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        # Optional: Don't log access to assets
        access_log off;
    }

    location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
    }

    ########   UPDATE V13 NEXTCLOUD   ########
    #fastcgi_read_timeout 5s;
    #fastcgi_request_buffering off;

    #proxy_max_temp_file_size 1024m; #10GB?
    #proxy_buffering on;

    #large_client_header_buffers 16 32k;

}
  • # plusieurs methodes

    Posté par . Évalué à 2. Dernière modification le 06/06/18 à 09:33.

    tu peux en effet jouer de la config de php, sur le programme, ou directement avec le systeme de fichier.

    si tu ne trouves pas les infos pour php ou ton programme, tu peux

    1. sur le disque dur, faire les dossier /mnt/tmp et /mnt/data_tmp
      1. faire un lien symbolique /tmp -> /mnt/tmp par exemple
      2. ou monter avec l'option bind /mnt/tmp sur /tmp et /mnt/data_tmp sur l'emplacement de data_tmp, des le demarrage de la machine avec fstab
    • [^] # Re: plusieurs methodes

      Posté par . Évalué à 1.

      C'est à dire que j'ai regardé dans tous les dossiers à la racine de la carte SD.

      Aucun fichier n'augmente et en particulier le /tmp donc monter ce dossier sur le disque dur ne changera rien je pense, je ne sais pas si je dis juste.

      • [^] # Re: plusieurs methodes

        Posté par . Évalué à 2.

        L'interface web de nextcloud permet de télécharger les fichiers depuis le serveur (via webdav et oc web interface menu).
        De ce téléchargement se déclanche 3 process :
        -1 nginx
        -2 pool www

        quand tu telecharges, c'est dans le sens le serveur -> ton PC
        il est normal qu'il n'y ait aucun fichier temporaire

        ou alors tu telecharges un dossier qui contient plusieurs fichiers,
        il fait alors un fichier zip, en memoire ou sur le disque (SD ou HDD)

        tu devrais voir un fichier temporaire quand tu fais un envoie de fichier (upload) de ton PC vers le serveur.

        • [^] # Re: plusieurs methodes

          Posté par . Évalué à 1.

          quand tu telecharges, c'est dans le sens le serveur -> ton PC
          il est normal qu'il n'y ait aucun fichier temporaire

          ou alors tu telecharges un dossier qui contient plusieurs fichiers,
          il fait alors un fichier zip, en memoire ou sur le disque (SD ou HDD)

          Dans le cas d'une récupération d'un fichier du serveur vers le PC, le / grossi mais je ne trouve pas le dossier qui grossi en ayant fait un du -sh à partir de chaque dossier pendant la récupération !

          tu devrais voir un fichier temporaire quand tu fais un envoie de fichier (upload) de ton PC vers le serveur.

          La c'est le dossier /mnt/data/nextcloud qui grossi et le / ne bouge pas. Dans le sens fichier du PC vers le serveur c'est bon.

          Conclusion : Du coup je ne vois pas ou régler le 1er cas, upload_dir_tmp qui même si je l'indique ne semble pas fonctionner (je pense du coup à nginx et php-fpm vu les process que j'ai cité pour serveur -> ton PC).

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.