å®éã«ã¯ãIISãä»ç€Ÿã®WebãµãŒããŒã®ãããã·ãšããŠäœ¿çšããŠããŸãã ãããã©ã®ããã«å®è£ ãããã©ã®ãããªå°é£ã«çŽé¢ãããã説æããŸãã
åé¡ã®å£°æ
äŸãšããŠãYouTrackãµãŒããŒãåæããŸãããã èŠèŠããsrv-youtrack-01.local.domainã§è¡šããã瀟å ã®WebãµãŒããŒäžã«ãããŸãã ã¿ã¹ã¯ã¯ãçŸããååyt.company.ruã§ã€ã³ã¿ãŒãããããã¢ã¯ã»ã¹ã§ããããã«ããããšã§ãã ãã®å Žåãhttpsã䜿çšããå¿ èŠããããŸãã
å®è£
éå§ããã«ã¯ã URL Rewriteã³ã³ããŒãã³ããã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã ããã¯ãWebãã©ãããã©ãŒã ã€ã³ã¹ããŒã©ãŒã䜿çšããŠããŸãã¯æåã§å®è¡ã§ããŸãã ã€ã³ã¹ããŒã«ãããšãIISãããŒãžã£ãŒã«æ°ããã·ã§ãŒãã«ããã衚瀺ãããŸã
URLã®æžãæããã

ãã®ããŒã«ã䜿çšãããšããéãããã·ãã¢ãã¬ã¹æžãæãã«ãŒã«ãäœæã§ããŸãã

ã«ãŒã«ãäœæãããšãããããã·ãè¡ããããµãŒããŒURLïŒhttpïŒ//ãã¬ãã£ãã¯ã¹ãªã-IISã¯èªåçã«è¿œå ããŸãïŒãæå®ããå¿ èŠããããŸãã ãã®çµæãç·šéå¯èœãªã«ãŒã«ãååŸããŸãã ãã¹ãŠã®ãªã¯ãšã¹ãã«é©çšãããããã§ã¯ãªããã«ã¹ã¿ãã€ãºå¯èœãªåºæºã«é©åãããªã¯ãšã¹ãã«ã®ã¿é©çšãããŸãã ãŸããURLããã³ãã¬ãŒãã«æºæ ããŠãããã©ããããã§ãã¯ããããã®åŸãä»ã®åºæºã«å¯Ÿãããã§ãã¯ã䜿çšãããŸãã

ããã«2ã€ã®æ¹æ³ãããããšãèšããªããã°ãªããŸãããæåã®æ¹æ³ã¯ãåãIISãµã€ãäžã®ããŸããŸãªãªãœãŒã¹ã«å¯ŸããŠããŸããŸãªURLãã¿ãŒã³ãæã€ã«ãŒã«ã®ã»ãããäœæããããšã§ãã 2ã€ç®ã¯ããããã·ããããªãœãŒã¹ããšã«ãµã€ããäœæããããããã«1ã€ã®ã«ãŒã«ãäœæããããšã§ãã æåã®ãã¹ããããžã§ãã€ã§ããããšãç解ããŠããã«ãããããããç§ã¯2çªç®ã®ãã¹ãéžæããŸãã-ããã»ã©çŸããã¯ãããŸãããã1ã€ã®ãµã€ãã«ééã£ãæ£èŠè¡šçŸãæžããŠãã¹ãŠã®ã«ãŒãã£ã³ã°ãå£ãå±éºã¯ãããŸãã ãããã£ãŠãã©ãã«ã§ãããURLãã¿ãŒã³ã®ããã©ã«ãã¯ãïŒã*ïŒãã§ãã
ããã§ãããŒã80ãš443ã®ãã€ã³ããŒãšãã¹ãåã®å¿ é 衚瀺ã䜿çšããŠãµã€ãyt.company.ruãäœæããIISãã¢ã¯ã»ã¹ããŠãããµã€ããèªèã§ããããã«ããŸãã 443ã®èšŒææžã®ååŸãšã€ã³ã¹ããŒã«ã«ã€ããŠã¯èšåããŸããã httpsã䜿çšããããã«ãµãŒãã¹èªäœãæ§æããå¿ èŠããªããšããäºå®ã«ã®ã¿æ³šç®ããŸãããããã¯ãŒã¯å éšããæå·åãã人ã¯ããŸãããå€éšãªã¯ãšã¹ãã¯sslãä»ããŠãšããžãµãŒããŒã«æ¥ç¶ãããŸãã
å¿ é èŠä»¶ãhttpsã䜿çšããããšã§ããéããããŒã443ã«çä¿¡ããèŠæ±ã®ã¿ããããã·ããåçŽãªæ¡ä»¶ãäœæããŸãã äœæãããšãå¯èœãªãªãã·ã§ã³ã®ããããããŠã³ãªã¹ãã衚瀺ãããŸãã


ããŠã yt.company.ruããã®ãã¹ãŠã®ãªã¯ãšã¹ãã¯ããŠãŒã¶ãŒã«å¯ŸããŠééçãªèŠèŠããååsrv-youtrack-01.local.domainã§å éšãµãŒããŒã«ãããã·ãããŸãã
ãã ãããã¹ãŠã®yt.company.ruãªã¯ãšã¹ã㯠403ãšã©ãŒã§åæãããŸãããããã¯ããŸãè¯ããããŸããã ãã®åé¡ã解決ããã«ã¯ããªãã€ã¬ã¯ãä»ãã®index.htmlãäœæãããããã¢ã¯ã·ã§ã³ããã£ãŒã«ãã§ç®çã®URLãžã®æ°žç¶çãªãªãã€ã¬ã¯ããéžæããå¥ã®URLæžãæãã«ãŒã«ãäœæããŸãã

ãµã€ãã®ã«ãŒã«ã¯é çªã«é©çšããããããæåã«æ¡ä»¶ä»ãã®ã«ãŒã«ãé 眮ãã次ã«æ¡ä»¶ãªãã®ã«ãŒã«ãé 眮ããå¿ èŠããããŸãã åæã«ã2çªç®ã®ã«ãŒã«ã¯äŸå€ãªããã¹ãŠã®URLã«é©çšããããããæåã®ã«ãŒã«ã§ã¯ããåŸç¶ã®ã«ãŒã«ã®åŠçãåæ¢ããããã§ãã¯ããã¯ã¹ããªã³ã«ããïŒãã§ãã¯ãããŸãŸã«ããïŒå¿ èŠããããŸãã

ã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ãæäœãããšããµã€ãã®ã«ãŒãã«web.configãäœæãããäœæããããã¹ãŠã®ã«ãŒã«ãå«ãŸããŸãã ãããã£ãŠãå¥ã®ãµã€ãããããã·ããå Žåããããã®æäœãç¹°ãè¿ãå¿ èŠã¯ãããŸãããweb.configãã³ããŒããŠãã®äžã®å¿ èŠãªURLãå€æŽããããã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠã³ããŒåŸã«ã«ãŒã«ãå€æŽã§ããŸãã ããã«ãã€ã³ã¿ãŒãã§ã€ã¹ããŸã£ãã䜿çšããããšã¯ã§ããŸãããã奜ããªäººã«ããã«æžã蟌ãããšãã§ããŸãã
èœãšãç©Ž
[ã¢ãžã£ã€ã«ããŒã]ã¿ãã«ç§»åãããšãYouTrackã¯yt.company.ru/rest/agile/Overview-0/sprint/Iteration+24ãšãã圢åŒã®URLãçæããŸãã 次ã«ãã¹ãââãªã³ããåãæ¿ãããšãyt.company.ru/rest/agile/Overview-0/sprint/Iteration%252023?q= ã ãããã®URLã«åãæ¿ãããšãIISã¯404ãšã©ãŒãè¿ãå§ããŸããã ããã¯ããªã¯ãšã¹ãããããã·ãããŠããªãããšã瀺ããŠããŸãã åæã«ã yt.company.ru / issues / ITïŒq =ïŒ 23 {Current + work} + Assigned + toïŒ 3A + me + updatedïŒ 3A + {This + week}ã®åœ¢åŒã®ä¿åãããã¯ãšãªéã®é·ç§»ã¯ãéåžžã«æ£ããæ©èœããŸããã
åé¡ã®ããURLã®äžå€®ã«çå笊ãè¿œå ããå®éšã¯ãIISã§ã¯ãªãYouTrackãµãŒããŒãã404ãšã©ãŒãåãåãå§ãããšããäºå®ã§çµãããŸããã ããã«ãããäœããã®çç±ã§IISïŒããã«ã¡ã¯ãMicrosoftïŒãURLã解éãããããä¿®æ£ããå¿ èŠããããšããèããåŸãããŸããã
ã¢ãã¬ã¹ã®äžå€®ã«ãããã©ã¹èšå·ã®åé¡ã¯ã requestFiltering allowDoubleEscaping = "true"ãã©ã¡ãŒã¿ãŒãè¿œå ããããšã§è§£æ±ºããŸããã
<system.webServer> <security> <requestFiltering allowDoubleEscaping="true" /> </security> </system.webServer>
ãããããã®åŸãã¹ããªã³ãéã®åãæ¿ãã¯ãŸã æ©èœããŸããã§ããã IISã¯ãã®ãããªèŠæ±ãå®å šã§ãªããšèŠãªããŠããããšãå€æããŸããã ãã®ãã§ãã¯ãç¡å¹ã«ããå¿ èŠããããŸããã
<system.web> <httpRuntime requestPathInvalidCharacters="" /> </system.web>
ããã¯ããã¹ãŠã®æäœåŸã«web.configãå€æãããã®ã§ãã
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="ProxyToYouTrack" patternSyntax="ECMAScript" stopProcessing="true"> <match url="(.*)" negate="false" /> <action type="Rewrite" url="http://srv-youtrack-01.local.domain/{R:1}" appendQueryString="true" logRewrittenUrl="true" /> <conditions> <add input="{SERVER_PORT}" pattern="443" /> </conditions> </rule> <rule name="redir to ssl" enabled="true" stopProcessing="true"> <match url="(.*)" /> <action type="Redirect" url="https://yt.company.ru" /> </rule> </rules> <outboundRules> <preConditions> <preCondition name="ResponseIsHtml1"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" /> </preCondition> </preConditions> </outboundRules> </rewrite> <security> <requestFiltering allowDoubleEscaping="true" /> </security> </system.webServer> <system.web> <httpRuntime requestPathInvalidCharacters="" /> </system.web> </configuration>
ãŸãšã
ããããç§ãèŠã€ãã解決çã¯æé©ã§ã¯ãªãããã¹ãŠãé çªã«è§£æ±ºãã代ããã«ãç¹å®ã®ã±ãŒã¹ã«é©ããã«ãŒã«ãæ éã«èŠå®ããå¿ èŠããããŸããã ããããä»ã§ã¯åäœããŸãã ããªãã®èããææ¡ãèããŠããããã§ãã
ãããã£ãŠãå€éšã¢ã¯ã»ã¹ãå¿ èŠãšãããã¹ãŠã®WebãµãŒããŒã¯ãnginxãapacheãsvnãgitlabããããWebã¢ã¯ã»ã¹ã亀æããçµç¹å ã§çµ¶å¯Ÿã«ãããã·ãããŸãã
ç§ã解決çã暡玢ããäž»ãªåé¡ã¯ãå€ãã®ãã€ã¯ããœãããµãŒãã¹ã«å¿ èŠãªNTLMèªèšŒããããã·ãä»ããŠæ©èœããªãããšã§ãã æ»ãã TMG補åã䜿ããããªãã®ã§ãä»ã¯ã Webã¢ããªã±ãŒã·ã§ã³ãããã·ãšåŒã°ããæ°ããWindows Server 2012 R2ãµãŒãã¹ãç解ããããšããŠããŸãããnginxãšapacheãã¡ãã£ãšèŠãŠããŸãããNTLMããããã·ããæ¹æ³ãããããŸããã
åç §è³æ
http://www.ifinity.com.au/Blog/EntryId/60/404-Error-in-IIS-7-when-using-a-Url-with-a-plus-sign-in-the-path
stackoverflow.com/questions/2831142/asp-net-4-url-limitations-why-url-cannot-contain-any-3f-characters
倧ããªæŽæ°ïŒ
ã³ã¡ã³ãã§ã¯ãhaproxyãè©ŠããŠã¿ãããšããå§ãããŸããã ãµã€ãã蚪åããåŸãntlmããŒãžãæ€çŽ¢ãããNTLMã®ããè¯ããµããŒããšéçãã¡ãŒã ã§ã®å¹çåäžã®ããã®å®å šãªHTTPããŒãã¢ã©ã€ãããèŠã€ããŸããã
ã³ã³ãœãŒã«ã§ã®æ°æ¥éã®æŽ»çºãªéšãã®åŸããã®çŽ æŽãããããŒã«ãç¿åŸãããããã·ãµãŒããŒãšããŠIISãäžèŠã«ãªããŸããã ããã«é¢ããå¥ã®èšäºã¯æžã䟡å€ããªããšæãã®ã§ããããã¯ãæŽæ°ããããšã«ããŸããã
ãã®ãã¹ãŠãéåžžã«ç°¡åã§ãããã«åäœããŸãïŒ
1. apt-getã䜿çšããŠããã¯ããŒãããã€ã³ã¹ããŒã«ããŸãïŒDebianãæãŸããïŒ
2.èšå®ãæžã蟌ãŸããŸãã ãããã·ãããã¢ããªã±ãŒã·ã§ã³ã®èšå®ã¯ãããã«ä¿®æ£ãããŠããŸã
3. iptablesãæ°ãããããã·ã«åãæ¿ããŸã
2çªç®ã®ãã€ã³ãã«ã€ããŠè©³ãã説æããŸãã
ããã©ã«ãã»ã¯ã·ã§ã³ã«èšå®ãè¿œå ããŸãã
mode http balance roundrobin option redispatch http-send-name-header Host
æåŸã®é ç®ã¯ããã¹ãåãããã¯ãšã³ãã«æž¡ãããããã«å¿ èŠã§ãããæ®ãã¯ãä»ã®ãã¹ãŠã®äººã®ããã«ãã§ãã
次ã«ã80ããã³443ããŒãã®ããã³ããšã³ããäœæãããŸãããããã¯ãããã€ãã®æ¡ä»¶ã«å¿ããŠãèŠæ±ãéä¿¡ããããã¯ãšã³ãããªãã¹ã³ããŠæ±ºå®ããŸãã ãããŠãç§ã¯1ã€ã®æ¡ä»¶ããæã£ãŠããŸãã-æ¥ããã¹ãåã
frontend http bind *:80 #Define hosts acl host_yt hdr(host) -i yt.company.name acl host_ar hdr(host) -i ar.company.name acl host_portal hdr(host) -i portal.company.name acl host_crm hdr(host) -i crm.company.name acl host_git hdr(host) -i git.company.name acl host_mail hdr(host) -i mail.company.name ... use_backend yt if host_yt use_backend ar if host_ar use_backend crm_r if host_crm use_backend git_r if host_git use_backend mail_r if host_mail
httpsã§ã¯ãããå°ãè€éã§ãã è¿é£ã®ãããã¯ãå©ãã«ãªããŸããããã³ã¡ã³ãã§ã¯SNIã®äœ¿çšãæšå¥šãããŸããã ãããŠããã䜿çšããŸãã
frontend https bind *:443 ssl crt /etc/ssl/tfs.cer.ipk.pem crt /etc/ssl/yt.cer.ipk.pem crt /etc/ssl/crm.cer.ipk.pem crt /etc/ssl/git.cer.ipk.pem crt /etc/ssl/mail.cer.ipk.pem use_backend tfs if { ssl_fc_sni tfs.company.name } use_backend yt if { ssl_fc_sni yt.company.name } use_backend crm if { ssl_fc_sni crm.company.name } use_backend git if { ssl_fc_sni git.company.name } use_backend mail if { ssl_fc_sni mail.company.name }
ããã¯éåžžã«ã·ã³ãã«ã§ããããšãå€æããŸããïŒ ãŸãããã¹ãŠã®ããã¯ãšã³ãã«å¯ŸããŠèšŒææžãçæãããŸã-ãããã¯é¡§å®¢ã«äžããããŸãã ç§ã¯Microsoftã®PKIã䜿çšããŠãããããèŠæ±ã®çæããããã®èšŒææžã®çºè¡ãããã³ãããã·ãžã®è»¢éãå°ã工倫ããå¿ èŠããããŸããã ã¡ãªã¿ã«ã* .company.nameã®äœ¿çšã¯èš±å¯ãããŠããŸãããç¹ã«ãã®ãããªå°æ°ã®ããã¯ãšã³ãã§ã¯ãã©ããããããããŸãå å®ã§ã¯ãªããšå€æããŸããã 蚌ææžã®æºåãã§ããããäžèšã®äŸã®ããã«è¡ã«ããããæãã«æžããŠãããããã¯ãšã³ãã®ã«ãŒã«ãæžãå¿ èŠããããŸã-蚌ææžã¯é çªã«ã¹ãªãããããŸãã
sniã䜿çšããèšèšã¯éåžžã«åçŽãªã®ã§ã説æããå¿ èŠããããŸããã 確ãã«ãã»ãšãã©ã®Androidã¡ãŒã«ã¯ã©ã€ã¢ã³ãã¯sniã®æ¹æ³ãç¥ããªãïŒãŸãã¯æãŸãªãïŒããããã¹ãåãæå®ããã«ããŒã443ã«ãªã¯ãšã¹ããéä¿¡ããŸãã é¢ä¿ãããŸããïŒ ãã®ãããªå Žåã«ã¯
default_backend mail
ïŒã¡ãªã¿ã«ããã®å Žåãã©ã®èšŒææžãã¹ãªããããããã¯ç¢ºèªããŸããã§ããïŒ
ããã§ã¯ãããã¯ãšã³ãã«ã€ããŠèª¬æããŸãã httpã§ã¯ããã¹ãŠãç°¡åã§ãã
backend it server it.company.name srv-web-01 backend ar server ar.company.name srv-web-01
ããã§ã it.company.nameã¯ãsrv-web-01ã«è»¢éããããã¹ãåã§ãã ãã®ãµãŒããŒäžã®IISã¯ãã¹ãåã«ããèªèšŒã䜿çšããããããããå¿ èŠã§ãã
httpsã®å Žåããããã¯ãã¶ã€ã³ã§ã
backend yt server yt.company.name srv-youtrack-01:80 backend tfs server tfs.company.name tfs:443 ssl verify none
ããã§ã¯ãããŒã80ãæå®ããŠSSLãã¢ã³ããŒãã§ããŸããã¯ã©ã€ã¢ã³ããšãããã·éã®ãã©ãã£ãã¯ã¯æå·åãããŸããããããã¯ãŒã¯å ã«ã¯ãããŸããã ãŸããhttpsãåŒãç¶ã䜿çšã§ããŸãïŒã蚌ææžã«é害ãèŠã€ãããªããããšãæå³ããããšã確èªããªãïŒã ãã ããã¯ã©ã€ã¢ã³ãã¯ãããã³ããšã³ãã®äœææã«å ¥åãã蚌ææžãåŒãç¶ãåä¿¡ããããšãç解ããå¿ èŠããããŸãã æçµçãªãµãŒããŒèšŒææžãååŸããå¿ èŠãããå Žåã¯ãäžèšã®ãããã¯ã§èª¬æããæ¹æ³ã䜿çšã§ããŸãã
å¥ã®ãã€ã³ãïŒäžéšã®ãµãŒããŒã®httpãhttpsã«çŸãããªãã€ã¬ââã¯ããããã ãããè¡ãããã«ã _ræ¥å°ŸèŸã䜿çšããŠç¹å¥ãªããã¯ãšã³ããäœæããŸãããããã«ãããçããæããªããŠãŒã¶ãŒãæ éã«httpsã«ã¹ããŒãããŸãã
backend tfs_r #redirect location https://tfs.company.name code 301 redirect scheme https
ã³ã¡ã³ãã¢ãŠããããè¡ãæèçã«åé€ããŸããã§ãã-ãã®ãããªãªãã·ã§ã³ã¯ããšããšäœ¿çšãããŠããŸãããããŠãŒã¶ãŒãé·ããªã³ã¯httpïŒ//site.company.name/lib/doc/Russian%20 lettersïŒ 20ïŒ ãã¯ãªãã¯ãããšéåžžã«äžäŸ¿ã§ã20 titles.docxããããŠåœŒã¯åœŒã®ææžãèŠã€ããããšã®åžæãªãã§ã¡ã€ã³ããŒãžã«æããããŸããã 圌ã¯ãããéããŠåã³ãªã³ã¯ããã©ãããšããå¯èœæ§ããããŸãããåã³äœãåŸããããéåžžã«åæºããŸãã ãããé²ãããã«ã ãªãã€ã¬ã¯ãã¹ããŒã httpsã³ã³ã¹ãã©ã¯ãã圹ç«ã¡ãŸããããã«ããããŠãŒã¶ãŒå šäœãæ£ç¢ºã«ãªãã€ã¬ã¯ããããURLå šäœã眮ãæããããŸãã
ããã¥ã¡ã³ãããŒãžcbonte.github.io/haproxy-dconv/configuration-1.5.html#4.2ã®èšå®ã®ãã¹ãŠã®åŸ®åŠãªè©³çŽ°
ãæž èŽããããšãããããŸããã ç§ã®çµéšã誰ãã«åœ¹ç«ã€ãšæããŸãã