先介绍下需求和背景...
为“aa.com”增加多语言支持,如aa.com/en、aa.com/jp、aa.com/es,原本的url跳转不变
站点是一个用docker部署的laravel 5应用
不考虑修改代码达到效果...因为是别人的代码不想修改,另外每个语言的后台管理能独立开
所以寄希望于通过Nginx实现多语言效果
每增加一个语言,就多布署一套相同的应用
下面是我通过网上查询了一些资料写的配置文件,有许多错误也达不到效果,实在是水平不行,各位看官勿喷,求大神能帮忙指点下怎么改
server {
gzip on;
listen 443 ssl;
server_name www.aaa.com aaa.com;
root /var/www/html/public;
location /es {
root /var/www/html.es/public;
try_files $uri $uri/ /index.php$is_args$query_string;
}
location / {
try_files $uri $uri/ /index.php$is_args$query_string;
}
location ~ ^/es/(.*\.php)$ {
root /var/www/html.es/public;
rewrite ^/es/(.*)$ /$1 break;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass es-app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
你也提到每多一个语言,就多部署一套docker跑程序,每个docker暴露给宿主机的端口必然是不同的。
那么nginx里就不能全柔在一块,因为他们的
root
不同。因此,这里不应该用
root
了,因为docker容器里的目录,宿主机可找不到。当然也可以不用
upstream
,直接service
里的proxy_pass
指向到http://127.0.0.1:端口
这样也是可以的。