我有一个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
(。