使用docker和nginx構建laravel多語言網站,無需修改Laravel代碼。 本文介紹如何在Docker環境下,利用Nginx實現對域名“aa.com”的多語言支持(例如:aa.com/en、aa.com/jp、aa.com/es),同時保持原有URL跳轉不變,并為每種語言獨立部署Laravel應用及后臺管理系統。
直接修改Nginx root 指令來實現多語言跳轉在Docker容器化環境下不可行,因為容器內文件路徑對宿主機不可見。 更有效的方案是利用Nginx的upstream模塊和proxy_pass指令,將不同語言版本指向不同的Docker容器實例。
假設每個語言版本的Laravel應用運行在不同的Docker容器中,并監聽不同的端口(例如:英文版8881端口,日文版8882端口,西班牙文版8883端口)。 以下Nginx配置文件示例:
upstream es_app { server 127.0.0.1:8881; # server2... 可添加更多服務器 } upstream jp_app { server 127.0.0.1:8882; # server3... 可添加更多服務器 } server { server_name es.domain.com; location / { client_max_body_size 256m; proxy_pass http://es_app; } } server { server_name jp.domain.com; location / { client_max_body_size 256m; proxy_pass http://jp_app; } } # 為其他語言版本添加類似的server塊,例如: # server { # server_name en.domain.com; # location / { # client_max_body_size 256m; # proxy_pass http://en_app; # } # }
此配置定義了es_app和jp_app兩個upstream,分別指向對應語言版本的Laravel應用容器IP地址和端口。 server塊將域名代理到對應的upstream。 也可以直接在server塊的location中使用proxy_pass直接指向容器的IP和端口(例如:proxy_pass http://127.0.0.1:8881;),無需定義upstream。 請確保將https改為http,除非你的應用使用了HTTPS。 需要為每個語言版本添加相應的server塊。
通過此方法,Nginx根據域名將請求路由到正確的Docker容器,實現多語言站點跳轉,無需修改Laravel代碼。