javascript - 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;
}
}
解决方案
当然。假设您的语言 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
)。
推荐阅读
- angular - 模块“@azure/msal-angular”没有导出成员“MSAL_CONFIG”
- flutter - 如何使用请求配置生成器设置测试设备 ID?
- android - 缺少 Android Studio 卸载.exe
- java - 未找到错误404。为什么 Spring Boot 应用程序无法识别我的 RestController?
- c# - 如何为 MassTransit 中的订阅和队列设置默认命名约定?
- javascript - Strapi, :collection-type/:id with locale
- angular - 数据不是来自 Angular 应用程序中的 Firestore
- python - 在子进程中注入python对象
- excel - Excel:使用索引和匹配时出现#NA 错误
- url - 如何在 # 之后访问查询字符串