如何使用 nginx 在同一域名下指向不同的应用程序

如何使用 nginx 在同一域名下指向不同的应用程序

我有 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 /

相关内容