เด เดฒเตเดเดจเดคเตเดคเดฟเตฝ, Nginx Inc เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเด Nginx-เดจเตเดณเตเดณ JavaScript เดตเตเดฏเดพเดเตเดฏเดพเดคเดพเดตเดพเดฏ NJS-เดฎเดพเดฏเดฟ เดเดจเตเดฑเต เด
เดจเตเดญเดตเด เดชเดเตเดเดฟเดเดพเตป เดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเต, เดเดฐเต เดฏเดฅเดพเตผเดคเตเดฅ เดเดฆเดพเดนเดฐเดฃเด เดเดชเดฏเตเดเดฟเดเตเดเต เด
เดคเดฟเดจเตเดฑเต เดชเตเดฐเดงเดพเดจ เดเดดเดฟเดตเตเดเตพ เดตเดฟเดตเดฐเดฟเดเตเดเตเดจเตเดจเต. Nginx-เดจเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดตเดฟเดชเตเดฒเตเดเดฐเดฟเดเตเดเดพเตป เดจเดฟเดเตเดเดณเต เด
เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจ JavaScript-เดจเตเดฑเต เดเดฐเต เดเดชเดตเดฟเดญเดพเดเดฎเดพเดฃเต NJS. เดเดจเตเดจ เดเตเดฆเตเดฏเดคเตเดคเดฟเดจเต
เดตเดณเดฐเตเดเตเดเดพเดฒเด เดฎเตเดฎเตเดชเตโฆ
เดเดจเตเดฑเต เด
เดตเดธเดพเดจ เดเตเดฒเดฟเดฏเดฟเตฝ, เดกเตเดเตเดเตผ-เดเดฎเตเดชเตเดธเต, เดกเดฟเตปเดกเต, เดฎเดฑเตเดฑเต เดกเดฟเดฒเตเดฑเตเดฑเตเดเตพ เดเดจเตเดจเดฟเดตเดฏเตเดณเตเดณ เดจเดฟเดฐเดตเดงเดฟ เดฎเตเดเตเดเตเดฒเดฟ เดธเดฟเด/เดธเดฟเดกเดฟ เดชเตเดชเตเดชเตเดฒเตเดจเตเดเดณเตเดณเตเดณ เดเดฟเดฑเตเดฑเตเดฒเดพเดฌเต เดเดจเดฟเดเตเดเต เดชเดพเดฐเดฎเตเดชเดฐเตเดฏเดฎเดพเดฏเดฟ เดฒเดญเดฟเดเตเดเต, เด
เดต เดเดจเดฟเดเตเดเต เดฑเตเดฏเดฟเดฒเตเดเดณเดฟเดฒเตเดเตเดเต เดฎเดพเดฑเตเดฑเดฟ. CI-เดฏเดฟเตฝ เดฎเตเดฎเตเดชเต เดเดชเดฏเตเดเดฟเดเตเดเดฟเดฐเตเดจเตเดจ เดเดฟเดคเตเดฐเดเตเดเตพ เด
เดตเดฏเตเดเต เดฏเดฅเดพเตผเดคเตเดฅ เดฐเตเดชเดคเตเดคเดฟเตฝ เดจเตเดเตเดเดฟ. เดจเดฎเตเดฎเตเดเต เดเดฟเดฑเตเดฑเตโเดฒเดพเดฌเต เดเดชเดฟ เดฎเดพเดฑเดฟ เดธเดฟเด เดฎเดคเตเดคเดเตเดเดฏเดพเดฏเดฟ เดฎเดพเดฑเตเดจเตเดจเดคเต เดตเดฐเต เด
เดตเตผ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเต. เดธเดฟเดเดฏเดฟเตฝ เดชเดเตเดเตเดเตเดคเตเดค เดกเตเดเตเดเตผ เดเดฟเดคเตเดฐเดเตเดเดณเดฟเดฒเตเดจเตเดจเดฟเตฝ เดเดฟเดฑเตเดฑเต เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเต, เด
เดคเต เดชเตเดคเตเดคเตบ เดฎเตเดกเตเดฏเตเดณเตเดเตพ ssh เดตเดดเดฟ เดตเดฒเดฟเดเตเดเต เดเดจเตเดจเดคเดพเดฃเต เดชเตเดฐเดถเตเดจเด. ssh-เดจเต เดจเดฟเดเตเดเตพเดเตเดเต เดเดฐเต เดธเตเดตเดเดพเดฐเตเดฏ เดเต เดเดตเดถเตเดฏเดฎเดพเดฃเต, เดเตเดเดพเดคเต... เด
เดคเต known_hosts-เดจเตเดเตเดชเตเดชเด เดเดฟเดคเตเดฐเดคเตเดคเดฟเตฝ เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเต. เดฏเดฅเดพเตผเดคเตเดฅ IP-เดฏเตเด known_hosts-เตฝ เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเดฟเดฏเดฟเดเตเดเตเดณเตเดณเดคเตเด เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดชเตเดฐเตเดคเตเดคเดเตเดเตเดเต เดเดพเดฐเดฃเด เดเดฐเต เดเต เดธเตเดฅเดฟเดฐเตเดเดฐเดฃ เดชเดฟเดถเดเต เดเดพเดฐเดฃเด เดเดคเตเดเตเดเดฟเดฒเตเด CI เดชเดฐเดพเดเดฏเดชเตเดชเตเดเตเดเต. เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดกเตเดเตเดเตเดซเดฏเดฒเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเต เดชเตเดคเดฟเดฏ เดเดฟเดคเตเดฐเด เดชเตเดเตเดเตเดจเตเดจเต เดเตเดเตเดเดฟเดเตเดเตเตผเดเตเดเตเดเดฏเตเด เดเดชเตเดทเตป เดเตเตผเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดคเต StrictHostKeyChecking no
. เดเดจเตเดจเดพเตฝ เดฎเตเดถเด เดฐเตเดเดฟ เดคเตเดเตผเดจเตเดจเต, เดฒเดฟเดฌเตเดเตพ เดเดฐเต เดธเตเดตเดเดพเดฐเตเดฏ PyPI เดถเตเดเดฐเดคเตเดคเดฟเดฒเตเดเตเดเต เดฎเดพเดฑเตเดฑเดพเดจเตเดณเตเดณ เดเดเตเดฐเดนเด เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเต. เดธเตเดตเดเดพเดฐเตเดฏ PyPI-เดฏเดฟเดฒเตเดเตเดเต เดฎเดพเดฑเดฟเดฏเดคเดฟเดจเต เดถเตเดทเดฎเตเดณเตเดณ เดเดฐเต เด
เดงเดฟเด เดฌเตเดฃเดธเต, เดเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดชเตเดชเตเดชเต เดฒเตเดจเตเด เดเดตเดถเตเดฏเดเดคเดเดณเตเดเต เดเดฐเต เดธเดพเดงเดพเดฐเดฃ เดตเดฟเดตเดฐเดฃเดตเตเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต.
เดคเดฟเดฐเดเตเดเตเดเตเดคเตเดคเต, เดฎเดพเดจเตเดฏเดฐเต!
เดเดเตเดเตพ เดเดฒเตเดฒเดพเด เดเตเดฒเตเดกเตเดเดณเดฟเดฒเตเด เดเตเดฌเตเตผเดจเตเดฑเตเดฑเตเดเดณเดฟเดฒเตเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต, เด เดตเดธเดพเดจเด เดเดฐเต เดเตเดฑเดฟเดฏ เดธเตเดตเดจเด เดฒเดญเดฟเดเตเดเดพเตป เดเดเตเดเตพ เดเดเตเดฐเดนเดฟเดเตเดเต, เด เดคเต เดฌเดพเดนเตเดฏ เดธเดเดญเดฐเดฃเดฎเตเดณเตเดณ เดเดฐเต เดธเตโเดฑเตเดฑเตเดฑเตเดฑเตโเดฒเตเดธเต เดเดฃเตเดเตเดฏเตโเดจเตผ เดเดฏเดฟเดฐเตเดจเตเดจเต. เดถเดฐเดฟ, เดเดเตเดเตพ S3 เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเดพเตฝ, เด เดคเดฟเดจเต เดฎเตเตปเดเดฃเดจ เดจเตฝเดเดฟ. เดเตเดเดพเดคเต, เดธเดพเดงเตเดฏเดฎเตเดเตเดเดฟเตฝ, gitlab-เตฝ เดเดงเดฟเดเดพเดฐเดฟเดเดคเดฏเตเดเต (เดเดตเดถเตเดฏเดฎเตเดเตเดเดฟเตฝ เดจเดฟเดเตเดเตพเดเตเดเดคเต เดเตเตผเดเตเดเดพเดตเตเดจเตเดจเดคเดพเดฃเต).
เดเดฐเต เดฆเตเดฐเตเดค เดคเดฟเดฐเดฏเตฝ เดจเดฟเดฐเดตเดงเดฟ เดซเดฒเดเตเดเตพ เดจเตฝเดเดฟ: s3pypi, pypicloud เดเตเดเดพเดคเต เดเตเดฃเดฟเดชเตเดชเตเดเตพเดเตเดเดพเดฏเดฟ html เดซเดฏเดฒเตเดเตพ "เดฎเดพเดจเตเดตเตฝ" เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฐเต เดเดชเตเดทเตป. เด เดตเดธเดพเดจ เดเดชเตเดทเตป เดธเตเดตเดฏเด เด เดชเตเดฐเดคเตเดฏเดเตเดทเดฎเดพเดฏเดฟ.
s3pypi: เดเดคเต S3 เดนเตเดธเตเดฑเตเดฑเดฟเดเดเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฐเต cli เดเดฃเต. เดเดเตเดเตพ เดซเดฏเดฒเตเดเตพ เด เดชเตโเดฒเตเดกเต เดเตเดฏเตเดฏเตเดเดฏเตเด html เดธเตเดทเตเดเดฟเดเตเดเตเดเดฏเตเด เด เดคเต เดฌเดเตเดเดฑเตเดฑเดฟเดฒเตเดเตเดเต เด เดชเตโเดฒเตเดกเต เดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต. เดเดพเตผเดนเดฟเด เดเดชเดฏเตเดเดคเตเดคเดฟเดจเต เด เดจเตเดฏเตเดเตเดฏเด.
pypicloud: เดเดคเตเดฐเต เดฐเดธเดเดฐเดฎเดพเดฏ เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดชเตเดฒเต เดคเตเดจเตเดจเดฟ, เดชเดเตเดทเต เดกเตเดเตเดฏเตเดฎเตเดจเตเดฑเตเดทเตป เดตเดพเดฏเดฟเดเตเดเดคเดฟเดจเตเดถเตเดทเด เดเดพเตป เดจเดฟเดฐเดพเดถเดจเดพเดฏเดฟ. เดจเดฒเตเดฒ เดกเตเดเตเดฏเตเดฎเตเดจเตเดฑเตเดทเดจเตเด เดจเดฟเดเตเดเดณเตเดเต เดเดตเดถเตเดฏเดเตเดเตพเดเตเดเดจเตเดธเดฐเดฟเดเตเดเต เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเดพเดจเตเดณเตเดณ เดเดดเดฟเดตเตเด เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดเตเดเตเด, เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ เด เดคเต เด เดจเดพเดตเดถเตเดฏเดตเตเด เดเตเตบเดซเดฟเดเตผ เดเตเดฏเตเดฏเดพเตป เดฌเตเดฆเตเดงเดฟเดฎเตเดเตเดเตเดณเตเดณเดคเตเดฎเดพเดฏเดฟ เดฎเดพเดฑเดฟ. เดจเดฟเดเตเดเดณเตเดเต เดเดพเดธเตโเดเตเดเตเดเตพเดเตเดเต เด เดจเตเดฏเตเดเตเดฏเดฎเดพเดฏ เดฐเตเดคเดฟเดฏเดฟเตฝ เดเตเดกเต เดถเดฐเดฟเดฏเดพเดเตเดเดพเตป, เด เดเตเดเดพเดฒเดคเตเดคเต เดเดฃเดเตเดเตเดเตพ เดชเตเดฐเดเดพเดฐเด, 3-5 เดฆเดฟเดตเดธเดฎเตเดเตเดเตเดเตเด. เดธเตเดตเดจเดคเตเดคเดฟเดจเต เดเดฐเต เดกเดพเดฑเตเดฑเดพเดฌเตเดธเตเด เดเดตเดถเตเดฏเดฎเดพเดฃเต. เดฎเดฑเตเดฑเตเดจเตเดจเตเด เดเดฃเตเดเตเดคเตเดคเดพเดจเดพเดเดพเดคเตเดค เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเตฝ เดเดเตเดเตพ เด เดคเต เดเดชเตเดเตเดทเดฟเดเตเดเต.
เดเตเดเตเดคเตฝ เดเดดเดคเตเดคเดฟเดฒเตเดณเตเดณ เดคเดฟเดฐเดฏเตฝ Nginx, ngx_aws_auth เดเดจเตเดจเดคเดฟเดจเดพเดฏเตเดณเตเดณ เดเดฐเต เดฎเตเดกเตเดฏเตเตพ เดจเตฝเดเดฟ. เด เดตเดจเตเดฑเต เดชเดฐเดฟเดถเตเดงเดจเดฏเตเดเต เดซเดฒเด เดฌเตเดฐเตเดธเดฑเดฟเตฝ XML เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเดเตเดเต, เด เดคเต S3 เดฌเดเตเดเดฑเตเดฑเดฟเดจเตเดฑเต เดเดณเตเดณเดเดเตเดเด เดเดพเดฃเดฟเดเตเดเตเดจเตเดจเต. เดคเดฟเดฐเดเตเดเดฟเตฝ เดธเดฎเดฏเดคเตเดคเต เด เดตเดธเดพเดจ เดเดฎเตเดฎเดฟเดฑเตเดฑเต เดเดฐเต เดตเตผเดทเด เดฎเตเดฎเตเดชเดพเดฏเดฟเดฐเตเดจเตเดจเต. เดถเตเดเดฐเด เดเดชเตเดเตเดทเดฟเดเตเดเดชเตเดชเตเดเตเดเดคเดพเดฏเดฟ เดเดพเดฃเดชเตเดชเตเดเตเดเต.
เดเดฑเดตเดฟเดเดคเตเดคเดฟเตฝ เดชเตเดฏเดฟ เดตเดพเดฏเดฟเดเตเดเตเดเตเดฃเตเดเต
เด เดเดฆเดพเดนเดฐเดฃเด เด เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดฏเดฟ เดเดเตเดคเตเดคเดพเตฝ, เดเดฐเต เดฎเดฃเดฟเดเตเดเตเดฑเดฟเดจเต เดถเตเดทเด เดเดพเตป เดเดจเตเดฑเต เดฌเตเดฐเตเดธเดฑเดฟเตฝ ngx_aws_auth เดฎเตเดกเตเดฏเตเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดฎเตเดชเตเตพ เด เดคเต XML เดเดฃเตเดเต, เดชเดเตเดทเต เดเดฒเตเดฒเดพเด เดเดคเดฟเดจเดเด JS-เตฝ เดเดดเตเดคเดฟเดฏเดฟเดฐเตเดจเตเดจเต.
เดเดจเดฟเดเตเดเต nginx เดชเดฐเดฟเดนเดพเดฐเด เดถเดฐเดฟเดเตเดเตเด เดเดทเตเดเดชเตเดชเตเดเตเดเต. เดเดจเตเดจเดพเดฎเดคเดพเดฏเดฟ, เดจเดฒเตเดฒ เดกเตเดเตเดฏเตเดฎเตเดจเตเดฑเตเดทเดจเตเด เดจเดฟเดฐเดตเดงเดฟ เดเดฆเดพเดนเดฐเดฃเดเตเดเดณเตเด, เดฐเดฃเตเดเดพเดฎเดคเดพเดฏเดฟ, เดซเดฏเดฒเตเดเดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต Nginx-เดจเตเดฑเต เดเดฒเตเดฒเดพ เดเตเดฃเดเตเดเดณเตเด เดเดเตเดเตพเดเตเดเต เดฒเดญเดฟเดเตเดเตเดจเตเดจเต (เดฌเตเดเตโเดธเดฟเดจเต เดชเตเดฑเดคเตเดคเต), เดฎเตเดจเตเดจเดพเดฎเดคเดพเดฏเดฟ, Nginx-เดจเดพเดฏเดฟ เดเตเตบเดซเดฟเดเดฑเตเดเตพ เดเดเตเดเดจเต เดเดดเตเดคเดฃเดฎเตเดจเตเดจเต เด เดฑเดฟเดฏเตเดจเตเดจ เดเตผเดเตเดเตเด เดเดจเตเดคเดพเดฃเตเดจเตเดจเต เดฎเดจเดธเดฟเดฒเดพเดเตเดเดพเตป เดเดดเดฟเดฏเตเด. เดชเตเดคเตเดคเตบ เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดเต (เดเดฆเตเดฏเด เดฎเตเดคเตฝ เดเดดเตเดคเดฟเดฏเดพเตฝ) เดจเตเดเตโเดธเดธเต เดชเดฐเดพเดฎเตผเดถเดฟเดเตเดเดพเดคเต เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเตเดเตเดคเตเดคเตเดฎเตเดชเตเตพ เดฎเดฟเดจเดฟเดฎเดฒเดฟเดธเดตเตเด เดเดจเดฟเดเตเดเต เดเดฐเต เดชเตเดฒเดธเต เดเดฃเต.
TL;DR 2 เดฆเดฟเดตเดธเดคเตเดคเดฟเดจเต เดถเตเดทเด, PyPi-เดฏเตเดเต เดเตเดธเตเดฑเตเดฑเต เดชเดคเดฟเดชเตเดชเต เดเดคเดฟเดจเดเด CI-เดฏเดฟเตฝ เดเดชเดฏเตเดเดฟเดเตเดเต.
เดเดคเต เดเดเตเดเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต?
เดฎเตเดกเตเดฏเตเตพ Nginx-เดฒเตเดเตเดเต เดฒเตเดกเตเดเตเดฏเตโเดคเต ngx_http_js_module
, เดเดฆเตเดฏเตเดเดฟเด เดกเตเดเตเดเตผ เดเดฟเดคเตเดฐเดคเตเดคเดฟเตฝ เดเตพเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏเดฟเดเตเดเตเดฃเตเดเต. เดจเดฟเตผเดฆเตเดฆเตเดถเด เดเดชเดฏเตเดเดฟเดเตเดเต เดเดเตเดเตพ เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดเดฑเดเตเดเตเดฎเดคเดฟ เดเตเดฏเตเดฏเตเดจเตเดจเต js_import
Nginx เดเตเตบเดซเดฟเดเดฑเตเดทเดจเดฟเดฒเตเดเตเดเต. เดเดฐเต เดจเดฟเตผเดฆเตเดฆเตเดถเดชเตเดฐเดเดพเดฐเดฎเดพเดฃเต เดซเดเดเตโเดทเดจเต เดตเดฟเดณเดฟเดเตเดเตเดจเตเดจเดคเต js_content
. เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเตพ เดธเดเตเดเดฎเดพเดเตเดเดพเตป เดจเดฟเตผเดฆเตเดฆเตเดถเด เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต js_set
, เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเดฟเตฝ เดตเดฟเดตเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดซเดเดเตเดทเตป เดฎเดพเดคเตเดฐเด เดเดฐเต เดเตผเดเตเดฏเตเดฎเตเดจเตเดฑเดพเดฏเดฟ เดเดเตเดเตเดเตเดจเตเดจเต. เดเดจเตเดจเดพเตฝ เดจเดฎเตเดเตเดเต NJS-เตฝ Nginx เดเดชเดฏเตเดเดฟเดเตเดเต เดฎเดพเดคเตเดฐเดฎเต เดธเดฌเตเดเตเดตเดฑเดฟเดเตพ เดเดเตเดธเดฟเดเตเดฏเตเดเตเดเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเต, เดเดคเตเดเตเดเดฟเดฒเตเด XMLHttpRequest เด
เดฒเตเดฒ. เดเดคเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, Nginx เดเตเตบเดซเดฟเดเดฑเตเดทเดจเดฟเดฒเตเดเตเดเต เด
เดจเตเดฌเดจเตเดง เดธเตเดฅเดพเดจเด เดเตเตผเดเตเดเดฃเด. เดเตเดเดพเดคเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เด เดฒเตเดเตเดเตเดทเดจเดฟเดฒเตเดเตเดเตเดณเตเดณ เดเดฐเต เดเดชเด
เดญเตเดฏเตผเดคเตเดฅเดจเดฏเต เดตเดฟเดตเดฐเดฟเดเตเดเดฃเด. Nginx เดเตเตบเดซเดฟเดเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเต เดซเดเดเตโเดทเตป เดเดเตโเดธเดธเต เดเตเดฏเตเดฏเดพเตป, เดซเดเดเตโเดทเดจเตเดฑเต เดชเตเดฐเต เดธเตโเดเตเดฐเดฟเดชเตเดฑเตเดฑเดฟเตฝ เดคเดจเตเดจเต เดเดเตโเดธเตโเดชเตเตผเดเตเดเต เดเตเดฏเตเดฏเดฃเด export default
.
nginx.conf
load_module modules/ngx_http_js_module.so;
http {
js_import imported_name from script.js;
server {
listen 8080;
...
location = /sub-query {
internal;
proxy_pass http://upstream;
}
location / {
js_content imported_name.request;
}
}
script.js
function request(r) {
function call_back(resp) {
// handler's code
r.return(resp.status, resp.responseBody);
}
r.subrequest('/sub-query', { method: r.method }, call_back);
}
export default {request}
เดฌเตเดฐเตเดธเดฑเดฟเตฝ เดเดตเดถเตเดฏเดชเตเดชเตเดเตเดฎเตเดชเตเตพ http://localhost:8080/
เดเดเตเดเตพ เดชเตเดฐเดตเตเดถเดฟเดเตเดเตเดจเตเดจเต location /
เด
เดคเดฟเตฝ เดจเดฟเตผเดฆเตเดฆเตเดถเด js_content
เดเดฐเต เดซเดเดเตเดทเตป เดตเดฟเดณเดฟเดเตเดเตเดจเตเดจเต request
เดเดเตเดเดณเตเดเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเดฟเตฝ เดตเดฟเดตเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต script.js
. เด
เดคเดพเดเดเตเดเต, เดเดเดเตเดเดฟเตฝ request
เดเดฐเต เดธเดฌเตเดเตเดตเดฑเดฟ เดเดฃเตเดเดพเดเตเดเดฟ location = /sub-query
, เดเตผเดเตเดฏเตเดฎเตเดจเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเดญเดฟเดเตเด เดเดฐเต เดฐเตเดคเดฟ เดเดชเดฏเตเดเดฟเดเตเดเต (เดจเดฟเดฒเดตเดฟเดฒเต เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ GET). (r)
, เด เดซเดเดเตโเดทเตป เดตเดฟเดณเดฟเดเตเดเตเดฎเตเดชเตเตพ เดชเดฐเตเดเตเดทเดฎเดพเดฏเดฟ เดเดเดจเตเดจเตเดชเตเดเตเดจเตเดจเต. เดธเดฌเตโเดเตเดตเดธเตเดฑเตเดฑเต เดชเตเดฐเดคเดฟเดเดฐเดฃเด เดซเดเดเตโเดทเดจเดฟเตฝ เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเตเด call_back
.
S3 เดถเตเดฐเดฎเดฟเดเตเดเตเดจเตเดจเต
เดธเตเดตเดเดพเดฐเตเดฏ S3 เดธเดเดญเดฐเดฃเดคเตเดคเดฟเดฒเตเดเตเดเต เดเดฐเต เด เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดเดคเตเดคเดพเตป, เดเดเตเดเตพเดเตเดเต เดเดคเต เดเดตเดถเตเดฏเดฎเดพเดฃเต:
ACCESS_KEY
SECRET_KEY
S3_BUCKET
เดเดชเดฏเตเดเดฟเดเตเด http เดฐเตเดคเดฟ, เดจเดฟเดฒเดตเดฟเดฒเต เดคเตเดฏเดคเดฟ/เดธเดฎเดฏเด, S3_NAME, URI เดเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต, เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดคเดฐเด เดธเตโเดเตเดฐเดฟเดเดเต เดเดจเดฑเตเดฑเตเดฑเตเดเตเดฏเตเดฏเตเดจเตเดจเต, เด
เดคเต SECRET_KEY เดเดชเดฏเตเดเดฟเดเตเดเต เดธเตเตป เดเตเดฏเตโเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต (HMAC_SHA1). เด
เดเตเดคเตเดคเดคเต เดชเตเดฒเต เดเดฐเต เดตเดฐเดฟ AWS $ACCESS_KEY:$HASH
, เด
เดเดเตเดเดพเดฐ เดคเดฒเดเตเดเตเดเตเดเดฟเตฝ เดเดชเดฏเตเดเดฟเดเตเดเดพเด. เดฎเตเดฎเตเดชเดคเตเดคเต เดเดเตเดเดคเตเดคเดฟเตฝ เดธเตเดเตเดฐเดฟเดเดเต เดธเตเดทเตโเดเดฟเดเตเดเดพเตป เดเดชเดฏเตเดเดฟเดเตเด เด
เดคเต เดคเตเดฏเดคเดฟ/เดธเดฎเดฏเด เดนเตเดกเดฑเดฟเดฒเตเดเตเดเต เดเตเตผเดเตเดเดฃเด X-amz-date
. เดเตเดกเดฟเตฝ เดเดคเต เดเดคเตเดชเตเดฒเต เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเต:
nginx.conf
load_module modules/ngx_http_js_module.so;
http {
js_import s3 from s3.js;
js_set $s3_datetime s3.date_now;
js_set $s3_auth s3.s3_sign;
server {
listen 8080;
...
location ~* /s3-query/(?<s3_path>.*) {
internal;
proxy_set_header X-amz-date $s3_datetime;
proxy_set_header Authorization $s3_auth;
proxy_pass $s3_endpoint/$s3_path;
}
location ~ "^/(?<prefix>[w-]*)[/]?(?<postfix>[w-.]*)$" {
js_content s3.request;
}
}
s3.js
(AWS เดธเตเตป v2 เด
เดเดเตเดเดพเดฐ เดเดฆเดพเดนเดฐเดฃเด, เดเดดเดฟเดตเดพเดเตเดเดฟเดฏ เดจเดฟเดฒเดฏเดฟเดฒเตเดเตเดเต เดฎเดพเดฑเตเดฑเดฟ)
var crypt = require('crypto');
var s3_bucket = process.env.S3_BUCKET;
var s3_access_key = process.env.S3_ACCESS_KEY;
var s3_secret_key = process.env.S3_SECRET_KEY;
var _datetime = new Date().toISOString().replace(/[:-]|.d{3}/g, '');
function date_now() {
return _datetime
}
function s3_sign(r) {
var s2s = r.method + 'nnnn';
s2s += `x-amz-date:${date_now()}n`;
s2s += '/' + s3_bucket;
s2s += r.uri.endsWith('/') ? '/' : r.variables.s3_path;
return `AWS ${s3_access_key}:${crypt.createHmac('sha1', s3_secret_key).update(s2s).digest('base64')}`;
}
function request(r) {
var v = r.variables;
function call_back(resp) {
r.return(resp.status, resp.responseBody);
}
var _subrequest_uri = r.uri;
if (r.uri === '/') {
// root
_subrequest_uri = '/?delimiter=/';
} else if (v.prefix !== '' && v.postfix === '') {
// directory
var slash = v.prefix.endsWith('/') ? '' : '/';
_subrequest_uri = '/?prefix=' + v.prefix + slash;
}
r.subrequest(`/s3-query${_subrequest_uri}`, { method: r.method }, call_back);
}
export default {request, s3_sign, date_now}
เดเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเต เดเดฐเต เดเตเดฑเดฟเดฏ เดตเดฟเดถเดฆเตเดเดฐเดฃเด _subrequest_uri
: เดเดคเตเดฐเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเดพเดฃเต, เดชเตเดฐเดพเดฐเดเดญ uriเดฏเต เดเดถเตเดฐเดฏเดฟเดเตเดเต, S3-เดฒเตเดเตเดเต เดเดฐเต เด
เดญเตเดฏเตผเดคเตเดฅเดจ เดฐเตเดชเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต. เดจเดฟเดเตเดเตพเดเตเดเต "เดฑเตเดเตเดเดฟเดจเตเดฑเต" เดเดณเตเดณเดเดเตเดเด เดฒเดญเดฟเดเตเดเดฃเดฎเตเดเตเดเดฟเตฝ, เดกเดฟเดฒเดฟเดฎเดฟเดฑเตเดฑเตผ เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจ เดเดฐเต เดฏเตเดฑเดฟ เด
เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดฟเดเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต. delimiter
, เดกเดฏเดฑเดเตโเดเดฑเดฟเดเดณเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเตเดเตเด เดเดฒเตเดฒเดพ เดเตเดฎเตบเดชเตเดฐเดฟเดซเดฟเดเตโเดธเดธเต xml เดเดเดเดเตเดเดณเตเดเตเดฏเตเด เดเดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดคเดฟเดฐเดฟเดเต เดจเตฝเดเตเด (PyPI-เดฏเตเดเต เดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดเดฒเตเดฒเดพ เดชเดพเดเตเดเตเดเตเดเดณเตเดเตเดฏเตเด เดเดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต). เดเดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโเด เดกเดฏเดฑเดเตโเดเดฑเดฟเดฏเดฟเตฝ (เดเดฒเตเดฒเดพ เดชเดพเดเตเดเตเดเต เดชเดคเดฟเดชเตเดชเตเดเดณเตเดเตเดฏเตเด เดเดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต) เดจเดฟเดเตเดเตพเดเตเดเต เดเดณเตเดณเดเดเตเดเดเตเดเดณเตเดเต เดเดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดฒเดญเดฟเดเตเดเดฃเดฎเตเดเตเดเดฟเตฝ, uri เด
เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเตฝ เดกเดฏเดฑเดเตโเดเดฑเดฟเดฏเตเดเต เดชเตเดฐเตเดเตเดเตเดเดฟเดฏ เดเดฐเต เดชเตเดฐเดฟเดซเดฟเดเตโเดธเต เดซเตเตฝเดกเต เดเดฃเตเดเดพเดฏเดฟเดฐเดฟเดเตเดเดฃเด (เดชเดพเดเตเดเตเดเต) เดจเดฟเตผเดฌเดจเตเดงเดฎเดพเดฏเตเด เดเดฐเต เดธเตเดฒเดพเดทเดฟเตฝ เด
เดตเดธเดพเดจเดฟเดเตเดเตเดจเตเดจ /. เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ, เดเดฐเต เดกเดฏเดฑเดเตเดเดฑเดฟเดฏเตเดเต เดเดณเตเดณเดเดเตเดเด เดเดตเดถเตเดฏเดชเตเดชเตเดเตเดฎเตเดชเตเตพ เดเตเดเตเดเดฟเดฏเดฟเดเดฟเดเตพ เดธเดพเดงเตเดฏเดฎเดพเดฃเต, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต. aiohttp-request, aiohttp-เด
เดญเตเดฏเตผเดคเตเดฅเดจเดเตพ เดเดจเตเดจเต เดกเดฏเดฑเดเตโเดเดฑเดฟเดเตพ เดเดฃเตเดเต, เด
เดญเตเดฏเตผเดคเตเดฅเดจ เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ /?prefix=aiohttp-request
, เด
เดชเตเดชเตเตพ เดชเตเดฐเดคเดฟเดเดฐเดฃเดคเตเดคเดฟเตฝ เดฐเดฃเตเดเต เดกเดฏเดฑเดเตเดเดฑเดฟเดเดณเดฟเดฒเตเดฏเตเด เดเดณเตเดณเดเดเตเดเด เด
เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเด. เด
เดตเดธเดพเดจเด เดเดฐเต เดธเตเดฒเดพเดทเต เดเดฃเตเดเตเดเตเดเดฟเตฝ, /?prefix=aiohttp-request/
, เด
เดชเตเดชเตเตพ เดชเตเดฐเดคเดฟเดเดฐเดฃเดคเตเดคเดฟเตฝ เดเดตเดถเตเดฏเดฎเดพเดฏ เดกเดฏเดฑเดเตโเดเดฑเดฟ เดฎเดพเดคเตเดฐเดฎเต เดเดฃเตเดเดพเดเต. เดเดเตเดเตพ เดเดฐเต เดซเดฏเตฝ เด
เดญเตเดฏเตผเดคเตเดฅเดฟเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดเดพเดเตเดจเตเดจ uri เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดเดฐเตเดคเต.
Nginx เดธเดเดฐเดเตเดทเดฟเดเตเดเต เดชเตเดจเดฐเดพเดฐเดเดญเดฟเดเตเดเตเด. เดฌเตเดฐเตเดธเดฑเดฟเตฝ เดเดเตเดเตพ เดเดเตเดเดณเตเดเต Nginx เดจเตเดฑเต เดตเดฟเดฒเดพเดธเด เดจเตฝเดเตเดฎเตเดชเตเตพ, เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเดเต เดซเดฒเด XML เดเดฏเดฟเดฐเดฟเดเตเดเตเด, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต:
เดกเดฏเดฑเดเตเดเดฑเดฟเดเดณเตเดเต เดชเดเตเดเดฟเด
<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>myback-space</Name>
<Prefix></Prefix>
<Marker></Marker>
<MaxKeys>10000</MaxKeys>
<Delimiter>/</Delimiter>
<IsTruncated>false</IsTruncated>
<CommonPrefixes>
<Prefix>new/</Prefix>
</CommonPrefixes>
<CommonPrefixes>
<Prefix>old/</Prefix>
</CommonPrefixes>
</ListBucketResult>
เดกเดฏเดฑเดเตเดเดฑเดฟเดเดณเตเดเต เดชเดเตเดเดฟเดเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเดฟเดเตเดเตพเดเตเดเต เดเดเดเดเตเดเตพ เดฎเดพเดคเตเดฐเดฎเต เดเดตเดถเตเดฏเดฎเตเดณเตเดณเต CommonPrefixes
.
เดฌเตเดฐเตเดธเดฑเดฟเดฒเต เดเดเตเดเดณเตเดเต เดตเดฟเดฒเดพเดธเดคเตเดคเดฟเดฒเตเดเตเดเต เดเดเตเดเตพเดเตเดเต เดเดตเดถเตเดฏเดฎเดพเดฏ เดกเดฏเดฑเดเตโเดเดฑเดฟ เดเตเตผเดเตเดเตเดจเตเดจเดคเดฟเดฒเตเดเต, เดเดเตเดเตพเดเตเดเต เด เดคเดฟเดจเตเดฑเต เดเดณเตเดณเดเดเตเดเดเตเดเดณเตเด XML เดฐเตเดชเดคเตเดคเดฟเตฝ เดฒเดญเดฟเดเตเดเตเด:
เดเดฐเต เดกเดฏเดฑเดเตเดเดฑเดฟเดฏเดฟเดฒเต เดซเดฏเดฒเตเดเดณเตเดเต เดฒเดฟเดธเตเดฑเตเดฑเต
<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name> myback-space</Name>
<Prefix>old/</Prefix>
<Marker></Marker>
<MaxKeys>10000</MaxKeys>
<Delimiter></Delimiter>
<IsTruncated>false</IsTruncated>
<Contents>
<Key>old/giphy.mp4</Key>
<LastModified>2020-08-21T20:27:46.000Z</LastModified>
<ETag>"00000000000000000000000000000000-1"</ETag>
<Size>1350084</Size>
<Owner>
<ID>02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4</ID>
<DisplayName></DisplayName>
</Owner>
<StorageClass>STANDARD</StorageClass>
</Contents>
<Contents>
<Key>old/hsd-k8s.jpg</Key>
<LastModified>2020-08-31T16:40:01.000Z</LastModified>
<ETag>"b2d76df4aeb4493c5456366748218093"</ETag>
<Size>93183</Size>
<Owner>
<ID>02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4</ID>
<DisplayName></DisplayName>
</Owner>
<StorageClass>STANDARD</StorageClass>
</Contents>
</ListBucketResult>
เดซเดฏเดฒเตเดเดณเตเดเต เดชเดเตเดเดฟเดเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดเตเดเตพ เดเดเดเดเตเดเตพ เดฎเดพเดคเตเดฐเดฎเต เดเดเตเดเตเดเต Key
.
เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดเดพเดเตเดจเตเดจ XML เดชเดพเดดเตโเดธเต เดเตเดฏเตโเดคเต HTML เดเดฏเดฟ เด เดฏเดฏเตโเดเตเดเตเด เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดถเตเดทเดฟเดเตเดเตเดจเตเดจเดคเต, เดเดฆเตเดฏเด เดเดณเตเดณเดเดเตเด-เดคเดฐเด เดคเดฒเดเตเดเตเดเตเดเต เดเตเดเตโเดธเตโเดฑเตเดฑเต/เดเดเตเดเตโเดเดฟเดเดเดเตฝ เดเดชเดฏเตเดเดฟเดเตเดเต เดฎเดพเดฑเตเดฑเดฟ.
function request(r) {
var v = r.variables;
function call_back(resp) {
var body = resp.responseBody;
if (r.method !== 'PUT' && resp.status < 400 && v.postfix === '') {
r.headersOut['Content-Type'] = "text/html; charset=utf-8";
body = toHTML(body);
}
r.return(resp.status, body);
}
var _subrequest_uri = r.uri;
...
}
function toHTML(xml_str) {
var keysMap = {
'CommonPrefixes': 'Prefix',
'Contents': 'Key',
};
var pattern = `<k>(?<v>.*?)</k>`;
var out = [];
for(var group_key in keysMap) {
var reS;
var reGroup = new RegExp(pattern.replace(/k/g, group_key), 'g');
while(reS = reGroup.exec(xml_str)) {
var data = new RegExp(pattern.replace(/k/g, keysMap[group_key]), 'g');
var reValue = data.exec(reS);
var a_text = '';
if (group_key === 'CommonPrefixes') {
a_text = reValue.groups.v.replace(///g, '');
} else {
a_text = reValue.groups.v.split('/').slice(-1);
}
out.push(`<a href="/ml/${reValue.groups.v}">${a_text}</a>`);
}
}
return '<html><body>n' + out.join('</br>n') + 'n</html></body>'
}
PyPI เดถเตเดฐเดฎเดฟเดเตเดเตเดจเตเดจเต
เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดฎเตเดจเตเดจเต เด เดฑเดฟเดฏเดชเตเดชเตเดเตเดจเตเดจ เดชเดพเดเตเดเตเดเตเดเดณเดฟเตฝ เดเดตเดฟเดเตเดฏเตเด เดเดจเตเดจเตเด เดคเดเดฐเตเดจเตเดจเดฟเดฒเตเดฒเตเดจเตเดจเต เดเดเตเดเตพ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดจเตเดจเต.
# ะกะพะทะดะฐะตะผ ะดะปั ัะตััะพะฒ ะฝะพะฒะพะต ะพะบััะถะตะฝะธะต
python3 -m venv venv
. ./venv/bin/activate
# ะกะบะฐัะธะฒะฐะตะผ ัะฐะฑะพัะธะต ะฟะฐะบะตัั.
pip download aiohttp
# ะะฐะณััะถะฐะตะผ ะฒ ะฟัะธะฒะฐัะฝัั ัะตะฟั
for wheel in *.whl; do curl -T $wheel http://localhost:8080/${wheel%%-*}/$wheel; done
rm -f *.whl
# ะฃััะฐะฝะฐะฒะปะธะฒะฐะตะผ ะธะท ะฟัะธะฒะฐัะฝะพะน ัะตะฟั
pip install aiohttp -i http://localhost:8080
เดเดเตเดเดณเตเดเต เดฒเดฟเดฌเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดเดเตเดเตพ เดเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต.
# ะกะพะทะดะฐะตะผ ะดะปั ัะตััะพะฒ ะฝะพะฒะพะต ะพะบััะถะตะฝะธะต
python3 -m venv venv
. ./venv/bin/activate
pip install setuptools wheel
python setup.py bdist_wheel
for wheel in dist/*.whl; do curl -T $wheel http://localhost:8080/${wheel%%-*}/$wheel; done
pip install our_pkg --extra-index-url http://localhost:8080
CI-เตฝ, เดเดฐเต เดชเดพเดเตเดเตเดเต เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเตเด เดฒเตเดกเตเดเตเดฏเตเดฏเตเดจเตเดจเดคเตเด เดเดคเตเดชเตเดฒเต เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเต:
pip install setuptools wheel
python setup.py bdist_wheel
curl -sSfT dist/*.whl -u "gitlab-ci-token:${CI_JOB_TOKEN}" "https://pypi.our-domain.com/${CI_PROJECT_NAME}"
เดชเตเดฐเดพเดฎเดพเดฃเตเดเดฐเดฃเด
Gitlab-เตฝ เดฌเดพเดนเตเดฏ เดธเตเดตเดจเดเตเดเดณเตเดเต เดชเตเดฐเดพเดฎเดพเดฃเตเดเดฐเดฃเดคเตเดคเดฟเดจเตเด เด เดเดเตเดเดพเดฐเดคเตเดคเดฟเดจเตเด JWT เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด. Nginx-เดฒเต auth_request เดกเดฏเดฑเดเตโเดเตเดตเต เดเดชเดฏเตเดเดฟเดเตเดเต, เดธเตโเดเตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดฒเต เดเดฐเต เดซเดเดเตโเดทเตป เดเตเตพ เด เดเดเตเดเตเดจเตเดจ เดเดฐเต เดเดชเด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเดฒเตเดเตเดเต เดเดเตเดเตพ เดชเตเดฐเดพเดฎเดพเดฃเตเดเดฐเดฃ เดกเดพเดฑเตเดฑ เดฑเตเดกเดฏเดฑเดเตโเดเต เดเตเดฏเตเดฏเตเด. Gitlab url-เดฒเตเดเตเดเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดฎเดฑเตเดฑเตเดฐเต เดเดชเดพเดญเตเดฏเตผเดคเตเดฅเดจ เดจเดเดคเตเดคเตเดเดฏเตเด เดชเตเดฐเดพเดฎเดพเดฃเตเดเดฐเดฃ เดกเดพเดฑเตเดฑ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเดฟเดฏเดฟเดเตเดเตเดฃเตเดเตเดเตเดเดฟเตฝ, Gitlab เดเตเดกเต 200 เดจเตฝเดเตเดเดฏเตเด เดชเดพเดเตเดเตเดเดฟเดจเตเดฑเต เด เดชเตโเดฒเตเดกเต/เดกเตเตบเดฒเตเดกเต เด เดจเตเดตเดฆเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด. เดเดจเตเดคเตเดเตเดฃเตเดเต เดเดฐเต เดธเดฌเตเดเตเดตเดฑเดฟ เดเดชเดฏเตเดเดฟเดเตเดเต เดกเดพเดฑเตเดฑ เดเดเตป เดคเดจเตเดจเต Gitlab-เดฒเตเดเตเดเต เด เดฏเดเตเดเตเดเตเดเดพ? เดเดพเดฐเดฃเด, เด เดเดเตเดเดพเดฐเดคเตเดคเดฟเตฝ เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดฎเดพเดฑเตเดฑเดเตเดเตพ เดตเดฐเตเดคเตเดคเตเดฎเตเดชเตเดดเตเดฒเตเดฒเดพเด เดเดเตเดเตพ Nginx เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดซเดฏเตฝ เดเดกเดฟเดฑเตเดฑเต เดเตเดฏเตเดฏเตเดฃเตเดเดฟเดตเดฐเตเด, เดเดคเต เดคเดฟเดเดเตเดเตเด เดฎเดเตเดชเตเดชเดฟเดเตเดเตเดจเตเดจ เดเตเดฒเดฟเดฏเดพเดฃเต. เดเตเดเดพเดคเต, Kubernetes เดเดฐเต เดฑเตเดกเต-เดเตบเดฒเดฟ เดฑเตเดเตเดเต เดซเดฏเตฝเดธเดฟเดธเตเดฑเตเดฑเด เดจเดฏเดฎเดพเดฃเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเตเดเตเดเดฟเตฝ, เดเตเตบเดซเดฟเดเตเดฎเดพเดชเตเดชเต เดตเดดเดฟ nginx.conf เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเดเตเดเตเดฎเตเดชเตเตพ เดเดคเต เดเตเดเตเดคเตฝ เดธเดเตเดเตเตผเดฃเตเดฃเดค เดจเตฝเดเตเดจเตเดจเต. เดตเตเดณเตเดฏเดเตเดเดณเตเดเต (pvc) เดเดฃเดเตเดทเตป เดจเดฟเดฐเตเดงเดฟเดเตเดเตเดจเตเดจ เดจเดฏเดเตเดเดณเตเด เดฑเตเดกเต-เดเตบเดฒเดฟ เดฑเตเดเตเดเต เดซเดฏเตฝเดธเดฟเดธเตเดฑเตเดฑเดตเตเด (เดเดคเตเด เดธเดเดญเดตเดฟเดเตเดเตเดจเตเดจเต) เดเดฐเตเดธเดฎเดฏเด เดเดชเดฏเตเดเดฟเดเตเดเตเดฎเตเดชเตเตพ เดเตเตบเดซเดฟเดเตเดฎเดพเดชเตเดชเต เดตเดดเดฟ Nginx เดเตเตบเดซเดฟเดเตผ เดเตเดฏเตเดฏเตเดจเตเดจเดคเต เดคเดฟเดเดเตเดเตเด เด เดธเดพเดงเตเดฏเดฎเดพเดฃเต.
NJS เดเดจเตเดฑเตผเดฎเตเดกเดฟเดฏเดฑเตเดฑเต เดเดชเดฏเตเดเดฟเดเตเดเต, เดเตปเดตเดฏเตเตบเดฎเตเดจเตเดฑเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต nginx เดเตเตบเดซเดฟเดเดฑเดฟเดฒเตเดณเตเดณ เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเดเตพ เดฎเดพเดฑเตเดฑเดพเดจเตเด เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเดฟเตฝ เดเดฟเดฒ เดชเดฐเดฟเดถเตเดงเดจเดเตพ เดจเดเดคเตเดคเดพเดจเตเด เดเดเตเดเตพเดเตเดเต เด เดตเดธเดฐเด เดฒเดญเดฟเดเตเดเตเด (เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดคเตเดฑเตเดฑเดพเดฏเดฟ เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเดฟเดฏ URL).
nginx.conf
location = /auth-provider {
internal;
proxy_pass $auth_url;
}
location = /auth {
internal;
proxy_set_header Content-Length "";
proxy_pass_request_body off;
js_content auth.auth;
}
location ~ "^/(?<prefix>[w-]*)[/]?(?<postfix>[w-.]*)$" {
auth_request /auth;
js_content s3.request;
}
s3.js
var env = process.env;
var env_bool = new RegExp(/[Tt]rue|[Yy]es|[Oo]n|[TtYy]|1/);
var auth_disabled = env_bool.test(env.DISABLE_AUTH);
var gitlab_url = env.AUTH_URL;
function url() {
return `${gitlab_url}/jwt/auth?service=container_registry`
}
function auth(r) {
if (auth_disabled) {
r.return(202, '{"auth": "disabled"}');
return null
}
r.subrequest('/auth-provider',
{method: 'GET', body: ''},
function(res) {
r.return(res.status, "");
});
}
export default {auth, url}
เดฎเดฟเดเตเดเดตเดพเดฑเตเด, เดเตเดฆเตเดฏเด เดเดฏเตผเดจเตเดจเตเดตเดฐเตเดจเตเดจเต: -เดเดจเตเดคเตเดเตเดฃเตเดเต เดฑเตเดกเดฟเดฎเตเดฏเตเดกเต เดฎเตเดกเตเดฏเตเดณเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเดฐเตเดคเต? เดเดฒเตเดฒเดพเด เดเดคเดฟเดจเดเด เด เดตเดฟเดเต เดเตเดฏเตเดคเตเดเดดเดฟเดเตเดเต! เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, var AWS = เดเดตเดถเตเดฏเด('aws-sdk') เดเตเดเดพเดคเต S3 เดเดงเดฟเดเดพเดฐเดฟเดเดคเดฏเตเดเต เดเดฐเต "เดฌเตเดเตเดเต" เดเดดเตเดคเตเดฃเตเด เดเดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ!
เดจเดฎเตเดเตเดเต เดชเตเดฐเดพเดฏเตเดฎเดเดณเดฟเดฒเตเดเตเดเต เดชเตเดเดพเด
เดเดจเตเดจเต เดธเดเดฌเดจเตเดงเดฟเดเตเดเดฟเดเดคเตเดคเตเดณเด, เดฌเดพเดนเตเดฏ JS เดฎเตเดกเตเดฏเตเดณเตเดเตพ เดเดฑเดเตเดเตเดฎเดคเดฟ เดเตเดฏเตเดฏเดพเดจเตเดณเตเดณ เดเดดเดฟเดตเดฟเดฒเตเดฒเดพเดฏเตเดฎ เด
เดธเตเดเดเดฐเดตเตเด เดเดจเตเดจเดพเตฝ เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเดคเตเดฎเดพเดฏ เดเดฐเต เดธเดตเดฟเดถเตเดทเดคเดฏเดพเดฏเดฟ เดฎเดพเดฑเดฟ. เดฎเตเดเดณเดฟเดฒเต เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ เดตเดฟเดตเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดคเต เดเดตเดถเตเดฏเด ('เดเตเดฐเดฟเดชเตเดฑเตเดฑเต') เดเดฃเต
Nginx-เดฒเต เดจเดฟเดฒเดตเดฟเดฒเต เดชเตเดฐเตเดเดเตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เดเดเดชเตเดฐเดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเดฃเด gzip off;
NJS-เตฝ gzip เดฎเตเดกเตเดฏเตเตพ เดเดฒเตเดฒเดพเดคเตเดคเดคเดฟเดจเดพเตฝ เด เดคเต เดเดฃเดเตเดเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเต เด เดธเดพเดงเตเดฏเดฎเดพเดฃเต; เด เดคเดฟเดจเดพเตฝ, เดเดเดชเตเดฐเดธเต เดเตเดฏเตเดค เดกเดพเดฑเตเดฑ เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเตป เดเดฐเต เดฎเดพเตผเดเดตเตเดฎเดฟเดฒเตเดฒ. เดถเดฐเดฟเดฏเดพเดฃเต, เดเดคเต เด เดเตเดธเดฟเดจเต เดถเดฐเดฟเดเตเดเตเด เดเดฐเต เดฎเตเดจเดธเต เด เดฒเตเดฒ. เดงเดพเดฐเดพเดณเด เดเตเดเตโเดธเตโเดฑเตเดฑเต เดเดฒเตเดฒ, เดเตเดฎเดพเดฑเตเดฑเด เดเตเดฏเตโเดค เดซเดฏเดฒเตเดเตพ เดเดคเดฟเดจเดเด เดเดเดชเตเดฐเดธเตเดธเตเดเตเดฏเตโเดคเต, เด เดงเดฟเด เดเดเดชเตเดฐเดทเตป เด เดตเดฐเต เดตเดณเดฐเตเดฏเดงเดฟเดเด เดธเดนเดพเดฏเดฟเดเตเดเดฟเดฒเตเดฒ. เดเตเดเดพเดคเต, เดเตเดฑเดเตเดเต เดฎเดฟเดฒเตเดฒเดฟเดธเตเดเตเดเตปเดกเต เดตเตเดเดคเตเดคเดฟเตฝ เดเดณเตเดณเดเดเตเดเด เดกเตเดฒเดฟเดตเตผ เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเตฝ เดจเดฟเดเตเดเตพเดเตเดเต เดฌเตเดฆเตเดงเดฟเดฎเตเดเตเดเตเดฃเตเดเดฟ เดตเดฐเตเดจเตเดจ เด เดคเตเดฐ เดฒเตเดกเตเดเตเดฏเตเดคเดคเต เดจเดฟเตผเดฃเดพเดฏเดเดฎเดพเดฏเดคเต เดเดฏ เดธเตเดตเดจเดฎเดฒเตเดฒ เดเดคเต.
เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดกเตเดฌเดเตเดเดฟเดเดเต เดตเดณเดฐเต เดธเดฎเดฏเดฎเตเดเตเดเตเดเตเด, error.log-เดฒเต "เดชเตเดฐเดฟเดจเตเดฑเตเดเตพ" เดตเดดเดฟ เดฎเดพเดคเตเดฐเดฎเต เดเดคเต เดธเดพเดงเตเดฏเดฎเดพเดเต. เดธเตเดฑเตเดฑเต เดฒเตเดเดฟเดเดเต เดฒเตเดตเตฝ เดเตปเดซเต, เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดชเดฟเดถเดเต เดเดจเตเดจเดฟเดตเดฏเต เดเดถเตเดฐเดฏเดฟเดเตเดเต, เดฏเดฅเดพเดเตเดฐเดฎเด r.log, r.warn, r.error เดเดจเตเดจเดฟเดเตเดเดจเต 3 เดฐเตเดคเดฟเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด. Chrome (v8) เด เดฒเตเดฒเตเดเตเดเดฟเตฝ njs เดเตบเดธเตเตพ เดเตเดณเดฟเตฝ เดเดฟเดฒ เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเตเดเตพ เดกเตเดฌเดเต เดเตเดฏเตเดฏเดพเตป เดเดพเตป เดถเตเดฐเดฎเดฟเดเตเดเตเดจเตเดจเต, เดชเดเตเดทเต เดเดฒเตเดฒเดพเด เด เดตเดฟเดเต เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒ. เดเตเดกเต เดกเตเดฌเดเตเดเต เดเตเดฏเตเดฏเตเดฎเตเดชเตเตพ, เดซเดเดเตเดทเดฃเตฝ เดเตเดธเตเดฑเตเดฑเดฟเดเดเต, เดเดฐเดฟเดคเตเดฐเด เดเดคเตเดชเตเดฒเตเดฏเดพเดฃเต เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเดคเต:
docker-compose restart nginx
curl localhost:8080/
docker-compose logs --tail 10 nginx
เด เดคเตเดคเดฐเด เดจเตเดฑเตเดเดฃเดเตเดเดฟเดจเต เดธเตเดเตเดตเตปเดธเตเดเตพ เดเดฃเตเดเดพเดเดพเด.
เด เดตเดฏเตโเดเตเดเดพเดฏเดฟ เดธเดฌเตโเดเตเดตเดฑเดฟเดเดณเตเด เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเดณเตเด เดเดชเดฏเตเดเดฟเดเตเดเต เดเตเดกเต เดเดดเตเดคเตเดจเตเดจเดคเต เดเดฐเต เดชเดฟเดฃเดเตเด เดเตเดฐเตเดเตเดเดพเดฏเดฟ เดฎเดพเดฑเตเดจเตเดจเต. เดจเดฟเดเตเดเดณเตเดเต เดเตเดกเดฟเดจเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเดณเตเดเต เดเตเดฐเดฎเด เดเดฃเตเดเตเดชเดฟเดเดฟเดเตเดเดพเตป เดเดฟเดฒ เดธเดฎเดฏเดเตเดเดณเดฟเตฝ เดจเดฟเดเตเดเตพ เดตเตเดฏเดคเตเดฏเดธเตเดค IDE เดตเดฟเตปเดกเตเดเดณเดฟเตฝ เดเดเดพเตป เดคเตเดเดเตเดเตเด. เดเดคเต เดฌเตเดฆเตเดงเดฟเดฎเตเดเตเดเตเดณเตเดณ เดเดพเดฐเตเดฏเดฎเดฒเตเดฒ, เดชเดเตเดทเต เดเดฟเดฒเดชเตเดชเตเตพ เดเดคเต เดตเดณเดฐเต เด เดฐเตเดเดเดฎเดพเดฃเต.
ES6-เดจเต เดชเตเตผเดฃเตเดฃ เดชเดฟเดจเตเดคเตเดฃเดฏเดฟเดฒเตเดฒ.
เดฎเดฑเตเดฑเต เดเดฟเดฒ เดชเตเดฐเดพเดฏเตเดฎเดเตพ เดเดฃเตเดเดพเดเดพเด, เดชเดเตเดทเต เดฎเดฑเตเดฑเตเดจเตเดจเตเด เดเดพเตป เดจเตเดฐเดฟเดเตเดเดฟเดเตเดเดฟเดฒเตเดฒ. NJS เดเดชเดฏเตเดเดฟเดเตเดเต เดจเดฟเดเตเดเตพเดเตเดเต เดจเตเดเดฑเตเดฑเตเดตเต เด เดจเตเดญเดตเด เดเดฃเตเดเตเดเตเดเดฟเตฝ เดตเดฟเดตเดฐเดเตเดเตพ เดชเดเตเดเดฟเดเตเด.
เดคเตเดฐเตเดฎเดพเดจเด
Nginx-เตฝ เดตเดฟเดตเดฟเดง JavaScript เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเตเดเตพ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดพเตป เดจเดฟเดเตเดเดณเต เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจ เดญเดพเดฐเด เดเตเดฑเดเตเด เดเดฐเต เดเดชเตเดชเตบ เดธเตเดดเตเดธเต เดเดจเตเดฑเตผเดชเตเดฐเตเดฑเตเดฑเดฑเดพเดฃเต NJS. เด เดคเดฟเดจเตเดฑเต เดตเดฟเดเดธเดจ เดธเดฎเดฏเดคเตเดคเต, เดชเตเดฐเดเดเดจเดคเตเดคเดฟเตฝ เดตเดฒเดฟเดฏ เดถเตเดฐเดฆเตเดง เดเตเดฒเตเดคเตเดคเดฟ. เดคเตเตผเดเตเดเดฏเดพเดฏเตเด, เดเดจเดฟเดฏเตเด เดเดฐเตเดชเดพเดเต เดจเดทเตโเดเดฎเดพเดฏเดฟเดเตเดเตเดฃเตเดเต, เดชเดเตเดทเต เดเดฐเต เดเตเดฑเดฟเดฏ เดเตเดฎเดพเดฃเต เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเต, เด เดตเตผ เดธเดเตเดตเดฎเดพเดฏเดฟ เดชเตเดคเดฟเดฏ เดธเดตเดฟเดถเตเดทเดคเดเตพ เดเตเตผเดเตเดเตเดเดฏเตเด เดฌเดเตเดเตพ เดชเดฐเดฟเดนเดฐเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต. เดเดฐเต เดฆเดฟเดตเดธเด NJS เดจเดฟเดเตเดเดณเต เดฌเดพเดนเตเดฏ เดฎเตเดกเตเดฏเตเดณเตเดเตพ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเดพเตป เด เดจเตเดตเดฆเดฟเดเตเดเตเดฎเตเดจเตเดจเต เดเดพเตป เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเต, เดเดคเต Nginx เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเต เดเดคเดพเดฃเตเดเต เดชเดฐเดฟเดงเดฟเดฏเดฟเดฒเตเดฒเดพเดคเตเดคเดคเดพเดเตเดเตเด. เดเดจเตเดจเดพเตฝ NGINX เดชเตเดฒเดธเต เดเดฃเตเดเต, เดฎเดฟเดเตเดเดตเดพเดฑเตเด เดธเดตเดฟเดถเตเดทเดคเดเดณเตเดจเตเดจเตเด เดเดฃเตเดเดพเดเดฟเดฒเตเดฒ!
เด เดตเดฒเดเดฌเด: www.habr.com