У меня есть 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 /