web-dev-qa-db-fra.com

PHP7.0-fpm extrêmement lent sur Ubuntu Windows Subsystem Linux

J'ai installé Windows Subsystem Ubuntu Shell récemment et déplacé tout mon développement de XAMPP vers nginx et php7.0-fpm installé via le sous-système ubuntu windows.

Le problème auquel je suis confronté est que les fichiers php se chargent extrêmement lentement. Pour un test je mets simplement

<?php phpinfo(); ?>

dans un fichier et exécuté. Il a littéralement fallu deux minutes au système pour renvoyer la réponse. J'ai beaucoup débogué mais je n'ai trouvé aucune solution.

J'exécute nginx via des blocs de serveur nginx et j'ai configuré mes domaines locaux.

Je suis sûr que php est plus lent en observant que si je charge un fichier statique, c'est-à-dire un fichier txt ou html, il se charge incroyablement rapidement.

Vous trouverez ci-dessous les fichiers activés pour mes sites et le fichier de conf nginx.

Sites activés

server {
    listen 80 ;
    listen [::]:80;

    root /mnt/c/xampp/htdocs/doit/;
    index index.html index.php;

    server_name doit.dev www.doit.dev;
    error_log /var/log/nginx/error.log;
    location / {
        try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_read_timeout 120;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }   
}

Fichier de configuration Nginx:

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


#mail {
#   # See sample authentication script at:
#   # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#   # auth_http localhost/auth.php;
#   # pop3_capabilities "TOP" "USER";
#   # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#   server {
#       listen     localhost:110;
#       protocol   pop3;
#       proxy      on;
#   }
# 
#   server {
#       listen     localhost:143;
#       protocol   imap;
#       proxy      on;
#   }
#}

Les journaux d'erreurs pour nginx et php-fpm fonctionnent, rien n'est enregistré contre les erreurs.

14
S. A. Malik

Trié cela, collé pour tout autre passionné travaillant avec Ubuntu sur le sous-système Windows.

Les configurations par défaut Nginx et php vont utiliser un socket unix:, mais cela ne fonctionnera pas pour WSL. De plus, WSL utilise un système d'initialisation léger et les services ne démarreront pas automatiquement pour Nginx, PHP, MySQL, etc.


Éditer /etc/nginx/sites-available/example.com.conf

commenter fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

et ajouter fastcgi_pass 127.0.0.1:9000;


Éditer /etc/php/7.0/fpm/pool.d/www.conf

commenter listen = /var/run/php/php7.0-fpm.sock;

et ajouter listen = 127.0.0.1:9000;


Il résoudra tous vos problèmes.

22
S. A. Malik

Utilisation de Windows 10 v1803 et de npmx et php7 fpm via WSL.

Changer d'écoute en 127.0.0.1:9000 ne fonctionne pas pour moi.

Après avoir passé des heures à googler, j'ai trouvé: https://github.com/Microsoft/WSL/issues/21

c'est-à-dire ajouter

fastcgi_buffering off;

à nginx.conf, et sauvez ma journée.

36
Wuvist