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