Può Nginx gestire richieste php (o simili fcgi) all'interno di un alias?

Sto convertendo un server Apache legato a Nginx e non ho il lusso di cambiare URL o di riorganizzare il filesystem.

È ansible utilizzare i blocchi {} di posizione nidificata nella configuration Nginx per indicarlo per alimentare i file .php in una directory alias a fastcgi mentre serve normalmente i contenuti statici?

Configurazione simile a quello che mi riesce:

server { listen 80; location / { index index.html; } location /foosite/ { alias /var/aliases/foo; location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } } 

Le richieste di /foosite/static.jpg sono servite bene, ma nginx sembra garble il path di qualsiasi file .php quando si tenta di inviarli a fastcgi.

  • POST Fail via richiesta AJAX?
  • PHP ha lanciato errori del server dopo che Ubuntu ha eseguito una session di aggiornamenti automatici - qualunque modo per determinare la causa?
  • Come posso installare PHP 5.3 su CentOS?
  • Come faccio a controllare che la cache APC funziona?
  • Come passare le variables $ _GET a uno script PHP tramite la row di command?
  • PHP_Flag e PHP_Value Comando non trovato problema
  • L'impostazione dell'intestazione di In rende la posta () richiede molto tempo per submit
  • Installare xdebug per php 5.3.17 su centos 6.3 (finale)
  • 3 Solutions collect form web for “Può Nginx gestire richieste php (o simili fcgi) all'interno di un alias?”

    La soluzione fornita qui non è una soluzione. E non è più corretto. Utilizzando Lucid (10.4) ho potuto usare questa soluzione. Il problema con la soluzione womble è che non imposta correttamente il parametro DOCUMENT_ROOT ; piuttosto, include il nome dello script nel file document.

    Questo sembra funzionare bene.

     location /foosite { alias /home/foosite/www/; index index.php index.html index.htm; location ~ /foosite/(.*\.php)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$1; include /etc/nginx/fastcgi_params; } } 

    Usando nginx/0.7.65

    Il "garbling" di cui parli è, per quanto posso dirlo, un bug in nginx relativo a blocchi di ubicazioni annidati (o forse alias nei blocchi di ubicazioni che eseguono una corrispondenza basata su regex senza una cattura … non sono sicuro) . Quello che ho potuto fare, però, era abbastanza semplice.
    Innanzitutto, è ansible inserire tutti i parametri fastcgi, tra cui la linea fastcgi_pass e il fastcgi_param SCRIPT_FILENAME $request_filename in un file separato per essere inclusi nelle parti del sito. Ho messo la mia in /etc/nginx/fragments/php .

    Quindi, per /foosite , hai bisogno di due blocchi di posizione, come ad esempio:

     location /foosite { alias /var/aliases/foo; } location /foosite(.*\.php)$ { alias /var/aliases/foo$1; include /etc/nginx/fragments/php; } 

    Una cosa per essere cauti di qui – a differenza dei blocchi di posizione "normali", sembra che la corrispondenza basata su regex sia eseguita nell'ordine specificato nel file di configuration (non più lungo-match-first, come sembra essere il caso di non-regex blocchi di posizione). Quindi, se stai facendo una località PHP specifica per il sito, nonché un gestore PHP generico "all-site" ( location ~ \.php$ ), allora dovrai mettere il gestore generico "all-site" ultimo nel block server, o tutto l'inferno si romperà.

    Sì, questo fa schifo, e se ottengo la motivazione, probabilmente cercherò di spiegare esattamente cosa stava andando male con il caso nidificato (il parser di configuration non lo fa, quindi sospetto che dovrebbe funzionare, ma nessuno lo usa veramente, quindi è buggy).

    AFAIK, non è ansible utilizzare blocchi nidificati.

    Prova qualcosa come il seguente.

     location / { root /var/www; access_log off; index index.php index.html; expires 1d; try_files $uri $uri/ /index.php?q=$uri; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include /usr/local/nginx/conf/fastcgi_params; } 

    Puoi modificare il secondo block per essere qualcosa di simile

     location ~ /foosite/.*php$ 

    (necessità di test)

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.