首页 > 解决方案 > Nginx(反向代理)和 Angular(使用 SSR 和 i18n) - 根据 lang cookie 值使用正确的本地化应用程序

问题描述

我现在有一个 Angular 11 应用程序,它有两个语言环境,我在以下位置提供服务:

http://localhost:4000/en
http://localhost:4000/fr

我需要一个 nginx 配置,它将检查用户是否设置了一个 lang cookie,其值为两种语言之一(en 或 fr)。如果设置了 lang cookie,则应使用适当的本地化应用程序,否则应默认为 en。添加了用于修改的示例 nginx 配置。这是否可以使用 nginx 或应该在快速级别上完成。

server {

    listen 80;

    root /var/www;

    index index.html index.htm index.nginx-debian.html;

    server_name site.com www.site.com;

    location / {
        proxy_pass http://127.0.0.1:4000/en;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

}

标签: javascriptangularnginx

解决方案


当然。假设您的语言 cookie 名称是lang,您可以尝试以下配置:

map $cookie_lang $backend {
    fr      127.0.0.1:4000/fr;
    default 127.0.0.1:4000/en;
}
server {
    listen 80;
    server_name site.com www.site.com;
    location / {
        proxy_pass http://$backend$request_uri;
        ...
    }
}

我添加了$request_uri指令proxy_pass参数,因为根据 nginx文档

在某些情况下,无法确定要替换的请求 URI 部分:

...

  • 在 proxy_pass 中使用变量时:

    location /name/ {
        proxy_pass http://127.0.0.1$request_uri;
    }
    

并且我们的后端定义包括一个 URI 部分(/en/fr)。


推荐阅读