Конфигурация Nginnx для шаблона расширенного приложения Yii 2

Я не могу настроить сервер Nginx, так что:

  • на public_html/frontend/web/index.php файл будет отправлен в ответ на " index.php " запрос.
  • на public_html/backend/web/index.php файл будет отправлен в ответ на " admin / index.php " запрос.

подскажите пожалуйста, где я ошибаюсь. Вот моя конфигурация:

server {
    listen        80;
    server_name   yii2.lo;
    server_tokens off;

    client_max_body_size 128M;
    charset       utf-8;

    access_log    /var/log/nginx/yii2-access.log main buffer=50k;
    error_log     /var/log/nginx/yii2-error.log notice;

    set           $host_path      "/srv/http/yii2/public";
    set           $yii_bootstrap  "index.php";

    index         $yii_bootstrap;

    location / {
        root          $host_path/frontend/web;
        try_files $uri $uri/ /$yii_bootstrap?$args;

    }

    location /admin {
        root          $host_path/backend/web;
        try_files $uri $uri/ /$yii_bootstrap?$args;
    }

    location ~ .php$ {
        try_files $uri =404;

        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_index           $yii_bootstrap;

        # Connect to php-fpm via socket
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;

        fastcgi_connect_timeout     30s;
        fastcgi_read_timeout        30s;
        fastcgi_send_timeout        60s;
        fastcgi_ignore_client_abort on;
        fastcgi_pass_header         "X-Accel-Expires";

        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO        $fastcgi_path_info;
        fastcgi_param  HTTP_REFERER     $http_referer;
        include fastcgi_params;
    }

    location ~* .(js|css|less|png|jpg|jpeg|gif|ico|woff|ttf|svg|tpl)$ {
        expires 24h;
        access_log off;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        log_not_found off;
        access_log off;
    }

    location ~ /. {
        deny all;
        access_log off;
        log_not_found off;
    }
}

4 ответов


короче говоря: используйте первый метод, приведенный ниже.

остальная часть ответа-это список рекомендаций.

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

во второй части я опишу вам, где вы допустили ошибки в своей файл конфигурации, и я покажу вам плохо написанную конфигурацию для ваших нужд, которая работает.

I. развертывание общего хостинга

я настоятельно рекомендую вам использовать это. Это официальным путем из документации Yii 2, чтобы сделать бэкэнд работать в том же домене, хотя это помогает развернуть проект на общий хостинг. И для этого не требуется никакой дополнительной конфигурации nginx, только базовая для frontend root.

позвольте мне написать простой список в соответствии с этим руководством:

  1. переместить содержимое из /backend/web to /frontend/web/admin.
  2. правильные пути скриптов в /frontend/web/admin/index.phpindex-test.php, если вы используете его)

это все, у вас есть бэкэнд в том же домене в /admin URL-адрес. Кроме того, прочитайте последний раздел руководства, касающийся файлов cookie. Расширенный шаблон был разработан для использования различных доменов для каждой среды, поэтому в руководстве описывается конфигурация бэкэнда для общего доступа хостинг для хранения куки-файлов из frontend и backend отдельно.

конечно, не забудьте изменить свой /environments файлы для правильной инициализации вашего проекта с /init сценарий.

II. Конфигурация Nginx

ошибки

я не профессиональный администратор nginx, но я могу описать, что не так в вашей конфигурации, основываясь на моем личном опыте и документации. К сожалению, я не смогу предоставить ссылки на документация, потому что мой текущий рейтинг не позволит мне опубликовать более 2 ссылок.

контекст сервера root

нет root директива в контексте вашего сервера. Таким образом, когда ~ \.php$ местоположение совпадает, у него нет корня вообще и использует корень nginx по умолчанию. Попробуйте установить общие


вот моя рабочая конфигурация, основанная на принятом ответе. Мой проект


попробуйте указать конфигурацию Nginx : Я использую конфигурацию для шаблона " Advanced в файле конфигурации домена укажите интерфейс для so:

слушать фронтэнда.сайт.loc: 80; # для интерфейса

укажите домен бэкэнда: слушать бэкэнда.сайт.loc: 80; # для бэкэнда


этот парень проделал очень хорошую работу по созданию расширенного приложения nginx config (с поддоменом, который IMHO является лучшей настройкой):https://gist.github.com/Kison/45ec9ce3c1ebf422cbd42bd5ce04d8e4