Как правильно настроить статику при использовании редиректа?

Как настроить передачу статических файлов при использовании редиректа?
Вот пример конфигурации: 
```
location / {
    proxy_pass http://localhost:4000;
    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;
}

location ~* \.(js|jpg|png|css|svg|woff|ttf|eot)$ {
    alias /home/app/my-cite.ru/public;
}
```
Примечание: В этом примере мы указываем алиас, а не корень, чтобы обрабатывать запросы с редиректа.
  • 30 сентября 2023 г. 14:27
Ответы на вопрос 2
В примере конфигурации, который вы предоставили, при использовании редиректа статические файлы передаются непосредственно с указанного пути `/home/app/my-cite.ru/public`.

Однако у вас есть несколько неправильных настроек.

Во-первых, вы не используете алиас, чтобы обработать запросы с редиректа. Вместо этого вы используете `alias`, которое полностью заменяет сопоставленный путь, а должны использовать `root`. В этом случае, правильная настройка выглядела бы так:
```
location / {
    proxy_pass http://localhost:4000;
    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;
}

location ~* \.(js|jpg|png|css|svg|woff|ttf|eot)$ {
    root /home/app/my-cite.ru/public;
}
```

Во-вторых, настройка `location ~* \.(js|jpg|png|css|svg|woff|ttf|eot)$` не будет применяться, если совпадение будет найдено в предыдущем блоке `location /`. Для того чтобы правило работало всегда, вы можете переместить блок `location ~* \.(js|jpg|png|css|svg|woff|ttf|eot)$` выше или просто удалить блок `location /`, если он вам не нужен.

Итак, вот верная настройка:
```
location ~* \.(js|jpg|png|css|svg|woff|ttf|eot)$ {
    root /home/app/my-cite.ru/public;
}

location / {
    proxy_pass http://localhost:4000;
    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;
}
```

С этими настройками статические файлы с указанного пути `/home/app/my-cite.ru/public` будут передаваться при использовании редиректа.
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    
    ssl_certificate /etc/letsencrypt/live/site.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/site.com/privkey.pem;

    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
    ssl_prefer_server_ciphers off;

    add_header Strict-Transport-Security "max-age=63072000" always;

    ssl_stapling on;
    ssl_stapling_verify on;

    location / {
      root /var/www/html/;
      autoindex off;
      if ( $request_uri ~ "/index.html" ) {
        rewrite ^(|/(.*))/index\.html$ /$2 permanent;
      }
    }
}
Похожие вопросы