Nginx

如何在使用同一個域的同時使用nginx指向不同的應用程序

  • January 14, 2015

我有 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 應用程序。

在我的 cake 3 應用程序中,users/login如果我從單獨的域訪問 cake 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

也許我需要為 the 和 the 寫一些不同的common.conf東西?cakephp.conf``cake3.conf

有3個步驟。前 2 個與 nginx 相關。最後一個是 cakephp 相關的。

第1步:需要通知負責server_name http://cake.dev的config將http://cake.dev/cake3 urls重定向到正確的config

假設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 /

引用自:https://serverfault.com/questions/658694