如何在使用同一個域的同時使用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 應用程序。
在我的 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 /