docker 中的 laravel 应用怎么通过nginx 做多语言站点的跳转

先介绍下需求和背景...
为“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;
    }
}
阅读 1.7k
1 个回答

你也提到每多一个语言,就多部署一套docker跑程序,每个docker暴露给宿主机的端口必然是不同的。

那么nginx里就不能全柔在一块,因为他们的root不同。

因此,这里不应该用root了,因为docker容器里的目录,宿主机可找不到。

upstream es.domain.com {
    server 127.0.0.1:8881;
    // server2...
}

upstream jp.domain.com {
    server 127.0.0.1:8882;
    //server3
}

server {
    server_name es.domain.com;

    location / {
        client_max_body_size 256m;
        proxy_pass https://es.domain.com;
    }
}

server {
    server_name jp.domain.com;

    location / {
        client_max_body_size 256m;
        proxy_pass https://jp.domain.com;
    }
}

当然也可以不用upstream,直接service里的proxy_pass指向到http://127.0.0.1:端口这样也是可以的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题