kimstacks
By:
kimstacks

Same domain Same droplet multi cakephp sites

January 11, 2015 1.2k views

Hi there,

I want to have

http://cake.dev/ ==> cake2 app
http://cake.dev/cake3-app ==> cake3 app

This is my nginx config.

This is my nginx config

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;
}

This is common.conf

index index.html;

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

This is cakephp.conf

include php.conf;

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

This is php.conf

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

index index.php;

the cake.dev is correctly pointing to my cake 2 app.

I cannot get cake.dev/cake3-app to point to the cake 3 app.

Inside my cake 3 app, I have a users/login action which works perfectly if I access the cake 3 from a separate domain.

But that is not what I want.

What have I done wrong in terms of the nginx config?

My error is consistently a 403 if I access cake.dev/cake3-app/ and I get a cake error message telling me there is no such controller when I access cake.dev/cake3-app.

Please advise.

2 Answers

There are 3 steps. First 2 are nginx-related. Last one is cakephp-related.

Step 1: Need to inform the config responsible for server_name http://cake.dev to redirect http://cake.dev/cake3 urls to the right config

Assuming cakedev.conf is the config responsible for 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;
        }
}

Notice how I write the proxy_pass? It goes to 127.0.0.1:83. This is crucial though I suspect you can change the port number.

Step 2: Write up the config responsible for cake3

Assuming the file is 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;
}

Notice how the servername and the listen matches with the proxypass from the earlier config? This is crucial.

Step 3: Change the App.base inside cake3

Go inside your cake 3 app and look for config/app.php

Change this value

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

to

'App' => [
    'namespace' => 'App',
    'encoding' => 'UTF-8',
    'base' => '/cake3-app/',
Have another answer? Share your knowledge.