mirror of
https://github.com/fastapi/fastapi.git
synced 2026-01-30 08:51:16 -05:00
236 lines
18 KiB
Markdown
236 lines
18 KiB
Markdown
# HTTPS ã«ã€ã㊠{ #about-https }
|
||
|
||
HTTPSã¯åã«ãæå¹ãããç¡å¹ããã§æ±ºãŸããã®ã ãšæããã¡ã§ãã
|
||
|
||
ãããããããããã¯ããã«è€éã§ãã
|
||
|
||
/// tip | è±ç¥è
|
||
|
||
ããæ¥ãã§ããããHTTPSã®ä»çµã¿ã«ã€ããŠæ°ã«ããªãã®ã§ããã°ã次ã®ã»ã¯ã·ã§ã³ã«é²ã¿ãããŸããŸãªãã¯ããã¯ã䜿ã£ãŠãã¹ãŠãã»ããã¢ããããã¹ãããã»ãã€ã»ã¹ãããã®æé ãã芧ãã ããã
|
||
|
||
///
|
||
|
||
å©çšè
ã®èŠç¹ãã **HTTPS ã®åºæ¬ãåŠã¶**ã«åœãã£ãŠã¯ã次ã®ãªãœãŒã¹ããªã¹ã¹ã¡ããŸã: <a href="https://howhttps.works/" class="external-link" target="_blank">https://howhttps.works/</a>.
|
||
|
||
ããŠã**éçºè
ã®èŠç¹**ãããHTTPSã«ã€ããŠèããéã«å¿µé ã«çœ®ãã¹ãããšãããã€ãã¿ãŠãããŸãããïŒ
|
||
|
||
* HTTPSã®å Žåã**ãµãŒã**ã¯**第äžè
**ã«ãã£ãŠçæããã**ãèšŒææžããæã€**å¿
èŠããããŸãã
|
||
* ãããã®èšŒææžã¯ãçæãããããã®ã§ã¯ãªããå®éã«ã¯ç¬¬äžè
ãã**ååŸ**ããããã®ã§ãã
|
||
* èšŒææžã«ã¯**æå¹æé**ããããŸãã
|
||
* ã€ãŸãããã倱å¹ããŸãã
|
||
* ãã®ãã**æŽæ°**ããã第äžè
ãã**å床ååŸ**ããå¿
èŠããããŸãã
|
||
* æ¥ç¶ã®æå·åã¯**TCPã¬ãã«**ã§è¡ãããŸãã
|
||
* ããã¯**HTTPã®1ã€äž**ã®ã¬ã€ã€ãŒã§ãã
|
||
* ã€ãŸãã**èšŒææžãšæå·å**ã®åŠçã¯ã**HTTPã®å**ã«è¡ãããŸãã
|
||
* **TCPã¯ããã¡ã€ã³ãã«ã€ããŠç¥ããŸãã**ãIPã¢ãã¬ã¹ã«ã€ããŠã®ã¿ç¥ã£ãŠããŸãã
|
||
* èŠæ±ããã**ç¹å®ã®ãã¡ã€ã³**ã«é¢ããæ
å ±ã¯ã**HTTPããŒã¿**ã«å
¥ããŸãã
|
||
* **HTTPSèšŒææž**ã¯ã**ç¹å®ã®ãã¡ã€ã³**ãã蚌æãããŸããããããã³ã«ãšæå·åã¯TCPã¬ãã«ã§è¡ãããã©ã®ãã¡ã€ã³ãæ±ãããŠãããã**ç¥ãå**ã«è¡ãããŸãã
|
||
* **ããã©ã«ãã§ã¯**ã**IPã¢ãã¬ã¹ããšã«1ã€ã®HTTPSèšŒææž**ããæãŠãªãããšã«ãªããŸãã
|
||
* ããã¯ããµãŒããŒã®èŠæš¡ãã¢ããªã±ãŒã·ã§ã³ã®èŠæš¡ã«å¯ããŸããã
|
||
* ããããããã«ã¯**解決ç**ããããŸãã
|
||
* **TLS**ãããã³ã«(HTTPã®åã«ãTCPã¬ãã«ã§æå·åãåŠçãããã®)ã«ã¯ã**<a href="https://en.wikipedia.org/wiki/Server_Name_Indication" class="external-link" target="_blank"><abbr title="Server Name Indication">SNI</abbr></a>**ãšåŒã°ãã**æ¡åŒµ**ããããŸãã
|
||
* ãã®SNIæ¡åŒµæ©èœã«ããã1ã€ã®ãµãŒããŒïŒ**åäžã®IPã¢ãã¬ã¹**ãæã€ïŒã**è€æ°ã®HTTPSèšŒææž**ãæã¡ã**è€æ°ã®HTTPSãã¡ã€ã³/ã¢ããªã±ãŒã·ã§ã³**ã«ãµãŒãã¹ãæäŸã§ããããã«ãªããŸãã
|
||
* ãããæ©èœããããã«ã¯ã**ãããªãã¯IPã¢ãã¬ã¹**ã§ãªãã¹ã³ããŠããããµãŒããŒäžã§åäœããŠãã**åäžã®**ã³ã³ããŒãã³ã(ããã°ã©ã )ãããµãŒããŒå
ã®**ãã¹ãŠã®HTTPSèšŒææž**ãæã£ãŠããå¿
èŠããããŸãã
|
||
* ã»ãã¥ã¢ãªæ¥ç¶ãååŸãã**åŸ**ã§ããéä¿¡ãããã³ã«ã¯**HTTPã®ãŸãŸ**ã§ãã
|
||
* ã³ã³ãã³ãã¯**HTTPãããã³ã«**ã§éä¿¡ãããŠããã«ããããããã**æå·å**ãããŠããŸãã
|
||
|
||
ãµãŒããŒïŒãã·ã³ããã¹ããªã©ïŒäžã§**1ã€ã®ããã°ã©ã /HTTPãµãŒããŒ**ãå®è¡ããã**HTTPSã«é¢ããå
šãŠã®ããš**ã管çããã®ãäžè¬çã§ãã**æå·åããã HTTPS ãªã¯ãšã¹ã** ãåä¿¡ãã**埩å·åããã HTTP ãªã¯ãšã¹ã** ãåããµãŒããŒã§å®è¡ãããŠããå®éã® HTTP ã¢ããªã±ãŒã·ã§ã³ïŒãã®å Žå㯠**FastAPI** ã¢ããªã±ãŒã·ã§ã³ïŒã«éä¿¡ããã¢ããªã±ãŒã·ã§ã³ãã **HTTP ã¬ã¹ãã³ã¹** ãåãåããé©å㪠**HTTPS èšŒææž** ã䜿çšã㊠**æå·å** ãããããŠ**HTTPS** ã䜿çšããŠã¯ã©ã€ã¢ã³ãã«éãè¿ããŸãããã®ãµãŒããŒã¯ãã°ãã° **<a href="https://en.wikipedia.org/wiki/TLS_termination_proxy" class="external-link" target="_blank">TLS Termination Proxy</a>**ãšåŒã°ããŸãã
|
||
|
||
TLS Termination ProxyãšããŠäœ¿ãããªãã·ã§ã³ã«ã¯ã以äžã®ãããªãã®ããããŸãïŒ
|
||
|
||
* TraefikïŒèšŒææžã®æŽæ°ã察å¿ïŒ
|
||
* Caddy (èšŒææžã®æŽæ°ã察å¿)
|
||
* Nginx
|
||
* HAProxy
|
||
|
||
|
||
## Let's Encrypt { #lets-encrypt }
|
||
|
||
Let's Encrypt以åã¯ããããã®**HTTPSèšŒææž**ã¯ä¿¡é Œã§ãã第äžè
ã«ãã£ãŠè²©å£²ãããŠããŸããã
|
||
|
||
ãããã®èšŒææžãååŸããããã®æç¶ãã¯é¢åã§ãããªãã®æžé¡ãå¿
èŠãšããèšŒææžã¯ããªãé«äŸ¡ãªãã®ã§ããã
|
||
|
||
ããããã®åŸã**<a href="https://letsencrypt.org/" class="external-link" target="_blank">Let's Encrypt</a>** ãäœãããŸããã
|
||
|
||
ããã¯Linux Foundationã®ãããžã§ã¯ãããçãŸãããã®ã§ãã èªååãããæ¹æ³ã§ã**HTTPSèšŒææžãç¡æã§**æäŸããŸãããããã®èšŒææžã¯ããã¹ãŠã®æšæºçãªæå·åã»ãã¥ãªãã£ã䜿çšãããŸãçåœïŒçŽ3ã¶æïŒã§ããããããã£ã寿åœã®çãã«ãã£ãŠã**ã»ãã¥ãªãã£ã¯å®éã«åªããŠããŸã**ã
|
||
|
||
ãã¡ã€ã³ã¯å®å
šã«æ€èšŒãããèšŒææžã¯èªåçã«çæãããŸãããŸããèšŒææžã®æŽæ°ãèªååãããŸãã
|
||
|
||
ãã®ã¢ã€ãã¢ã¯ããããã®èšŒææžã®ååŸãšæŽæ°ãèªååããããšã§ã**å®å
šãªHTTPSããç¡æã§ãæ°žé ã«**å©çšã§ããããã«ããããšã§ãã
|
||
|
||
## éçºè
ã®ããã® HTTPS { #https-for-developers }
|
||
|
||
ããã§ã¯ãHTTPS APIãã©ã®ããã«èŠãããã®äŸããäž»ã«éçºè
ã«ãšã£ãŠéèŠãªã¢ã€ãã¢ã«æ³šæãæããªãããã¹ãããã»ãã€ã»ã¹ãããã§èª¬æããŸãã
|
||
|
||
### ãã¡ã€ã³å { #domain-name }
|
||
|
||
ã¹ãããã®åãã¯ã**ãã¡ã€ã³å**ã**ååŸããããš**ããå§ãŸãã§ãããããã®åŸãDNSãµãŒããŒïŒããããåãã¯ã©ãŠããããã€ããŒïŒã«èšå®ããŸãã
|
||
|
||
ããããã¯ã©ãŠããµãŒããŒïŒä»®æ³ãã·ã³ïŒãããã«é¡ãããã®ãæã«å
¥ãã<abbr title="That doesn't change â å€ãããªã">fixed</abbr> **ãããªãã¯IPã¢ãã¬ã¹**ãæã€ããšã«ãªãã§ãããã
|
||
|
||
DNSãµãŒããŒã§ã¯ã**ååŸãããã¡ã€ã³**ãããªãã®ãµãŒããŒã®ãããªãã¯**IPã¢ãã¬ã¹**ã«åããã¬ã³ãŒãïŒã`A record`ãïŒãèšå®ããŸãã
|
||
|
||
ããã¯ãããããæåã®1åã ãããããã¹ãŠãã»ããã¢ãããããšãã«è¡ãã§ãããã
|
||
|
||
/// tip | è±ç¥è
|
||
|
||
ãã¡ã€ã³åã®è©±ã¯HTTPSã«é¢ãã話ã®ã¯ããåã«ãããŸããããã¹ãŠããã¡ã€ã³ãšIPã¢ãã¬ã¹ã«äŸåãããããããã§èšåãã䟡å€ããããŸãã
|
||
|
||
///
|
||
|
||
### DNS { #dns }
|
||
|
||
ã§ã¯ãå®éã®HTTPSã®éšåã«æ³šç®ããŠã¿ããã
|
||
|
||
ãŸãããã©ãŠã¶ã¯**DNSãµãŒããŒ**ã«**ãã¡ã€ã³ã«å¯ŸããIP**ãäœã§ãããã確èªããŸããä»åã¯ã`someapp.example.com`ãšããŸãã
|
||
|
||
DNSãµãŒããŒã¯ããã©ãŠã¶ã«ç¹å®ã®**IPã¢ãã¬ã¹**ã䜿çšããããã«æç€ºããŸãããã®IPã¢ãã¬ã¹ã¯ãDNSãµãŒããŒã§èšå®ãããããªãã®ãµãŒããŒã䜿çšãããããªãã¯IPã¢ãã¬ã¹ã«ãªããŸãã
|
||
|
||
<img src="/img/deployment/https/https01.drawio.svg">
|
||
|
||
### TLS Handshake ã®éå§ { #tls-handshake-start }
|
||
|
||
ãã©ãŠã¶ã¯IPã¢ãã¬ã¹ãš**ããŒã443**ïŒHTTPSããŒãïŒã§éä¿¡ããŸãã
|
||
|
||
éä¿¡ã®æåã®éšåã¯ãã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®æ¥ç¶ã確ç«ãã䜿çšããæå·éµãªã©ã決ããã ãã§ãã
|
||
|
||
<img src="/img/deployment/https/https02.drawio.svg">
|
||
|
||
TLSæ¥ç¶ã確ç«ããããã®ã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®ãã®ãããšãã¯ã**TLSãã³ãã·ã§ã€ã¯**ãšåŒã°ããŸãã
|
||
|
||
### SNIæ¡åŒµæ©èœä»ãã®TLS { #tls-with-sni-extension }
|
||
|
||
ãµãŒããŒå
ã®**1ã€ã®ããã»ã¹**ã ãããç¹å® ã®**IPã¢ãã¬ã¹**ã®ç¹å®ã®**ããŒã** ã§åŸ
ã¡åããããšãã§ããŸãã
|
||
|
||
åãIPã¢ãã¬ã¹ã®ä»ã®ããŒãã§ä»ã®ããã»ã¹ããªãã¹ã³ããŠããå¯èœæ§ããããŸãããIPã¢ãã¬ã¹ãšããŒãã®çµã¿åããããšã«1ã€ã ãã§ãã
|
||
|
||
TLSïŒHTTPSïŒã¯ããã©ã«ãã§`443`ãšããç¹å®ã®ããŒãã䜿çšãããã€ãŸãããããå¿
èŠãªããŒãã§ãã
|
||
|
||
ãã®ããŒãããªã¯ãšã¹ãã§ããã®ã¯1ã€ã®ããã»ã¹ã ããªã®ã§ããããå®è¡ããããã»ã¹ã¯**TLS Termination Proxy**ãšãªããŸãã
|
||
|
||
TLS Termination Proxyã¯ã1ã€ä»¥äžã®**TLSèšŒææž**ïŒHTTPSèšŒææžïŒã«ã¢ã¯ã»ã¹ã§ããŸãã
|
||
|
||
åè¿°ãã**SNIæ¡åŒµæ©èœ**ã䜿çšããŠãTLS Termination Proxy ã¯ãå©çšå¯èœãªTLS (HTTPS)èšŒææžã®ã©ããæ¥ç¶å
ãšããŠäœ¿çšãã¹ããããã§ãã¯ããã¯ã©ã€ã¢ã³ããæåŸ
ãããã¡ã€ã³ã«äžèŽãããã®ã䜿çšããŸãã
|
||
|
||
ä»åã¯ã`someapp.example.com`ã®èšŒææžã䜿ãããšã«ãªããŸãã
|
||
|
||
<img src="/img/deployment/https/https03.drawio.svg">
|
||
|
||
ã¯ã©ã€ã¢ã³ãã¯ããã®TLSèšŒææžãçæãããšã³ãã£ãã£ïŒãã®å Žåã¯Let's Encryptã§ãããããã«ã€ããŠã¯åŸè¿°ããŸãïŒããã§ã«**ä¿¡é Œ**ããŠããããããã®èšŒææžãæå¹ã§ããããšã**æ€èšŒ**ããããšãã§ããŸãã
|
||
|
||
次ã«èšŒææžã䜿çšããŠãã¯ã©ã€ã¢ã³ããšTLS Termination Proxy ã¯ã **TCPéä¿¡**ã®æ®ãã**ã©ã®ããã«æå·åããããæ±ºå®**ããŸããããã§**TLSãã³ãã·ã§ã€ã¯**ã®éšåãå®äºããŸãã
|
||
|
||
ãã®åŸãã¯ã©ã€ã¢ã³ããšãµãŒããŒã¯**æå·åãããTCPæ¥ç¶**ãæã¡ãŸãããããŠããã®æ¥ç¶ã䜿ã£ãŠå®éã®**HTTPéä¿¡**ãéå§ããããšãã§ããŸãã
|
||
|
||
ããã**HTTPS**ã§ãããçŽç²ãªïŒæå·åãããŠããªãïŒTCPæ¥ç¶ã§ã¯ãªãã**ã»ãã¥ã¢ãªTLSæ¥ç¶**ã®äžã«**HTTP**ãããã ãã§ãã
|
||
|
||
/// tip | è±ç¥è
|
||
|
||
éä¿¡ã®æå·åã¯ãHTTPã¬ãã«ã§ã¯ãªãã**TCPã¬ãã«**ã§è¡ãããããšã«æ³šæããŠãã ããã
|
||
|
||
///
|
||
|
||
### HTTPS ãªã¯ãšã¹ã { #https-request }
|
||
|
||
ããã§ã¯ã©ã€ã¢ã³ããšãµãŒããŒïŒå
·äœçã«ã¯ãã©ãŠã¶ãšTLS Termination ProxyïŒã¯**æå·åãããTCPæ¥ç¶**ãæã€ããšã«ãªãã**HTTPéä¿¡**ãéå§ããããšãã§ããŸãã
|
||
|
||
ããã§ãã¯ã©ã€ã¢ã³ãã¯**HTTPSãªã¯ãšã¹ã**ãéä¿¡ããŸããããã¯ãæå·åãããTLSã³ãã¯ã·ã§ã³ãä»ããåãªãHTTPãªã¯ãšã¹ãã§ãã
|
||
|
||
<img src="/img/deployment/https/https04.drawio.svg">
|
||
|
||
### ãªã¯ãšã¹ãã®åŸ©å·å { #decrypt-the-request }
|
||
|
||
TLS Termination Proxy ã¯ãåæãåããŠããæå·åã䜿çšããŠã**ãªã¯ãšã¹ãã埩å·å**ãã**ãã¬ãŒã³ (埩å·åããã) HTTP ãªã¯ãšã¹ã** ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŠããããã»ã¹ (äŸãã°ãFastAPI ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŠãã Uvicorn ãæã€ããã»ã¹) ã«éä¿¡ããŸãã
|
||
|
||
<img src="/img/deployment/https/https05.drawio.svg">
|
||
|
||
### HTTP ã¬ã¹ãã³ã¹ { #http-response }
|
||
|
||
ã¢ããªã±ãŒã·ã§ã³ã¯ãªã¯ãšã¹ããåŠçãã**ãã¬ãŒã³(æå·åãããŠããªã)HTTPã¬ã¹ãã³ã¹** ãTLS Termination Proxyã«éä¿¡ããŸãã
|
||
|
||
<img src="/img/deployment/https/https06.drawio.svg">
|
||
|
||
### HTTPS ã¬ã¹ãã³ã¹ { #https-response }
|
||
|
||
TLS Termination Proxyã¯æ¬¡ã«ãäºåã«åæãåããŠããæå·(`someapp.example.com`ã®èšŒææžããå§ãŸã)ã䜿ã£ãŠ**ã¬ã¹ãã³ã¹ãæå·åã**ããã©ãŠã¶ã«éãè¿ãã
|
||
|
||
ãã®åŸãã©ãŠã¶ã§ã¯ãã¬ã¹ãã³ã¹ãæå¹ã§æ£ããæå·ããŒã§æå·åãããŠããããšãªã©ãæ€èšŒããŸãããããŠããã©ãŠã¶ã¯ã¬ã¹ãã³ã¹ã**埩å·å**ããŠåŠçããŸãã
|
||
|
||
<img src="/img/deployment/https/https07.drawio.svg">
|
||
|
||
ã¯ã©ã€ã¢ã³ãïŒãã©ãŠã¶ïŒã¯ãã¬ã¹ãã³ã¹ãæ£ãããµãŒããŒããæ¥ãããšãç¥ãããšãã§ããŸãã ãªããªãããã®ãµãŒããŒã¯ã以åã«**HTTPSèšŒææž**ã䜿ã£ãŠåæããæå·ã䜿ã£ãŠããããã§ãã
|
||
|
||
### è€æ°ã®ã¢ããªã±ãŒã·ã§ã³ { #multiple-applications }
|
||
|
||
åããµãŒããŒïŒãŸãã¯è€æ°ã®ãµãŒããŒïŒã«ãäŸãã°ä»ã®APIããã°ã©ã ãããŒã¿ããŒã¹ãªã©ã**è€æ°ã®ã¢ããªã±ãŒã·ã§ã³**ãååšããå¯èœæ§ããããŸãã
|
||
|
||
ç¹å®ã®IPãšããŒãïŒãã®äŸã§ã¯TLS Termination ProxyïŒãæ±ãããšãã§ããã®ã¯1ã€ã®ããã»ã¹ã ãã§ãããä»ã®ã¢ããªã±ãŒã·ã§ã³/ããã»ã¹ããåã**ãããªãã¯IPãšããŒã**ã®çµã¿åããã䜿çšããããšããªãéãããµãŒããŒäžã§å®è¡ããããšãã§ããŸãã
|
||
|
||
<img src="/img/deployment/https/https08.drawio.svg">
|
||
|
||
ããããã°ãTLS Termination Proxy ã¯ã**è€æ°ã®ãã¡ã€ã³**ãè€æ°ã®ã¢ããªã±ãŒã·ã§ã³ã®HTTPSãšèšŒææžãåŠçããããããã®ã±ãŒã¹ã§é©åãªã¢ããªã±ãŒã·ã§ã³ã«ãªã¯ãšã¹ããéä¿¡ããããšãã§ããŸãã
|
||
|
||
### èšŒææžã®æŽæ° { #certificate-renewal }
|
||
|
||
å°æ¥ã®ããæç¹ã§ãåèšŒææžã¯ïŒååŸåŸçŽ3ã¶æã§ïŒ**倱å¹**ããŸãã
|
||
|
||
ãã®åŸãLet's Encryptãšéä¿¡ããå¥ã®ããã°ã©ã ïŒå¥ã®ããã°ã©ã ã§ããå Žåãããã°ãåãTLS Termination Proxyã§ããå ŽåãããïŒã«ãã£ãŠãèšŒææžãæŽæ°ããŸãã
|
||
|
||
<img src="/img/deployment/https/https.drawio.svg">
|
||
|
||
**TLSèšŒææž**ã¯ãIPã¢ãã¬ã¹ã§ã¯ãªãã**ãã¡ã€ã³åã«é¢é£ä»ããããŠ**ããŸãã
|
||
|
||
ãããã£ãŠãèšŒææžãæŽæ°ããããã«ãæŽæ°ããã°ã©ã ã¯ãèªèšŒå±ïŒLet's EncryptïŒã«å¯ŸããŠã**ãã®ãã¡ã€ã³ãæ¬åœã«ãææããã管çããŠãã**ããšã**蚌æ**ããå¿
èŠããããŸãã
|
||
|
||
ãã®ããã«ããŸãããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã®ããŒãºã«å¯Ÿå¿ããããã«ãããã€ãã®æ¹æ³ããããŸãããã䜿ãããæ¹æ³ãšããŠã¯:
|
||
|
||
* **ããã€ãã®DNSã¬ã³ãŒããä¿®æ£ããŸãã**
|
||
* ãããããããã«ã¯ãæŽæ°ããã°ã©ã ã¯DNSãããã€ããŒã®APIããµããŒãããå¿
èŠããããŸãããããã£ãŠã䜿çšããŠããDNSãããã€ããŒã«ãã£ãŠã¯ããã®ãªãã·ã§ã³ã䜿ããå Žåãããã°ã䜿ããªãå ŽåããããŸãã
|
||
* ãã¡ã€ã³ã«é¢é£ä»ãããããããªãã¯IPã¢ãã¬ã¹äžã§ãïŒå°ãªããšãèšŒææžååŸããã»ã¹äžã¯ïŒ**ãµãŒããŒ**ãšããŠå®è¡ããŸãã
|
||
* äžã§è¿°ã¹ãããã«ãç¹å®ã®IPãšããŒãã§ãªãã¹ã³ã§ããããã»ã¹ã¯1ã€ã ãã§ãã
|
||
* ããã¯ãåãTLS Termination ProxyãèšŒææžã®æŽæ°åŠçãè¡ãå Žåã«éåžžã«äŸ¿å©ãªçç±ã®1ã€ã§ãã
|
||
* ããã§ãªããã°ãTLS Termination Proxyãäžæçã«åæ¢ããèšŒææžãååŸããããã«æŽæ°ããã°ã©ã ãèµ·åããTLS Termination Proxyã§èšŒææžãèšå®ããTLS Termination Proxyãåèµ·åããªããã°ãªããªããããããŸãããTLS Termination Proxyã忢ããŠããéã¯ã¢ããªãå©çšã§ããªããªããããããã¯çæ³çã§ã¯ãããŸããã
|
||
|
||
|
||
ã¢ããªãæäŸããªãããã®ãããªæŽæ°åŠçãè¡ãããšã¯ãã¢ããªã±ãŒã·ã§ã³ã»ãµãŒããŒïŒUvicornãªã©ïŒã§TLSèšŒææžãçŽæ¥äœ¿çšããã®ã§ã¯ãªããTLS Termination Proxyã䜿çšããŠ**HTTPSãåŠçããå¥ã®ã·ã¹ãã **ãçšæããããªãäž»ãªçç±ã®1ã€ã§ãã
|
||
|
||
## ãããã·è»¢éããã㌠{ #proxy-forwarded-headers }
|
||
|
||
ãããã·ã䜿ã£ãŠHTTPSãåŠçããå Žåã**ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒ**ïŒããšãã°FastAPI CLIçµç±ã®UvicornïŒã¯HTTPSåŠçã«ã€ããŠäœãç¥ããã**TLS Termination Proxy**ãšã¯ãã¬ãŒã³ãªHTTPã§éä¿¡ããŸãã
|
||
|
||
ãã®**ãããã·**ã¯éåžžããªã¯ãšã¹ãã**ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒ**ã«è»¢éããåã«ããã®å Žã§ããã€ãã®HTTPããããŒãèšå®ãããªã¯ãšã¹ãããããã·ã«ãã£ãŠ**転é**ãããŠããããšãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã«ç¥ãããŸãã
|
||
|
||
/// note | æè¡è©³çް
|
||
|
||
ãããã·ããããŒã¯æ¬¡ã®ãšããã§ãïŒ
|
||
|
||
* <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For" class="external-link" target="_blank">X-Forwarded-For</a>
|
||
* <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto" class="external-link" target="_blank">X-Forwarded-Proto</a>
|
||
* <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host" class="external-link" target="_blank">X-Forwarded-Host</a>
|
||
|
||
///
|
||
|
||
ããã§ãã**ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒ**ã¯ä¿¡é Œã§ãã**ãããã·**ã®èåŸã«ããããšãç¥ããªããããããã©ã«ãã§ã¯ãããã®ããããŒãä¿¡é ŒããŸããã
|
||
|
||
ãããã**ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒ**ã**ãããã·**ããéä¿¡ããã*forwarded*ããããŒãä¿¡é Œããããã«èšå®ã§ããŸããFastAPI CLIã䜿çšããŠããå Žåã¯ã*CLI Option* `--forwarded-allow-ips` ã䜿ã£ãŠãã©ã®IPããã®*forwarded*ããããŒãä¿¡é Œãã¹ãããæå®ã§ããŸãã
|
||
|
||
ããšãã°ã**ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒ**ãä¿¡é Œã§ãã**ãããã·**ããã®éä¿¡ã®ã¿ãåãåã£ãŠããå Žåã`--forwarded-allow-ips="*"` ã«èšå®ããŠãåä¿¡ãããã¹ãŠã®IPãä¿¡é Œããããã«ã§ããŸããåãåããªã¯ãšã¹ãã¯ã**ãããã·**ã䜿çšããIPããã®ãã®ã ãã«ãªãããã§ãã
|
||
|
||
ããããããšã§ãã¢ããªã±ãŒã·ã§ã³ã¯ãHTTPSã䜿çšããŠãããã©ããããã¡ã€ã³ãªã©ãèªèº«ã®ãããªãã¯URLãäœã§ããããææ¡ã§ããããã«ãªããŸãã
|
||
|
||
ããã¯ãããšãã°ãªãã€ã¬ã¯ããé©åã«åŠçããã®ã«äŸ¿å©ã§ãã
|
||
|
||
/// tip | è±ç¥è
|
||
|
||
ããã«ã€ããŠã¯ã[Behind a Proxy - Enable Proxy Forwarded Headers](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers){.internal-link target=_blank} ã®ããã¥ã¡ã³ãã§è©³ããåŠã¹ãŸãã
|
||
|
||
///
|
||
|
||
## ãŸãšã { #recap }
|
||
|
||
**HTTPS**ãæã€ããšã¯éåžžã«éèŠã§ãããã»ãšãã©ã®å Žåãããªã**ã¯ãªãã£ã«ã«**ã§ããéçºè
ãšã㊠HTTPS ã«é¢ããåŽåã®ã»ãšãã©ã¯ããããã®**æŠå¿µãšãã®ä»çµã¿ãçè§£ãã**ããšã§ãã
|
||
|
||
ããããã²ãšãã³**éçºè
åãHTTPS**ã®åºæ¬çãªæ
å ±ãç¥ãã°ãç°¡åãªæ¹æ³ã§ãã¹ãŠã管çããããã«ãããŸããŸãªããŒã«ãçµã¿åãããŠèšå®ããããšãã§ããŸãã
|
||
|
||
次ã®ç« ã®ããã€ãã§ã¯ã**FastAPI** ã¢ããªã±ãŒã·ã§ã³ã®ããã« **HTTPS** ãã»ããã¢ããããæ¹æ³ã«ã€ããŠãããã€ãã®å
·äœäŸã玹ä»ããŸããð
|