Как использовать 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;
}

Это часто встречается.

index index.html;

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

Это торт php.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/cake 3-app указать на приложение "торт 3".

Внутри моего торта 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 работает для веб-страниц, но НЕ для различных ресурсов приложения cake 3.

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

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

1 ответ

Решение

Есть 3 шага. Первые 2 связаны с nginx. Последний связан с CakePHP.

Шаг 1: Нужно сообщить конфигу, отвечающему за имя_сервера 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;
}

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

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

Зайдите в ваше приложение для торта 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 /
Другие вопросы по тегам