map
:map $http_accept $avif_image_path {
default "";
~image/avif "$uri.avif";
}
map $http_accept $webp_image_path {
default "";
~image/webp "$uri.webp";
}
server {
# ...
location ~* \.(png|jpe?g|gif)$ {
add_header Vary Accept;
try_files $avif_image_path $webp_image_path $uri =404;
}
# ...
}
cd ..; cd foo
можно сделать cd .
./tmp/q$ ls -l
total 0
-rw-rw-r-- 1 lynn lynn 0 nov 1 16:01 2
$ rm -r ../q
$ mkdir ../q
$ touch ../q/3
$ ls -l
total 0
$ cd .
$ ls -l
total 0
-rw-rw-r-- 1 lynn lynn 0 nov 1 16:04 3
# key
$ echo qEExPE+jkJxQUt8fSO+XwzXgRGh6kLHy+lWEe6Z8T6s= | xxd -l 32 -ps -c 256
7145457850452b6a6b4a785155743866534f2b58777a5867524768366b4c4879
# iv
$ echo jPNGTNLtGIBc7Jv2UXj7a3FNQk13eUJ5T3VIUXlOS0ZVOEpnMUpPMnhvQXg5bE5kMGFHejVxaTFnYTA9 | base64 -d | xxd -l 16 -ps
8cf3464cd2ed18805cec9bf65178fb6b
# encrypted text
$ echo jPNGTNLtGIBc7Jv2UXj7a3FNQk13eUJ5T3VIUXlOS0ZVOEpnMUpPMnhvQXg5bE5kMGFHejVxaTFnYTA9 | base64 -d | cut -b 17-
qMBMwyByOuHQyNKFU8Jg1JO2xoAx9lNd0aGz5qi1ga0=
# результат
$ echo qMBMwyByOuHQyNKFU8Jg1JO2xoAx9lNd0aGz5qi1ga0= | openssl AES-256-CBC -d -a -K 7145457850452b6a6b4a785155743866534f2b58777a5867524768366b4c4879 -iv 8CF3464CD2ED18805CEC9BF65178FB6B
/playlist.m3u8+1729705980
// Вспомогательные функции
const B = (str) => Uint8Array.from(str, c => c.charCodeAt(0));
const S = (buf) => String.fromCharCode(...new Uint8Array(buf));
// дано
const encryptedData = "jPNGTNLtGIBc7Jv2UXj7a3FNQk13eUJ5T3VIUXlOS0ZVOEpnMUpPMnhvQXg5bE5kMGFHejVxaTFnYTA9";
const key = "qEExPE+jkJxQUt8fSO+XwzXgRGh6kLHy+lWEe6Z8T6s=";
const iv = B(atob(encryptedData).slice(0, 16));
const cryptoKey = await crypto.subtle.importKey(
'raw',
// На самом деле используется только 32 байта из key
B(key.slice(0, 32)),
'AES-CBC',
true,
['encrypt', 'decrypt']
);
const encryptedText = B(atob(atob(encryptedData).slice(16)));
let decrypted = S(await crypto.subtle.decrypt({ name: 'AES-CBC', iv }, cryptoKey, encryptedText));
console.log(decrypted); // /playlist.m3u8+1729705980
background: url("../images/hogwarts.jpeg") center / cover no-repeat;
имя_пользователя.github.io
<meta name="viewport" content="width=device-width, initial-scale=1">
credentials: 'include'
Access-Control-Allow-Credentials
и Access-Control-Allow-Origin
:nth-child(3n + 1)
выберет нам первые элементы каждого ряда.:nth-last-child(-n + 2)
.:nth-child(3n + 1):nth-last-child(-n + 2)
.~
что бы выбрать все (в вашем случае не больше одного) элементы которые идут после уже выбранного.li:nth-child(3n + 1):nth-last-child(-n + 2),
li:nth-child(3n + 1):nth-last-child(-n + 2) ~ li {
.....
}
-n + 2
на -n + 3
.li:nth-child(3n):nth-last-child(-n + 3) ~ li {
.....
}
&
) заменить на HTML-сущность (&
).TEXT_ARTIFACT_URL="$CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/artifacts/$CI_COMMIT_BRANCH/download?job=$3&job_token=$ARTIFACT_TOKEN"
TEXT_ARTIFACT_URL_HREF="Ссылка на артефакт: "'<a href="'$TEXT_ARTIFACT_URL'">Download Artifact</a>'
echo $TEXT_ARTIFACT_URL_HREF
TEXT_ARTIFACT_URL_HREF="Ссылка на артефакт: <a href='$TEXT_ARTIFACT_URL'>Download Artifact</a>"
# вместо настоящих серверов указываем тут промежуточные,
# которые определены в этом же конфиге ниже
upstream valid {
server 127.0.10.1:80;
server 127.0.10.2:80;
}
# промежуточный сервер
server {
listen 127.0.10.1:80;
location / {
proxy_pass http://validator.amd.ru;
# тут nginx автоматически добавляет proxy_set_header Host validator.amd.ru;
# (берёт имя домена из proxy_pass)
}
}
# второй промежуточный сервер
server {
listen 127.0.10.2:80;
location / {
proxy_pass http://validator.bm.ru;
# тут nginx автоматически добавляет proxy_set_header Host validator.bm.ru;
}
}
# тут ничего не меняем
server {
...
location /api/valid {
proxy_pass http://valid/api/validators;
# теперь запросы проксируются в промежуточные сервера, которые проксируют
# в настоящие с правильным именем домена
}
}
$ echo -n 'hello habr' | openssl enc -a -aes-256-ecb -K 4446323738323245364331303639424446323738434435393532324536333130
GoMz9XzmRJ3m5QKwxuIceA==
$ echo 'GoMz9XzmRJ3m5QKwxuIceA==' | openssl enc -a -aes-256-ecb -K 4446323738323245364331303639424446323738434435393532324536333130 -d
hello habr
$ echo -n DF27822E6C1069BDF278CD59522E6310 | xxd -pu -c 32
4446323738323245364331303639424446323738434435393532324536333130