Заготовка yii2-app-advanced мне нравится больше, чем yii2-app-basic, даже если требуется создать относительно простой сайт. При этом часто возникает необходимость настроить Yii2 и Nginx на работу frontend и backend в пределах одного домена. В этой статье рассмотрен самый простой способ это сделать. Я обычно настраиваю так в Debian. Но также делается в любом другом Lunux, и может даже в Windows.
Допустим Yii2 находится в каталоге /media/sf_Webdev/d1mon.loc/yii2
,
тогда имеем такое расположение точек входа:
/media/sf_Webdev/d1mon.loc/yii2/backend/web
/media/sf_Webdev/d1mon.loc/yii2/frontend/web
Yii2 может быть где угодно.
/media/sf_Webdev
— это общая папка Webdev
, в случае если используется веб-сервер, настроенный в VirtualBox по этой инструкции. Сайт будет работать из каталога /var/www/d1mon.loc
.
Соответственно frontend — это просто http://d1mon.loc
.
Backend — это http://d1mon.loc/backend
.
Сделаем символические ссылки на нужные каталоги и файлы:
ln -s /media/sf_Webdev/d1mon.loc/yii2/backend/web /var/www/d1mon.loc/backend
ln -s /media/sf_Webdev/d1mon.loc/yii2/frontend/web/assets /var/www/d1mon.loc/assets
ln -s /media/sf_Webdev/d1mon.loc/yii2/frontend/web/css /var/www/d1mon.loc/css
ln -s /media/sf_Webdev/d1mon.loc/yii2/frontend/web/favicon.ico /var/www/d1mon.loc/favicon.ico
ln -s /media/sf_Webdev/d1mon.loc/yii2/frontend/web/index.php /var/www/d1mon.loc/index.php
ln -s /media/sf_Webdev/d1mon.loc/yii2/frontend/web/robots.txt /var/www/d1mon.loc/robots.txt
На рабочем веб-сервере можно сделать проще. Всего две ссылки:
ln -s /путь_к_yii2/frontend/web /var/www/d1mon.loc
ln -s /путь_к_yii2/backend/web /var/www/d1mon.loc/backend
К сожалению это не работает, если имеем дело с общей папкой и VirtualBox. Общая папка — это для Linux внешний носитель, нельзя создавать там символические ссылки.
Настраиваем Nginx:
server {
listen 80; ## for ipv4
#listen [::]:80 default_server ipv6only=on; ## for ipv6
server_name d1mon.loc;
root /var/www/d1mon.loc;
index index.php;
access_log /var/log/www/d1mon.loc/access.log;
error_log /var/log/www/d1mon.loc/error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location /backend/ {
try_files $uri $uri/ /backend/index.php$is_args$args;
#auth_basic "closed site";
#auth_basic_user_file https_passw;
}
location ~* ^.+\.(js|css|ttf|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|tar|bz2|pdf|doc|docx|rtf|xls|ppt|mp3)$ {
#access_log off;
#log_not_found off;
#expires 3d; # кеширование статики 3 дня
try_files $uri =404;
}
#error_page 404 /404.html;
location ~ ^/assets/.*\.php$ {
deny all;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
location ~* /\. {
deny all;
}
}
Это немного модифицированная официально рекомендуемая конфигурация Nginx для Yii2.
В backend/config/main.php
добавим:
'components' => [
'request' => [
'baseUrl' => '/backend',
],
],
Всё, можно пользоваться.
Если вы будете пытаться настроить тоже самое для OpenServer, то вот статья о том, как создавать символические ссылки в Windows. Я так не делал, но, в теории, должно получится.