map $http_accept_language $accept_language {
"~*ru" ru;
"~*en" en;
default ru;
}
map $cookie_lang $selected_lang {
"~^(ru|en)$" $cookie_lang;
default $accept_language;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' '';
}
upstream iex_frontend_ssr {
server 127.0.0.1:4000;
keepalive 32;
}
upstream iex_backend_https {
server ip_адрес_сервера:443;
keepalive 32;
}
server {
server_name ваш_домен;
set $root_path /var/www/имя_пользователя/data/www/ваш_домен;
root $root_path;
disable_symlinks if_not_owner from=$root_path;
add_header Vary "Accept-Language, Cookie" always;
client_max_body_size 64m;
set $backend_domain app.ваш_домен;
set $backend_cookie_domain .ваш_домен;
set $backend_public_path /var/www/имя_пользователя/data/www/app.ваш_домен/public;
location = / {
return 302 /$selected_lang/$is_args$args;
}
location ~ ^/(ru|en)$ {
add_header Vary "Accept-Language, Cookie" always;
add_header Set-Cookie "lang=$1; Path=/; Max-Age=31536000; SameSite=Lax" always;
return 302 /$1/$is_args$args;
}
location ~ ^/(ru|en)/ {
add_header Vary "Accept-Language, Cookie" always;
add_header Set-Cookie "lang=$1; Path=/; Max-Age=31536000; SameSite=Lax" always;
proxy_pass http://iex_frontend_ssr;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_buffering on;
proxy_buffers 16 64k;
proxy_buffer_size 128k;
proxy_read_timeout 60s;
proxy_connect_timeout 10s;
proxy_send_timeout 10s;
}
location ~* ^/(assets/|theme/|.*\.(?:js|css|map|ico|txt|xml|json|csv|pdf|webmanifest|woff|woff2|ttf|otf))$ {
proxy_pass http://iex_frontend_ssr;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
expires 1y;
add_header Cache-Control "public, max-age=31536000, immutable" always;
access_log off;
}
location = /backend-api {
return 308 /backend-api/;
}
location ^~ /backend-api/ {
proxy_pass https://iex_backend_https/;
proxy_ssl_server_name on;
proxy_ssl_name $backend_domain;
proxy_http_version 1.1;
proxy_set_header Host $backend_domain;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_cookie_domain $backend_domain $backend_cookie_domain;
proxy_buffering off;
proxy_read_timeout 60s;
proxy_connect_timeout 10s;
proxy_send_timeout 10s;
}
location ^~ /images/ {
alias $backend_public_path/images/;
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable" always;
autoindex off;
access_log off;
}
location ^~ /storage/ {
alias $backend_public_path/storage/;
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable" always;
autoindex off;
access_log off;
}
location ^~ /static/ {
alias $backend_public_path/static/;
autoindex off;
access_log off;
}
location ^~ /dist/ {
alias $backend_public_path/dist/;
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable" always;
autoindex off;
access_log off;
}
location ^~ /exports/ {
alias $backend_public_path/static/exports/;
autoindex off;
access_log off;
}
location ^~ /app/ {
proxy_pass https://iex_backend_https;
proxy_ssl_server_name on;
proxy_ssl_name $backend_domain;
proxy_http_version 1.1;
proxy_set_header Host $backend_domain;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location ^~ /apps/ {
proxy_pass https://iex_backend_https;
proxy_ssl_server_name on;
proxy_ssl_name $backend_domain;
proxy_http_version 1.1;
proxy_set_header Host $backend_domain;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location / {
return 302 /$selected_lang$uri$is_args$args;
}
}