Puncte:0

VPS cu Ubuntu 18.04 NGINX Descărcă FIȘIER PHP

drapel cn

Am un VPS cu:

  • Ubuntu 18.04
  • Nginx
  • PHP 7,2-fpm

Serverul rulează proiectul Ruby on rails ca homeurl (example.com) și wordpress ca director (example.com/blog) . Mai întâi, VPS-ul a fost configurat cu Apache2, a făcut ca totul să funcționeze bine, până când a trebuit să integrez un chat live. A trebuit să treacă la Nginx pentru Action Cable.

Acum, aplicația de chat funcționează bine, pe RoR, dar dacă încerc să accesez blogul primesc fișierul index.php de descărcat, nu se execută.

Iată configurația mea implicită nginx:

# Ar trebui să vă uitați la următoarele adrese URL pentru a înțelege o înțelegere solidă
# de fișiere de configurare Nginx pentru a elibera pe deplin puterea lui Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# În majoritatea cazurilor, administratorii vor elimina acest fișier de pe site-uri activate/ și
# lăsați-l ca referință în interiorul site-urilor-disponibil acolo unde va continua să fie
# actualizat de echipa de ambalare nginx.
#
# Acest fișier va încărca automat fișierele de configurare furnizate de alții
# aplicații, cum ar fi Drupal sau Wordpress. Aceste cereri se vor face
# disponibil sub o cale cu acel nume de pachet, cum ar fi /drupal8.
#
# Consultați /usr/share/doc/nginx-doc/examples/ pentru exemple mai detaliate.
##

# Configurația implicită a serverului
#

Server { 

        asculta 80; ## asculta pentru ipv4; această linie este implicită și implicită
        asculta [::]:80 default_server ipv6only=on; ## ascultați pentru ipv6
        index index.php index.html index.htm index.nginx-debian.html;
        nume_server gazdă locală; 
        asculta 443 ssl default_server;
        asculta [::]:443 ssl default_server;
        ssl_certificate /etc/letsencrypt/live/asdfsf.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/sdafasdf.net/privkey.pem;
        root /var/www/html/public;
        pasager_activat pe;
        pasager_ruby /usr/local/bin/ruby;

locație /var/www/html/public {
        try_files $uri $uri/ =404;
    }

    

locație ~ ^/blog(/.*|$) {

 root /var/www/html/public/blog;
        
         try_files $uri $uri/ /blog/index.php?$args;
        passenger_enabled off;       
        index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;

        }

locație ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
   
        }


}

Am petrecut 3 nopți pentru a depana, nu reușesc să înțeleg bine. Orice indiciu este foarte binevenit. Mulțumesc

Puncte:1
drapel gr

Aveți două locații regex care se potrivesc și nu aveți fastcgi_pass directivă în primul. Locațiile de potrivire regex sunt verificate de la prima la ultima, deci a doua locație (unde aveți fastcgi_pass directivă) nu va fi niciodată atinsă. Asta înseamnă orice fișier PHP accesat cu /blog/ Prefixul URI va fi tratat ca un simplu fișier și nu va fi transmis backend-ului PHP-FPM pentru execuție. Puteți utiliza în schimb două locații imbricate:

locație ~ ^/blog(/.*|$) {
    passenger_enabled off;       
    index index.php;
    try_files $uri $uri/ /blog/index.php?$args;
    locație ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    }
}

Nu trebuie să definiți root /var/www/html/public/blog; pentru această locație. Deja ai root /var/www/html/public; la nivelul superior, astfel încât nginx va căuta fișierul index.php solicitat ca /blog/index.php în /var/www/html/public/blog director (vezi diferența dintre rădăcină și alias directivele nginx).

Mihai Andrei Maria avatar
drapel cn
Acum este 404 Nu a fost găsit.
Ivan Shatsky avatar
drapel gr
Dacă `index.php` se află în directorul `/var/www/html/public/blog`, eliminați directiva `root` din această locație.
Mihai Andrei Maria avatar
drapel cn
Vă mulțumesc foarte mult pentru efortul dumneavoastră amabil. Eram la capătul puterilor mele. Toate cele bune !
Ivan Shatsky avatar
drapel gr
Am adăugat câteva explicații. De asemenea, vă recomand să citiți [this](https://serverfault.com/tour#:~:text=The%20person%20who%20asked%20can%20mark%20one%20answer%20as%20%22accepted%22.) :)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.