Назад | Перейти на главную страницу

Как использовать nginx для разных приложений при использовании одного домена

У меня есть 2 приложения cakephp: одно использует торт 2, а другое - торт 3.

Это мой конфиг nginx

server {
        listen 80;
        client_max_body_size 2M;
        server_name cake.dev;
        root /var/virtual/cake2app/webroot;
        location /cake3-app/ {
                alias /var/virtual/cake3app/webroot;
        }

        access_log /var/log/nginx/cakephpsite.com-access.log;
        include common.conf;
        include cakephp.conf;
}

Это common.conf

index index.html;

location ~ /\.ht {
        deny all;
}
sendfile off;

Это cakephp.conf

include php.conf;

location / {
        try_files $uri $uri/ /index.php?$uri&$args;
        expires max;
        access_log off;
}

Это php.conf

location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi_params;
}

index index.php;

то cake.dev правильно указывает на мое приложение для торта 2.

Я не могу заставить cake.dev/cake3-app указать на приложение Cake 3.

В моем приложении Cake 3 есть users/login действие, которое отлично работает, если я получаю доступ к торту 3 из отдельного домена.

Но я не этого хочу.

Что я сделал не так с конфигурацией nginx?

Моя ошибка постоянно 403, если я получаю доступ cake.dev/cake3-app/ и я получаю сообщение об ошибке торта, говорящее мне, что такого контроллера нет, когда я открываю cake.dev/cake3-app.

Пожалуйста, порекомендуйте.

РЕДАКТИРОВАТЬ:

Мне удается использовать этот трюк. Внутри моего cakedev.conf

я написал

server {
        listen 80;
        client_max_body_size 2M;
        server_name cake.dev;
        root /var/virtual/cake2/webroot;
        access_log /var/log/nginx/cakephpsite.com-access.log;
        include common.conf;
        include cakephp.conf;
        location /cake3-app/ {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header HOST $http_host;
                proxy_set_header X-NginX-Proxy true;

                proxy_pass http://127.0.0.1:83;
                proxy_redirect off;
                rewrite ^/cake3-app/(.*)$ /$1 break;
        }
}

Тогда у меня есть cake3.conf

server {
        listen 83;
        client_max_body_size 2M;
        server_name 127.0.0.1;
        root /var/virtual/cake3/webroot;
        include common.conf;
        include cakephp.conf;
}

Перенаправление URL-адреса работает для веб-страниц, но НЕ различные активы приложения cake3.

Cake3App автоматически указывает на http://cake.dev/css/base.css когда он должен указывать на http://cake.dev/cake3/css/base.css

Возможно, мне нужно написать что-нибудь другое для common.conf и cakephp.conf для cake3.conf?

Есть 3 ступени. Первые 2 связаны с nginx. Последний связан с cakephp.

Шаг 1. Необходимо сообщить конфигу, отвечающему за server_name http://cake.dev перенаправить http://cake.dev/cake3 URL-адреса правой конфигурации

Предполагая cakedev.conf отвечает ли конфиг за http://cake.dev

server {
        listen 80;
        client_max_body_size 2M;
        server_name cake.dev;
        root /var/virtual/cake2/webroot;
        access_log /var/log/nginx/cakephpsite.com-access.log;
        include common.conf;
        include cakephp.conf;
        location /cake3-app/ {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header HOST $http_host;
                proxy_set_header X-NginX-Proxy true;

                proxy_pass http://127.0.0.1:83;
                proxy_redirect off;
                rewrite ^/cake3-app/(.*)$ /$1 break;
        }
}

Обратите внимание, как я пишу proxy_pass? Это идет в 127.0.0.1:83. Это очень важно, хотя я подозреваю, что вы можете изменить номер порта.

Шаг 2: Напишите конфиг, отвечающий за cake3

Предполагая, что это файл cake3.conf

server {
        listen 83;
        client_max_body_size 2M;
        server_name 127.0.0.1;
        root /var/virtual/cake3/webroot;
        include common.conf;
        include cakephp.conf;
}

Обратите внимание, как server_name и listen совпадают с proxy_pass из более ранней конфигурации? Это очень важно.

Шаг 3. Измените App.base внутри торта3

Зайдите в свое приложение Cake 3 и найдите config / app.php

Измените это значение

'App' => [
    'namespace' => 'App',
    'encoding' => 'UTF-8',
    'base' => false,

к

'App' => [
    'namespace' => 'App',
    'encoding' => 'UTF-8',
    'base' => '/cake3-app', // please make sure you start with a / and NEVER end with a /