Рейтинг:0

VPS с Ubuntu 18.04 NGINX Downloads PHP FILE

флаг cn

У меня есть VPS с:

  • Убунту 18.04
  • Nginx
  • Php7.2-fpm

Сервер запускает проект Ruby on rails как homeurl (example.com) и wordpress как каталог (example.com/blog). Сначала VPS был настроен с Apache2, все работало нормально, пока мне не пришлось интегрировать чат. Пришлось переключиться на Nginx для Action Cable.

Теперь приложение чата работает нормально на RoR, но если я попытаюсь получить доступ к блогу, я получу файл index.php для загрузки, он не запустится.

Вот моя конфигурация nginx по умолчанию:

# Вам следует просмотреть следующие URL-адреса, чтобы получить четкое представление
# файлов конфигурации Nginx, чтобы полностью раскрыть всю мощь 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
#
# В большинстве случаев администраторы удалят этот файл с сайтов с поддержкой/ и
# оставить его как ссылку на доступных сайтах, где он и дальше будет
# обновлено командой упаковки nginx.
#
# Этот файл будет автоматически загружать файлы конфигурации, предоставленные другими
# приложения, такие как Drupal или Wordpress. Эти приложения будут сделаны
# доступен по пути с этим именем пакета, например /drupal8.
#
# Более подробные примеры см. в /usr/share/doc/nginx-doc/examples/.
##

# Конфигурация сервера по умолчанию
#

сервер { 

        слушать 80; ## слушать ipv4; эта строка по умолчанию и подразумевается
        слушать [::]:80 default_server ipv6only=on; ## слушать ipv6
        индекс index.php index.html index.htm index.nginx-debian.html;
        имя_сервера локальный хост; 
        слушать 443 ssl default_server;
        слушать [::]:443 ssl default_server;
        ssl_certificate /etc/letsencrypt/live/asdfsf.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/sdafasdf.net/privkey.pem;
        корень /var/www/html/public;
        пассажир_включен;
        пассажир_руби /usr/местный/бен/руби;

расположение /var/www/html/public {
        try_files $uri $uri/ =404;
    }

    

расположение ~ ^/блог(/.*|$) {

 корень /var/www/html/public/blog;
        
         try_files $uri $uri/ /blog/index.php?$args;
        пассажир_включен выключен;       
        индекс index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;

        }

расположение ~ \.php$ {
                включить фрагменты/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
   
        }


}

Потратил 3 ночи на устранение неполадок, я не могу понять это правильно. Любой намек очень приветствуется. Спасибо

Рейтинг:1
флаг gr

У вас есть два местоположения соответствия регулярным выражениям, и у вас нет fastcgi_pass директива в первом. Места совпадения регулярных выражений проверяются от первого до последнего, поэтому второе место (где у вас есть fastcgi_pass директива) никогда не будет достигнута. Это означает, что любой файл PHP, доступ к которому осуществляется с помощью /блог/ Префикс URI будет рассматриваться как простой файл и не будет передаваться бэкенду PHP-FPM для выполнения. Вместо этого вы можете использовать два вложенных местоположения:

расположение ~ ^/блог(/.*|$) {
    пассажир_включен выключен;       
    индекс index.php;
    try_files $uri $uri/ /blog/index.php?$args;
    расположение ~ \.php$ {
        включить фрагменты/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;
    }
}

Вам не нужно определять корень /var/www/html/public/blog; для этого места. У тебя уже есть корень /var/www/html/public; на верхнем уровне, поэтому nginx будет искать файл index.php запрошено как /блог/index.php в /var/www/html/public/блог каталог (см. разницу между корень и псевдоним директивы nginx).

Mihai Andrei Maria avatar
флаг cn
Теперь это 404 Not Found.
Ivan Shatsky avatar
флаг gr
Если ваш `index.php` находится в каталоге `/var/www/html/public/blog`, удалите директиву `root` из этого места.
Mihai Andrei Maria avatar
флаг cn
Большое спасибо за ваши добрые усилия. Я был на исходе своих сил. С наилучшими пожеланиями !
Ivan Shatsky avatar
флаг gr
Добавил некоторые пояснения. Я также рекомендую вам прочитать [это] (https://serverfault.com/tour#:~:text=The%20person%20who%20asked%20can%20mark%20one%20answer%20as%20%22accepted%22.) :)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.