我有 2 个 cakephp 应用程序:一个使用 cake 2,另一个使用 cake 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 应用程序。
在我的蛋糕 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
?
答案1
共有 3 个步骤。前两个步骤与 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 /