Nginx If - arosh/arosh.github.com GitHub Wiki
Nginx ใฎ่จญๅฎใใกใคใซใฏๆ็ถใๅ่จ่ชใฎใใใซไธใใไธใซ่งฃ้ใใใใใใงใฏใชใใใปใจใใฉใฎ่จญๅฎ้ ็ฎใซใคใใฆใฏๆ่ญใใชใใฆใๅ้กใชใใฎใ ใใif ใฏ้็ดๆ็ใชๆๅใใใใกใงใใใ ไปฅไธใฎใใใซๅ ฌๅผใซใIf ใฏ้ชๆชใใจใใ่จใใใฆใใใ
https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
ใใใฏ่จใฃใฆใ if ใไฝฟใฃใ่ค้ใชๅถๅพกใฏใใฐใใฐๅฟ ่ฆใจใชใฃใฆใใพใใใจใใใใใใใงใฏ้็ดๆ็ใชๆๅใ่งฃ้ๅฏ่ฝใซใใใใใฎๆๅฐ้ใฎ็ฅ่ญใจใใชใในใๅฎๅ จใช if ใฎๅใๆฑใๆนๆณใซใคใใฆ่ฟฐในใใ
ๆๅใ่งฃ้ใใใใใฎ็ฅ่ญ
ngx_http_rewrite_module ใซๅซใพใใใใฎใจ if ใฎ็ตใฟๅใใใฏใ ใใใๆๅพ ้ใใซๅใ
if ใฏ ngx_http_rewrite_module ใซๅซใพใใๆฉ่ฝใงใใใif ไปฅๅคใซๅซใพใใๆฉ่ฝใงใใ set, return, rewrite ใชใฉใ if ใฎไธญใซๆธใใๅ ดๅใฏใ ใใใๆๅพ ้ใใซๅใใ
ใใจใใฐไปฅไธใฎไพใ่ใใใใ
location /proxy {
set $a 32;
if ($a = 32) {
set $a 56;
}
set $a 76;
proxy_pass http://127.0.0.1:$server_port/$a;
}
How nginx "location if" works ใใ
Nginx ใฎ่จญๅฎใไธใใ้ ใซ่งฃ้ใใใใใใงใฏใชใใจ็ฅใฃใฆใใใจ่บซๆงใใฆใใพใใใif ใจ็ตใฟๅใใใฆไฝฟใใใฆใใ set ใฏ ngx_http_rewrite_module ใฎไปฒ้ใงใใใใพใใงไธใใ้ ใซ่งฃ้ใใใฆใใใใฎใใใซ http://127.0.0.1:$server_port/76
ใซ proxy ใใใใ
ใใใใชใใ If Is Evil ใงใฏ if ใฎไธญใซๅคใชใใฎใๆธใใฆใใชใใฆใ proxy_pass ใ try_files ใๅใใชใใชใไพใ็ดนไปใใใฆใใใๆฒนๆญใฏใงใใชใใ
if ใ่งฃ้ใใใใฟใคใใณใฐใฏ็ตๆงๆฉใ
Nginx ใฎ่จญๅฎใฏไธใใ้ ใซ่งฃ้ใใใใใใงใฏใชใใใขใธใฅใผใซใใจใซๆฑบใใใใๅชๅ ้ ไฝใฎ้ ็ชใง่งฃ้ใใใใใใใฆ ngx_http_rewrite_module ใฎๅชๅ ้ ไฝใฏ็ตๆงๆฉใใ
ใใจใใฐไปฅไธใฎไพใ่ใใใใ
location /proxy {
set $a 32;
if ($a = 32) {
set $a 56;
echo "a = $a";
}
set $a 76;
proxy_pass http://127.0.0.1:$server_port/$a;
}
How nginx "location if" works ใใ
echo ใงๅบๅใใใๅคใฏ 56 ใงใฏใชใ 76 ใงใใใใใใฏ echo_nginx_module ใใใ ngx_http_rewrite_module ใฎใปใใๅชๅ
้ ไฝใ้ซใใใใงใใใใพใ set $a 32
, set $a 56
ใๅฎ่กใใใใใจใecho "a = $a"
ใฏๅพๅใใซใใใฆ set $a 76
ใๅฎ่กใใใใecho "a = $a"
ใๅฎ่กใใใใฎใฏใใฎใใจใงใใใใใ็ตๆ็ใซ $a
ใซใฏ 76 ใๅ
ฅใฃใฆใใใ
้ๅปใซใใใใใๅฎไพใจใใฆใฏไปฅไธใฎใใฎใใใใ
location ... {
auth_basic $host;
auth_basic_user_file $document_root/.htpasswd;
if (...) {
return 301 ...;
}
}
if ๆใฎๆกไปถใๆบใใใใฆใใๅ ดๅใ่ใใใใไธใใ้ ใซ่งฃ้ใใใใจ่ใใๅ ดๅใใพใ Basic ่ช่จผใ่กใใใฆใใใใใ if ๆใฎไธญใฎใชใใคใฌใฏใใ่งฃๆฑบใใใใจๆใใใใใใชใใใใใใชใใๅฎ้ใซใฏ Basic ่ช่จผใชใใงใชใใคใฌใฏใใ่งฃๆฑบใใใใใใใฏ ngx_http_auth_basic_module ใใใ ngx_http_rewrite_module ใฎใปใใๅชๅ ้ ไฝใ้ซใใใใงใใใ
if ใฏใใฃใฌใฏใใฃใใฎใใใชใใฎใไฝใ
Nginx ใฎ่จญๅฎใซใฏใใใญใฅใกใณใใซ "if and only if there are no" ใจใใ่จ่ผใฎใใ่จญๅฎ้ ็ฎใๅคๆฐๅญๅจใใใ
Nginx ใฉใใใใฉใใ N ้ธ
ใใใฏไธไฝใฎใใฃใฌใฏใใฃใใงใฎ่จญๅฎใซๅ ใใฆไธไฝใฎใใฃใฌใฏใใฃใใง่จญๅฎใ่ฟฝๅ ใใใใจใใใจไธไฝใฎใใฃใฌใฏใใฃใใงใฎ่จญๅฎใ็กใใฃใใใจใซใใใใจใใใใฎใงใใใไธ่จใฎไพใงใฏไธไฝใใฃใฌใฏใใฃใ (http) ใง่จญๅฎใใ proxy_set_header ใ็กใใฃใใใจใซใใใฆใใพใฃใฆใใใ
if ใฏใใฃใฌใฏใใฃใใฎใใใชใใฎใไฝใใจใใใใจใ็ฅใฃใฆใใใฐไปฅไธใฎไพใง add_header ใไธกๆนใจใๅฎ่กใใใชใใใจใซใคใใฆ็ดๅพใงใใใใใซใชใใ ใใใ
location /only-one-if {
set $true 1;
if ($true) {
add_header X-First 1;
}
if ($true) {
add_header X-Second 2;
}
return 204;
}
If Is Evil ใใ