Mastodon with IIS (IIS편)

      Mastodon with IIS (IIS편)에 댓글 없음

출처 : https://tetsupc.wordpress.com/2017/04/25/mastodon-with-iis-iis%E7%B7%A8/
해당 페이지의 일본어를 한국어로 번역기를 돌린 글입니다.
용어에 조금 차이는 있습니다만, 설정하는데 큰 지장은 없습니다.
———

자, 하나 앞의 기사의 계속입니다. 이번에는 Mastodon의 상위에 와서 IIS측의 설정을 해나가겠습니다
이미 IIS를 사용하여 Web사이트를 복수 공개하고 있었지만, 2년 전 쯤에 마련할 때 여러가지 지식이 없는 상태에서 비틀면서 비대했고 마침 적당한 때여서 처음부터 다시 구축했습니다.

주의 사항 등

대충은 전회의 기사와 같아서 이 기사에서 추가로 주의할 것 등.

  • Mastodon은 Streaming API에 WebSocket을 사용합니다. IIS는 8.0이후(Windows Server 2012이후)으로 대처하고 있어 그 이전의 IIS에서는(아마두)이용할 수 없어 구축할 수 있어도 Streaming등의 기능은 오류로 사용할 수 없습니다.
  • 이번에 사용하는 OS는 Windows Server 2012 R2입니다. 아마 Windows 8.1/10등의 클라이언트판 Windows에서도 적당히 보고 설정하면 기능하다고 생각합니다.
  • “Mastodon with IIS”뭐라고 했지만 정확히는 Mastodon에 리버스 프록시를 하고 있는 nginx의 한층 더 상위에 IIS를 파고들nginx에 리버스 프록시 한다.
  • Windows Server 2012 R2이하에 탑재되는 IIS에서는 HTTP/2에는 지원하지 않습니다. WS2016이후의 IIS에서는 가능한 모양.

IIS설치

이번에는 OS를 설치한 직후의 완전 새 것인 상태에서 시작하니 우선 IIS설치에서.

IIS본체

  • 서버 매니저를 열
    설정을 바꾸거나 하지 않으면 OS기동 후 로그인하면 자동으로 기동한다.
  • “역할과 기능의 추가”를 열
  • 서버의 선택(IIS를 설치하는 서버를 선택)
  • 서버의 역할로 “Web서버(IIS)”를 체크한다
  • “기능”은 변경 없이
  • IIS의 상세한 기능 선택
    “Web서버 역할(IIS)”의 “역할 서비스”로 IIS안의 필요 기능을 추가로 선택한다. 최소한 필요한 것 외에 개인적으로 필요한가-이라고 생각한 물건도 포함했다.

    • Web서버/HTTP공통 기능

      HTTP오류, 디렉토리의 참조, 기본 문서, 정적인 콘텐츠, HTTP리다이렉트

    • Web서버/보안

      요구 필터, IP및 도메인의 제한, URL승인

    • Web서버/퍼포먼스

      정적인 콘텐츠의 압축

    • Web서버/상태와 진단

      HTTP로그, 커스텀 로그, 트레이스, 요구의 감시

    • Web서버/애플리케이션 개발

      WebSocket프로토콜(중요)

    • 관리 도구/IIS관리 콘솔

  • 인스톨 개시
  • 마법사의 종료

Application Request Routing과 URL Rewrite설치

클라이언트에서 받은 리퀘스트를 Mastodon에 전송하기 위해서 필요한, Application Request Routing(ARR)와 URL Rewrite를 설치한다.
서버 매니저에서 일단”IE보안 강화 구성”를 Administrator그룹에서 무효로 하고, Microsoft의 공식 사이트에서 WebPI(Web Platform Installer)을 다운로드하고 실행한다.

Application Request Routing 3.0(ARR)

WebPI오른쪽 위의 검색 란에 “arr”으로 입력하여 Enter여러 후보가 나오기 때문에, 버전이 최신의 “Application Request Routing 3.0″을 “추가” 한다.

URL Rewrite 2.0

마찬가지로 검색 란에 “url rewrite”으로 입력하여 Enter한가지”URL Rewrite 2.0는이 후보로 나타나므로”추가” 한다.

상기 2개를 추가하면”인스톨”을 실행한다.
이상으로 IIS와 관련 설치는 완료.

IIS의 설정

Application Request Routing의 유효화

설치한 것만으로는 무효 상태이므로 유효화한다.

  • Internet Information Service(IIS)Manager(또는 인터넷 인포메이션 서비스(IIS)매니저)을 켰다
  • 서버 홈 화면의 “Applicatoin Request Routing Cache”에 들어가
  • 오른쪽의 페인에서 “Serverr Proxy Settings”에 들어가
  • “Enable proxy”를 체크한다
  • 기타 설정은 변경하지 않고 오른쪽의 페인에서 “적용” 한다

Mastodon, Web사이트의 작성

Mastodon에 리퀘스트를 전송하기 위한 Web사이트를 작성한다.
먼저

C:\inetpub\wwwroot\

이하에 “mastodon(이름은 임의)”라는 이름의 폴더를 작성한다.

IIS매니저의 화면 왼쪽의 페인에서,”Web사이트”를 오른쪽 클릭한다”Web사이트의 추가”에서 작성 화면을 연다.
“사이트 이름”에는 “mastodon”등 임의의 알기 쉬운 이름을 입력하고”물리 패스”에는 아까 작성된 “mastodon”폴더를 지정한다.
“바인드”에는 다음과 같이 설정했다.

  • 종류:http
  • IP주소:미사용의 IP주소 모두
  • 포트:80
  • 호스트 이름:mstdn.taiha.net

호스트 이름은 자신이 Mastodon에서 사용하는 도메인명을 입력한다.

Mastodon, Web사이트 설정

Web사이트를 작성했는데, Let’s Encrypt의 암호화와 HTTPS로의 리다이렉트, Mastodon로의 전송을 위한 설정을 실시한다.

Let’s Encrypt대응

방금 작성한 Web사이트의 홈 화면에서 “MIME의 설정”을 열고 오른쪽 페인의 “추가…”에서 다음과 같이 설정에서 MIME을 추가한다.

  • 파일 이름 확장자:.(반각 닷)
  • MIME의 종류:text/plain

Let’s Encrypt로 증명서를 취득할 때 접속되는 파일을 읽도록 한다.

HTTPS로의 리다이렉트

Mastodon은 사용자의 메일 주소와 패스워드를 다루기 때문에 HTTPS화는 필수.
Web사이트의 홈 화면에서 “URL개서”를 열고 오른쪽 페인”규칙의 추가”→”수신 규칙”중”하늘의 규칙”을 선택하는 OK.
아래와 같이 설정했다.

  • 이름:redirect_https(임의)
  • 요구된 URL:패턴에 일치하는
  • 사용:정규 표현
  • 패턴:^(.*)$
  • (조건)논리 그룹화:모두 일치
    • 입력:{HTTPS}
    • 종류:패턴에 일치하는
    • 패턴:off
    • 입력:{URL}
    • 종류:패턴에 일치하지 않는
    • 패턴:
      \. well-known/acme-challenge/(.*)$
  • 액션의 종류:리다이렉트
  • 리다이렉트 URL: https://{SERVER_NAME}/{R:1}
  • 쿼리 문자열의 추가:체크
  • 리다이렉트의 종류:영속적(301)(임의)

설정 후 오른쪽 페인에서 “적용” 하고”URL개서”페이지로 돌아간다.

Mastodon로의 전송 설정

“URL개서”페이지에서 오른쪽 페인”규칙의 추가”→”수신 규칙”중”하늘의 규칙”을 선택하는 OK.
아래와 같이 입력했다.

  • 이름:rewrite_mastodon(임의)
  • 요구된 URL:패턴에 일치하는
  • 사용:정규 표현
  • 패턴:^(.*)$
  • (조건)논리 그룹화:모두 일치
    • 입력:{URL}
    • 종류:패턴에 일치하지 않는
    • 패턴:
      \. well-known/acme-challenge/(.*)$
  • 액션의 종류:개서
  • URL의 변경: http://mstdn.taiha.net/{R:0}
  • 쿼리 문자열의 추가:체크
  • 변조된 URL을 기록한다:미확인
  • 후속의 규칙 처리 중지한다:체크

상기대로, Let’s Encrypt에서 도메인 인증 시에는 이 서버 내의 폴더에 접속하기 때문에

. well-known/acme-challenge/

이하의 URL을 Mastodon서버에 전송하지 않도록 설정했다.
또한 과거 다른 기사로 Jenkins에 IIS를 경유하여 마찬가지로 전송했을 때는 문제 없었지만 이번 Mastodon로의 전송에서는 전송처 URL에서 다음과 같이 로컬 IP주소를 지정하면 문제가 나오는 페이지가 있었다.

그래서 이번에는 Mastodon에 이용하는 도메인 이름을 지정했다. 이 경우, 그 자체로는 IPv4에서는 도메인에 등록된 글로벌 주소로 IPv6에서는 이 Web서버 자체에 접속이 돌아오기 때문에

C:\Windows\System32\drivers\etc.hosts

에 도메인에 대해서 Mastodon서버의 IP주소를 지정할 필요가 있다. 다음과 같이 지정했다.
IPv6대응 환경의 경우, 마찬가지로 Mastodon서버의 글로벌 IPv6주소와 도메인 이름의 조를 등록하는 게 좋을지도 모른다.

#Mastodon서버 IP도메인 이름 192.168.11.250 mstdn.taiha.net

이상에서 Mastodon서버에 리퀘스트를 전송하는 설정이 완료.
이쪽의 환경에서는 최종적인 Web사이트 설정 파일(web.config)은 다음과 같다.

<?xml version="1.0"encoding="UTF-8"?><configuration><system.webServer><rewrite><rules><clear/><rule name="redirect_https"enabled="true"stopProcessing="true"><match url="^(.*)$"ignoreCase="false"/><conditions logicalGrouping="MatchAll"trackAllCaptures="false"><add input="{HTTPS}"pattern="off"ignoreCase="false"/><add input="{URL}"pattern="\. well-known/acme-challenge/(.*)$"negate="true"/></conditions><action type="Redirect"url="https://<SERVER_NAME}/{R:1}"/></rule><rule name="mastodon_ubuntu-server"stopProcessing="true"><match url="^(.*)$"ignoreCase="false"negate="false"/><conditions logicalGrouping="MatchAll"trackAllCaptures="false"><add input="{URL}"pattern="\. well-known/acme-challenge/(.*)$"ignoreCase="false"negate="true"/></conditions><action type="Rewrite"url="http://mstdn.taiha.net/{R:0}"/></rule></rules></rewrite><staticContent><mimeMap fileExtension="."mimeType="text/plain"/></staticContent></system.webServer></configuration>

김에 IIS에 처음부터 있다”Default Web Site”은 사용하지 않으므로, 오른쪽 클릭 메뉴 등에서 정지시킨다.

Let’s Encrypt증명서 취득

Mastodon사이트의 통신을 암호화하기 때문에 Let’s Encrypt증명서를 취득한다.

Windows용 Let’s Encrypt툴의 도입

github.com/Lone-Coder/letsencrypt-win-simple 로부터 최신 도구를 다운로드하고 C:\아래에 전개한다.

툴 내의 Web_Config.xml변경

이 Web_Config.xml로 설정되는 부분은 이미 IIS로 설정한 것과 그대로 이용한 경우 오류가 나왔기에, 이 파일이 아무것도 하지 않도록 쓴다.
다음과 같이 썼다.

<?xml version="1.0"encoding="UTF-8"?><configuration><system.webServer></system.webServer><system.web></system.web></configuration>

Let’s Encrypt로 증명서를 취득

이번에 이미 다른 사이트도 존재하므로 이들도 마련하고 커버하기 위해서 단일의 사이트용 증명서가 아니라”SAN증명서”를 취득했다.
위에서 Windows용 Let’s Encrypt툴을 전개한 폴더로 이동하고 명령 프롬프트를 관리자 권한으로 실행하고 아래와 같이 실행한다. 하이라이트 부분이 입력한 장소.
왠지 굉장한 오래 된 것은 도메인이 너무 많기 때문에 증명서를 취득하는 도메인이 1개만 하면 다소 짧다.

C:\letsencrypt-win-simple>letsencrypt.exe-san The global logger has been configured Let's Encrypt(Simple Windows ACME Client)Renewal Period:60 Certificate Store:WebHosting ACME Server:https://acme-v01.api.letsencrypt.org/Config Folder:C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simple\htt psacme-v01.api.letsencrypt.org Certificate Folder:C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simpl e\httpsacme-v01.api.letsencrypt.org Loading Signer from C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simpl e\httpsacme-v01.api.letsencrypt.org\Signer Getting AcmeServerDirectory Loading Registration from C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\Registration Scanning IIS Sites 6:SAN-IIS eject.taiha.net(D:\wwwroot\eject.taiha.net)3:SAN-IIS mstdn.taiha.net(D:\wwwroot\mstdn.taiha.net)5:SAN-IIS sokuten.taiha.net(C:\inetpub\wwwroot)2:SAN-IIS taiha.net(D:\wwwroot\taiha.net)4:SAN-IIS teo.taiha.net(D:\wwwroot\teo.taiha.net)W:Generate a certificate via WebDav and install it manually. S:Generate a single San certificate for multiple sites. F:Generate a certificate via FTP/FTPS and install it manually. M:Generate a certificate manually. A:Get certificates for all hosts Q:Quit Choose from one of the menu options above:S Running IISSiteServer Plugin Enter all Site IDs seperated by a comma S:for all sites on the server 2,3,4,5,6 Authorizing Identifier taiha.net Using Challenge Type http-01 Writing challenge answer to D:\wwwroot\taiha.net\. well-known/acme-challenge/(도메인 확인용 파일)Writing web.config to add extensionless mime type to D:\wwwroot\taiha.net\. well-known\acme-challenge\web.config Answer should now be browsable at http://taiha.net/. well-known/acme-challenge/(도메인 틀림없이 인용 파일)Submitting answer Authorization Result:valid Deleting answer Additional files exist in D:\wwwroot\taiha.net\. well-known/acme-challenge/not d eleting. Authorizing Identifier mstdn.taiha.net Using Challenge Type http-01 Writing challenge answer to D:\wwwroot\mstdn.taiha.net\. well-known/acme-challeng e/(도메인 확인용 파일)Writing web.config to add extensionless mime type to D:\wwwroot\mstdn.taiha.net\. well-known\acme-challenge\web.config Answer should now be browsable at http://mstdn.taiha.net/. well-known/acme-challe nge/(도메인 확인용 파일)Submitting answer Authorization Result:valid Deleting answer Additional files exist in D:\wwwroot\mstdn.taiha.net\. well-known/acme-challenge/not deleting. Authorizing Identifier teo.taiha.net Using Challenge Type http-01 Writing challenge answer to D:\wwwroot\teo.taiha.net\. well-known/acme-challenge/(도메인 확인용 파일)Writing web.config to add extensionless mime type to D:\wwwroot\teo.taiha.net\. w ell-known\acme-challenge\web.config Answer should now be browsable at http://teo.taiha.net/. well-known/acme-challeng e/(도메인 확인용 파일)Submitting answer Authorization Result:valid Deleting answer Additional files exist in D:\wwwroot\teo.taiha.net\. well-known/acme-challenge/n ot deleting. Authorizing Identifier sokuten.taiha.net Using Challenge Type http-01 Writing challenge answer to C:\inetpub\wwwroot\. well-known/acme-challenge/(도메인 확인용 파일)Writing web.config to add extensionless mime type to C:\inetpub\wwwroot\. well-kn own\acme-challenge\web.config Answer should now be browsable at http://sokuten.taiha.net/. well-known/acme-chal lenge/(도메인 틀림없이 인용 파일)Submitting answer Authorization Result:valid Deleting answer Deleting web.config Deleting C:\inetpub\wwwroot\. well-known/acme-challenge/Deleting C:\inetpub\wwwroot\. well-known Authorizing Identifier eject.taiha.net Using Challenge Type http-01 Writing challenge answer to D:\wwwroot\eject.taiha.net\. well-known/acme-challeng e/(도메인 확인용 파일)Writing web.config to add extensionless mime type to D:\wwwroot\eject.taiha.net\. well-known\acme-challenge\web.config Answer should now be browsable at http://eject.taiha.net/. well-known/acme-challe nge/(도메인 확인용 파일)Submitting answer Authorization Result:valid Deleting answer Additional files exist in D:\wwwroot\eject.taiha.net\. well-known/acme-challenge/not deleting. Requesting Certificate Request Status:Created Saving Certificate to C:\Users\Administrator\AppData\Roaming\letsencrypt-win-sim ple\httpsacme-v01.api.letsencrypt.org\2,3,4,5,6-crt.der Saving Issuer Certificate to C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\ca-0A0141420000015385736A0B85ECA708-crt.pem Saving Certificate to C:\Users\Administrator\AppData\Roaming\letsencrypt-win-sim ple\httpsacme-v01.api.letsencrypt.org\2,3,4,5,6-all.pfx Installing Non-Central SSL Certificate in the certificate store Opened Certificate Store WebHosting Set private key exportable Set private key exportable Adding Certificate to Store Closing Certificate Store Installing Non-Central SSL Certificate in server software Updating Existing https Binding IIS will serve the new certificate after the Application Pool Idle Timeout time has been reached. Committing binding changes to IIS Opened Certificate Store WebHosting Removing Certificate from Store X509Certificate2<(치환된 기존 증명서의 정 소식)}Closing Certificate Store Updating Existing https Binding IIS will serve the new certificate after the Application Pool Idle Timeout time has been reached. Committing binding changes to IIS Opened Certificate Store WebHosting Closing Certificate Store Updating Existing https Binding IIS will serve the new certificate after the Application Pool Idle Timeout time has been reached. Committing binding changes to IIS Opened Certificate Store WebHosting Closing Certificate Store Updating Existing https Binding IIS will serve the new certificate after the Application Pool Idle Timeout time has been reached. Committing binding changes to IIS Opened Certificate Store WebHosting Closing Certificate Store Updating Existing https Binding IIS will serve the new certificate after the Application Pool Idle Timeout time has been reached. Committing binding changes to IIS Opened Certificate Store WebHosting Closing Certificate Store Adding renewal for IISSiteServer 2,3,4,5,6()Creating Task letsencrypt-win-simple httpsacme-v01.api.letsencrypt.org with Wind ows Task scheduler at 9am every day. Do you want to specify the user the task will run as?(y/n)Renewal Scheduled IISSiteServer 2,3,4,5,6()Renew After 2017/06/24 Press enter to continue. C:\letsencrypt-win-simple>

이 툴은 자동적으로 IIS에 설정되어 있는 Web사이트를 검출하고 리스트 업 한다. 단, IDN(일본어 도메인 등)에는 비대응으로, 그 URL는 검출할 수 없다. Let’s Encrypt자체는 IDN에 대응하고 있다.
이번에는 IIS에 설정되어 있는 Web사이트의 증명서를 취득하기 위해29행에서 “S”를 리스트 업된 Web사이트 모두 대상이라 32행째에 리스트의 선두에 붙어 있는 번호”2,3,4,5,6″을 지정했다.”1는은 IIS에 처음부터 존재했던 “Default Web Site”에 할당되어 있다.
번호를 지정하고 Enter를 누르면 자동으로 확인용 파일의 작성과 Let’s Encrypt서버에서 접속 확인(도메인이 존재 여부)가 이루어지며, 또한 IIS사이트에 HTTPS의 설정과 증명서의 할당까지 가거라.

마지막 142행에서 묻는 것은 취득한 증명서 갱신 스케줄을 시스템의 스케줄에 등록하는데, 이를 다른 유저로서 실행할지 지정. 특히 바꿀 필요도 없기 때문에,”n”을 입력하고 나아갔다. 하면 스케줄에 등록한 취지의 표시 후”Press enter to continue”으로 표시되어 Enter키를 누르면 도구가 종료된다.
가능하면 타슥스케쥬ー라을 열고”태스크 스케쥬ー라 라이브러리”->”letsencrypt-win-simple…”라는 작업이 존재하는지 확인한다. 이것이 실행되지 않으면, 증명서가 갱신되지 않고 기간이 90일에서 끊기고 Web사이트가 에러로 접근이 불가능하다.

이상으로 IIS의 설정과 증명서의 취득은 모두 종료.

접속 확인

정상에 IIS접속이 Mastodon으로 전송되는지 확인한다. IPv6이 이용 가능한 환경에서는 도메인 IPv6주소를 설정하고 있으면 직접 접속할 수 있지만 v4만의 경우 클라이언트 PC의 hosts내에 도메인에 대해서 Web서버 측의 IP주소를 지정한다.

또 가능하면 휴대 전화나 스마트 폰 등에서 docomo, au, softbank등의 모바일 회선을 사용하여 외부에서 정상적으로 접근할 수 있는지 확인한다.
↓ LAN내의 PC에서

↓ docomo spmode회선을 이용하고 L-05E에서


이상으로 모두 완료입니다.
이번의 방식으로 세운 인스턴스”주먹 대파“과 그 후 최신 개발 버전을 추적할 예정에서 세운 인스턴스”테오크레“은 현재 계속적으로 운용할 예정입니다.

그럼 이만.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다