Хобрук: Ваш путь к мастерству в программировании

Настройка php с nginx внутри приложения reactjs

У меня есть конфигурация nginx для реагирующего приложения. Однако я также хотел бы включить sitemap.php, который я создаю динамически с помощью php.

Итак, вот мой конфиг nginx:

server {
    listen 80;
    listen [::]:80;
    server_name mysite.com;

    index index.html index.htm;


    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    }


    location /sitemap.xml {
        alias /var/www/web-app/public/sitemap.php;
    }


    location / {
        root /var/www/web-app/public;
        try_files $uri $uri/ /index.html;
        default_type "text/html";
    }

}

Файл фрагментов состоит из этого:

# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;

# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;

# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;
include fastcgi.conf;

Кроме того, это размещено на Ubuntu 16.04 digitalocean VPS.

Мое приложение для реагирования по-прежнему загружается нормально. Он основан на index.html в корне моего сайта (/var/www/web-app/public). Если я помещаю test.php в общую папку, я получаю ошибку 404. Для моего псевдонима sitemap.xml он правильно перенаправляется на sitemap.php (также общедоступный), но php не отображается.

Итак, у меня две самые большие проблемы: 1. Почему я получаю 404 на /mysite.com/test.php? 2. И почему мой php не отображается, когда он работает? (например, sitemap.php)


Ответы:


1

У вас отсутствует оператор root для блока location ~ \.php$, поэтому ваши файлы PHP не будут найдены. Поскольку это похоже на общий root с блоком location /, просто переместите оператор в область действия блока server:

root /var/www/web-app/public;

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}

location / {
    try_files $uri $uri/ /index.html;
    default_type "text/html";
}

Есть несколько способов перенаправить /sitemap.xml на /sitemap.php, но rewrite...last будет самым простым и незаметным для пользователей:

location = /sitemap.xml {
    rewrite ^ /sitemap.php last;
}

Синтаксис location см. в этом документе и этот для директивы rewrite.

06.04.2018
  • Спасибо. Это ответило на оба вопроса, и вы дали мне дополнительную информацию о том, как правильно переписать. 06.04.2018
  • Новые материалы

    Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
    Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

    Это оно
    Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

    Базовое руководство по переносу концепций обучения в глубокое обучение
    Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..

    Случай использования npm3 вместо npm2 для разработки библиотеки
    Некоторое время назад я создал библиотеку на NodeJS, чтобы упростить рендеринг на стороне сервера и клиента. Он использует React и React Router для отображения соответствующего HTML на веб-сайте...