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?

  • Backup incrementale del server a AWS Glacier
  • Nginx serve file statici e cambia path / path
  • Nginx non registra errori PHP
  • Avvio di PHP: il database di orario è danneggiato
  • Come posso fare nginx sempre restituire un HTTP 503?
  • Fedora 15 PHP exec () non funziona
  • 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.

    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.