Question Nginx - Activer PHP pour tous les hôtes


Je teste actuellement nginx et j’ai configuré certains hôtes virtuels en plaçant les configurations de chaque hôte virtuel dans son propre fichier, dans un dossier appelé sites-enabled.

Je demande ensuite à nginx de charger tous ces fichiers de configuration en utilisant:

include       C:/nginx/sites-enabled/*.conf;

C'est ma config actuelle:

http {
    server_names_hash_bucket_size  64;

    include       mime.types;
    include       C:/nginx/sites-enabled/*.conf;
    default_type  application/octet-stream;


    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        root         C:/www-root;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            index  index.html index.htm index.php;
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

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

    }

    server{
        server_name  localhost;
    }
}

Et ceci est l'une des configurations pour un hôte virtuel:

server {
        server_name testsubdomain.testdomain.com

        root C:/www-root/testsubdomain.testdomain.com;
}

Le problème est que pour testsubdomain.testdomain.com, je ne peux pas exécuter de scripts php sans avoir défini un bloc d’emplacement avec des paramètres fastcgi.

Ce que je voudrais faire est de pouvoir activer PHP pour tous les sites hébergés sur ce serveur (sans avoir à ajouter un bloc d'emplacement PHP avec des paramètres fastcgi) pour assurer la maintenabilité. C’est pourquoi, si je dois modifier les valeurs de fastcgi pour PHP, je peux le changer en un seul endroit.

Est-ce quelque chose qui est possible pour nginx? Si oui, comment cela peut-il être fait?


7
2017-12-10 03:59


origine




Réponses:


Je crée généralement un dossier "global" dans mon dossier conf.d à l'intérieur du dossier Nginx config. Et créez ensuite un fichier php.conf:

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

Et puis je viens d'inclure tous les fichiers de configuration dans l'hôte virtuel:

include C:/nginx/conf.d/global/*.conf

7
2017-12-10 07:57



Bonjour @TaylorJasko, j'ai eu "location" directive is not allowed here in /etc/nginx/conf.d/php.conf. Savez-vous pourquoi c'est le cas? - ericn
Hey @fuzzybee, on dirait que vous incluez les fichiers dans le fichier principal nginx.conf. Vous voudriez l'inclure sur le vhost lui-même et lui donner son propre dossier /etc/nginx/conf.d/global. Mettez donc cette ligne dans votre vhost (/etc/nginx/sites-enabled/your-vhost) et alors ça devrait marcher. Votre /etc/nginx/nginx.conf a probablement une ligne qui lit include C:/nginx/conf.d/*.conf, et comme aucune directive d’emplacement n’est autorisée ici, cela aurait du sens. - Taylor Jasko