yii2 advanced, nginx и frontend -> / , backend -> /admin на одном домене

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
skvarovski
Сообщения: 92
Зарегистрирован: 2015.06.15, 18:36

yii2 advanced, nginx и frontend -> / , backend -> /admin на одном домене

Сообщение skvarovski »

Доброго времени суток!

появилась задача завести backend через имя_хоста/admin

нашел решение, которое есть тут https://github.com/mickgeek/yii2-advanc ... nginx.conf
сервер Debian 7 , php-fpm , nginx 1.2.1


при попытке использовать данную конфигурацию к URL наращивается путь /frontend/web/ , что не очень подходит мне. Пробуя отредактировать конфигурацию потерпел фиаско - корректно работает только одно из двух. Прошу помощи у сообщества, возможно кто-то поделится реализованной конфигурацией, где при включенном URLManager '/' => 'site/index' выглядит правильнее, а не site.ru/frontend/web/ и при адресе site.ru/admin отрабатывает /backend/web/



ps. до этого все работало хорошо и тут потребовалась "админка", но стоило сменить в конфиге server->root как в ссылке выше (и даже скопировав конфиг и поправив пути) все сразу поломалось.
pps. Yii2->backend/config/main.php : BaseURL => '/admin' прописан.
Последний раз редактировалось skvarovski 2016.04.01, 15:29, всего редактировалось 1 раз.
LAN_ART
Сообщения: 22
Зарегистрирован: 2016.03.23, 11:42
Откуда: Харьков, Украина

Re: yii2 advanced, nginx и /admin

Сообщение LAN_ART »

Я на своем тестовом OpenServer кстати с Nginx 1.9 воспользовался этим https://github.com/samdark/yii2-cookboo ... ty-urls.md советом, в кониг сервера не лез вообще, сделал только то что надо было сделать на фрейме, все завелось и работает норм.
skvarovski
Сообщения: 92
Зарегистрирован: 2015.06.15, 18:36

Re: yii2 advanced, nginx и /admin

Сообщение skvarovski »

LAN_ART писал(а):Я на своем тестовом OpenServer кстати с Nginx 1.9 воспользовался этим https://github.com/samdark/yii2-cookboo ... ty-urls.md советом, в кониг сервера не лез вообще, сделал только то что надо было сделать на фрейме, все завелось и работает норм.
в том то и дело, мне это тоже далось легко, а когда на один хост пытаешься завести backend и frontend то лезть в конфиг сервера нужно :)
skvarovski
Сообщения: 92
Зарегистрирован: 2015.06.15, 18:36

Re: yii2 advanced, nginx и /admin

Сообщение skvarovski »

в документации сказано о симлинках, но они у меня не завелись почему-то.
Therkr
Сообщения: 2
Зарегистрирован: 2016.03.28, 01:14
Откуда: Russia
Контактная информация:

yii2 advanced nginx и /admin

Сообщение Therkr »

Доброго дня

Ребят такой вопрос, есть сервер биллинга 10.0.0.1, и есть сервер nginx 10.0.0.2, вопрос в следующем, как сделать так, чтобы пользователи могли сделать 1 соединения с 1 IP к биллингу через nginx ?
skvarovski
Сообщения: 92
Зарегистрирован: 2015.06.15, 18:36

Re: yii2 advanced, nginx и /admin

Сообщение skvarovski »

ответ на вопрос выше : используйте ngixn в режиме прокси
skvarovski
Сообщения: 92
Зарегистрирован: 2015.06.15, 18:36

Re: yii2 advanced, nginx и /admin

Сообщение skvarovski »

ну что же, накодил своё решение...
в первую очередь курил мануалы по yii2 где было 2-а варианта (с симлинками и hard-way) , первый не заработал вообще. второй вариант либо 404 либо одна часть..
попробовал по ссылке в самой начале топика - завелась, но хотелось бы скрыть лишние пути, в итоге все упиралось незнание конфигурации nginx....
последний вариант который у меня завелся более менее - это создание папки admin в ...frontend/web/ и перекидыванием туда содержимого /backend/web/* с переписыванием относительных путей. в принципе это решение завелось, конфиг ngixn'a прикладываю..

Код: Выделить всё

server {
    listen       80;
    server_name  www.mysitec.ru;
    return       301 http://mysite.ru$request_uri;
}

server {
    set $project_root /var/www/vhost/mysite2.loc;
    set $fcgi_server 127.0.0.1:9000;

    charset utf-8;
    client_max_body_size 128M;

    listen 80;
    server_name mysite.ru;

    root $project_root/frontend/web;    
    index index.php;

    access_log  /var/log/nginx/mysite2.loc.access.log combined;
    error_log  /var/log/nginx/mysite2.loc.error.log warn;

location / {
        try_files $uri $uri/ /index.php?$args;
    }

    
location /admin {
        try_files $uri $uri/ /admin/index.php?$args;

    }

    location ~* \.php$ {
        try_files $uri =404;
        fastcgi_pass $fcgi_server;
        include fastcgi_params;

    }

    location ~* \.(htaccess|htpasswd|svn|git) {
        deny all;
    }
}

На этом все работает, но мне все равно интересно найти вариант, как заставить работать два location на одном домене. без вываливания дополнительных путей типа frondend/web. Понимаю, что это постоянно возникает, но парни, почему мануал у меня не завёлся как следует? что утаили там в location у nginx? http://www.yiiframework.com/wiki/799/yi ... che-nginx/
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: yii2 advanced, nginx и frontend -> / , backend -> /admin на одном домене

Сообщение dmg »

скопипастил из инструкции с небольшим дополненениями.

Код: Выделить всё

server {
    set $project_root /var/www/kkk;
    set $fcgi_server 127.0.0.1:9000;
   listen *:80;
    server_name kkk;

    access_log  /var/www/log/kkk.access.log  main;
    error_log  /var/www/log/kkk.error.log  error;

    root $project_root/frontend/web;
    set $yii_bootstrap "index.php";

    charset utf-8;

    location ^~ /backend {
        rewrite ^/backend(.*)$ /backend/web$1 last;
    }
 
    location ^~ /backend/web {
        root $project_root;
 
        index index.php; # !!!

        # uncomment the following, if you want to enable speaking URL in the backend
        #try_files $uri $uri/ /index.php$is_args$args;
 
        location ~ /\.(ht|svn|git) {
            deny all;
        }
 
        location ~ \.php$ {
        fastcgi_split_path_info  ^(.+\.php)(.*)$;

        #позволяем yii перехватывать запросы к несуществующим PHP-файлам
        set $fsn /$yii_bootstrap;
        if (-f $document_root$fastcgi_script_name){
            set $fsn $fastcgi_script_name;
        }

        fastcgi_pass   127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fsn; # !!! 

        #PATH_INFO и PATH_TRANSLATED могут быть опущены, но стандарт RFC 3875 определяет для CGI
        #fastcgi_param  PATH_INFO        $fastcgi_path_info;
        #fastcgi_param  PATH_TRANSLATED  $document_root$fsn;
        }
    }

    location / {
        index $yii_bootstrap;
        try_files $uri $uri/ /$yii_bootstrap?$args;
    }

    #отключаем обработку запросов фреймворком к несуществующим статичным файлам
    location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
        try_files $uri =404;
    }

    location ~ \.php {
        fastcgi_split_path_info  ^(.+\.php)(.*)$;

        #позволяем yii перехватывать запросы к несуществующим PHP-файлам
        set $fsn /$yii_bootstrap;
        if (-f $document_root$fastcgi_script_name){
            set $fsn $fastcgi_script_name;
        }
        fastcgi_pass   127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fsn;

        #PATH_INFO и PATH_TRANSLATED могут быть опущены, но стандарт RFC 3875 определяет для CGI
        fastcgi_param  PATH_INFO        $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED  $document_root$fsn;
    }

    location ~ /\.ht {
        deny  all;
    }
 
}
и не забыть поправить конфиг

Код: Выделить всё

    'components' => [
        'request'=>[
                'baseUrl'=>'/backend',
        ],
        'urlManager'=>[
            'scriptUrl'=>'/backend/index.php',
        ],
 
skvarovski
Сообщения: 92
Зарегистрирован: 2015.06.15, 18:36

Re: yii2 advanced, nginx и frontend -> / , backend -> /admin на одном домене

Сообщение skvarovski »

скажите ,а при этом конфиге дефолтный URI site/index как выглядит? как site.ru/site/index или как site.ru/frontend/web/site/index ?
RusNimex
Сообщения: 5
Зарегистрирован: 2016.05.05, 15:38

Re: yii2 advanced, nginx и frontend -> / , backend -> /admin на одном домене

Сообщение RusNimex »

skvarovski писал(а): нашел решение, которое есть тут https://github.com/mickgeek/yii2-advanc ... nginx.conf
сервер Debian 7 , php-fpm , nginx 1.2.1


при попытке использовать данную конфигурацию к URL наращивается путь /frontend/web/ , что не очень подходит мне.
То, что Вы привели в ссылке, работает! Ничего не прибавляется, все работает как надо. Урл в адресной строке нормальный http://site.dev:8080/category или http://site.dev:8080/melody или http://site.dev:8080/admin или http://site.dev:8080/admin/dashboard все эти ссылки нормальны.

Хотел бы напомнить, что нужно внести некоторые изменения в конфиги проекта как описано в документации http://www.yiiframework.com/wiki/799/yi ... che-nginx/
thecoder
Сообщения: 87
Зарегистрирован: 2014.10.19, 18:55

Re: yii2 advanced, nginx и frontend -> / , backend -> /admin на одном домене

Сообщение thecoder »

Я сделал так, нашел где-то в инете :)
Все открывается на одном домене.

.htaccess

Код: Выделить всё

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
 
# if request begins with /admin remove admin and ad /backend/web/
RewriteCond %{REQUEST_URI} ^/admin
RewriteRule ^admin\/?(.*) /backend/web/$1
 
# other requests add /frontend/web/$1
RewriteCond %{REQUEST_URI} !^/(frontend/web|backend/web|admin)
RewriteRule (.*) /frontend/web/$1
 
# if frontend request
RewriteCond %{REQUEST_URI} ^/frontend/web
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /frontend/web/index.php
 
# if backend request
RewriteCond %{REQUEST_URI} ^/backend/web
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /backend/web/index.php
в конфиге frontend

Код: Выделить всё

'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '' => 'site/index',
                '<action>'=>'site/<action>',
            ]
        ],
        'assetManager' => [
            'basePath' => '@webroot/assets',
            'baseUrl' => '@web/assets'
        ],
        'request' => [
            'baseUrl' => ''
        ]
в конфиге backend

Код: Выделить всё

'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '' => 'site/index',
                '<action>'=>'site/<action>',
            ],
        ],
        'assetManager' => [
            'basePath' => '@webroot/assets',
            'baseUrl' => '@web/assets'
        ],
        'request' => [
            'baseUrl' => '/admin'
        ]
RusNimex
Сообщения: 5
Зарегистрирован: 2016.05.05, 15:38

Re: yii2 advanced, nginx и frontend -> / , backend -> /admin на одном домене

Сообщение RusNimex »

thecoder писал(а):Я сделал так, нашел где-то в инете :)
Все открывается на одном домене.

.htaccess
...
Это хорошо, но смотрите на название топика, здесь речь идет о настройках nginx, а не apache.
skvarovski писал(а):нашел решение, которое есть тут https://github.com/mickgeek/yii2-advanc ... nginx.conf
сервер Debian 7 , php-fpm , nginx 1.2.1


при попытке использовать данную конфигурацию к URL наращивается путь /frontend/web/ , что не очень подходит мне.
Все-таки в этом решении есть небольшая проблема: файлы .php отдаются как есть, т.е. запрос вида http://somesite.dev/index.php отдаст файл index.php на скачивание. Так что проверьте у себя, прежде, чем попробовать эту конфигуру.
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: yii2 advanced, nginx и frontend -> / , backend -> /admin на одном домене

Сообщение mickgeek »

RusNimex, зависит от версии установленного nginx. Начиная с 1.8.1 данный конфиг не работает должным образом, так как:
Bugfix: the "try_files" directive inside a nested location given by a regular expression worked incorrectly if the "alias" directive was used in the outer location.
Как будет свободное время (с этим сейчас сложно), попробую исправить проблему.
RusNimex
Сообщения: 5
Зарегистрирован: 2016.05.05, 15:38

Re: yii2 advanced, nginx и frontend -> / , backend -> /admin на одном домене

Сообщение RusNimex »

Вот что у нас получилось:

Код: Выделить всё

server {
        listen   80;
        server_name site.dev www.site.dev;

        access_log /var/www/site.dev/log/nginx/access.log bizon;
        error_log /var/www/site.dev/log/nginx/error.log;

        client_max_body_size  10m;
        index index.php index.html index.htm;

        location /uploads/ {
                root /var/www/site.dev/data/app;
                expires max;
        }

        location /bf/ {
                alias /var/www/site.dev/data/app/backend/web/;
                # added "/bf/": https://trac.nginx.org/nginx/ticket/97
                try_files $uri /bf//bf/index.php$is_args$args;

                location ~* ^.+\.(css|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|html|swf)$ {
                        expires max;
                        access_log   off;
                }

                location ~ \.php$ {
                        # added "/bf/": https://trac.nginx.org/nginx/ticket/97
                        try_files $uri /bf//bf/index.php$is_args$args;

                        fastcgi_pass unix:/var/run/php-fpm/site.dev.sock;
                        fastcgi_index index.php;
                        fastcgi_split_path_info ^/bf(/.+\.php)(.*)$;
                        include fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                }
        }

        location / {
                root /var/www/site.dev/data/app/frontend/web;
                try_files $uri /index.php$is_args$args;

                location ~* ^.+\.(css|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|html|swf)$ {
                        expires max;
                        access_log   off;
                }

                location ~ \.php$ {
                        try_files $uri /index.php$is_args$args;

                        fastcgi_pass unix:/var/run/php-fpm/site.dev.sock;
                        fastcgi_index index.php;
                        include fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                }
        }
}
Теперь наш backend откликается на хттп://site.dev/bf/
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: yii2 advanced, nginx и frontend -> / , backend -> /admin на одном домене

Сообщение Йож »

В конфиге nginx:

Код: Выделить всё

location /  {
                            try_files  $uri /frontend/web/index.php?$args;
                                }

location /admin  {
                            try_files  $uri /backend/web/index.php?$args;
                                }
Если еще апач в бекенде, то еще в .htaccess в корне сайта:

Код: Выделить всё

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/(backend/web|admin)
RewriteRule !^frontend/web /frontend/web%{REQUEST_URI} [L]
RewriteCond %{REQUEST_URI} ^/admin$
RewriteRule ^admin /backend/web/index.php [L]
RewriteCond %{REQUEST_URI} ^/admin
RewriteRule ^admin(.*) /backend/web$1 [L]
Мудрить там особо и нечего...
Ответить