Nginx - Aktivieren Sie PHP für alle Hosts

7

Ich teste derzeit nginx und habe einige virtuelle Hosts eingerichtet, indem ich Konfigurationen für jeden virtuellen Host in einer eigenen Datei in einem Ordner namens abgelegt habe sites-enabled.

Ich bitte dann nginx, alle diese Konfigurationsdateien zu laden, indem ich:

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

Dies ist meine aktuelle Konfiguration:

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;
    }
}

Und dies ist eine der Konfigurationen für einen virtuellen Host:

server {
        server_name testsubdomain.testdomain.com

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

Das Problem ist, dass ich für testsubdomain.testdomain.com keine PHP-Skripte ausführen kann, es sei denn, ich habe einen Standortblock mit fastcgi-Parametern dafür definiert.

Was ich tun möchte, ist, PHP für alle gehosteten Sites auf diesem Server aktivieren zu können (ohne einen PHP-Standortblock mit fastcgi-Parametern hinzufügen zu müssen), um die Wartbarkeit zu gewährleisten. Dies ist so, dass ich, wenn ich Fastcgi-Werte für PHP ändern muss, diese einfach an einem Ort ändern kann.

Ist das für Nginx möglich? Wenn ja, wie kann das gemacht werden?

F21
quelle

Antworten:

7

Normalerweise erstelle ich einen "globalen" Ordner in meinem Ordner conf.d innerhalb des Nginx-Konfigurationsordners. Und dann erstellen Sie eine php.conf-Datei:

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;
}

Und dann füge ich einfach alle Konfigurationsdateien in den virtuellen Host ein:

include C:/nginx/conf.d/global/*.conf
Taylor Jasko
quelle
Hallo @ TaylorJasko, ich habe "location" directive is not allowed here in /etc/nginx/conf.d/php.conf. Weißt du warum das so ist?
Ericic
1
Hey @fuzzybee, hört sich so an, als würden Sie die Dateien in die Hauptdatei nginx.conf aufnehmen. Sie möchten es in den vhost selbst aufnehmen und einen eigenen Ordner haben /etc/nginx/conf.d/global. Fügen Sie also diese Include-Zeile in Ihr vhost ( /etc/nginx/sites-enabled/your-vhost) ein und dann sollte es funktionieren. Ihre hat /etc/nginx/nginx.confwahrscheinlich eine Zeile, die lautet include C:/nginx/conf.d/*.conf, und da dort keine Standortanweisungen zulässig sind, wäre dies sinnvoll.
Taylor Jasko