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



我有一个Angular 11应用程序,目前有两个区域设置,我为它们提供服务:

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

我需要一个nginx配置,它将检查用户是否已将值为两种语言(en或fr(之一的langcookie设置为。如果设置了langcookie,则应使用适当的本地化应用程序,否则应默认为en。添加了示例nginx-config进行修改。这在nginx中是可能的,还是应该在express级别上完成。

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;
}
}

当然。假设您的语言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;
...
}
}

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

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

  • 在proxy_pass:中使用变量时

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

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

最新更新