WEBRick에서 웹 서버를 시작하고 동일한 LAN의 PC에서 액세스
동기
프레임워크 없이도 WEBRick에서 쉽게 웹 서버를 만들 수 있다는 것을 읽고, 재미있을 것 같았기 때문에 수중에서 시험해 보겠습니다. 이하, 잊지 않도록 하기 위한 기록입니다.
WEBRick에서 웹 서버를 시작합니다 (먼저 로컬 전용)
WEBRick에 대해 자세한 것은 이쪽을 보면서.
↑ 이것을 보면,
WEBrick은 Ruby 3.0에서 표준 라이브러리에서 제거되었습니다. Ruby 3.0 이상에서 WEBrick을 사용하려면 rubygems에서 사용하십시오.
라는 것이므로, gem install 해 둡니다.
$ gem install webrick
그런 다음 적절한 디렉토리를 만들어 파일을 만듭니다.
server.rb
require 'webrick'
options = { BindAddress: '127.0.0.1', Port: '10080', DocumentRoot: '.' }
server = WEBRick::HTTPServer.new(options)
trap(:INT) { server.shutdown } # Signal.trap(:INT) { server.shutdown } でも同じ
server.start
웹 서버 객체(즉, WEBRick::HTTPServer 의 인스턴스)는 start 메소드 을 가지며, 이것이 결국 웹 서버를 시작하게 합니다.
웹 서버 객체는 WEBRick::HTTPServer.new(options)에서 작성되었습니다.
options로서는 우선
BindAddress
, Port
, DocumentRoot
의 3항목을 건네주면 움직인다고 합니다. 다른 항목에 대해서는 루리마 에 정리되어 있었습니다.BindAddress
에 127.0.0.1
를 전달하면 로컬 전용 웹 서버가 되고, 0.0.0.0
를 전달하면 LAN 내에 공개된 웹 서버가 됩니다.trap(:INT)
의 행으로 ctrl+c
가 입력되었을 때의 동작을 지정하고 있습니다. 여기서는 server.shutdown
에서 서버를 중지합니다. (이 줄을 쓰지 않으면 ctrl+c
에서 멈출 수 없습니다.그리고 이 파일을 실행하면 웹 서버가 시작됩니다.
$ ruby server.rb
#[2021-10-31 18:09:13] INFO WEBrick 1.7.0
#[2021-10-31 18:09:13] INFO ruby 3.0.2 (2021-07-07) [x86_64-darwin20]
#[2021-10-31 18:09:13] INFO WEBrick::HTTPServer#start: pid=23294 port=10080
curl로 액세스해 보겠습니다.
$ curl http://127.0.0.1:10080
# (以下結果)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>Index of /</TITLE>
<style type="text/css">
<!--
.name, .mtime { text-align: left; }
.size { text-align: right; }
td { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; }
table { border-collapse: collapse; }
tr th { border-bottom: 2px groove; }
//-->
</style>
</HEAD>
<BODY>
<H1>Index of /</H1>
<TABLE width="100%"><THEAD><TR>
<TH class="name"><A HREF="?N=D">Name</A></TH><TH class="mtime"><A HREF="?M=D">Last modified</A></TH><TH class="size"><A HREF="?S=D">Size</A></TH>
</TR></THEAD>
<TBODY>
<TR><TD class="name"><A HREF="..">Parent Directory</A></TD><TD class="mtime">2021/10/31 18:19</TD><TD class="size">-</TD></TR>
<TR><TD class="name"><A HREF="webrick227.rb">webrick227.rb</A></TD><TD class="mtime">2021/10/31 18:19</TD><TD class="size">375</TD></TR>
</TBODY></TABLE><HR> <ADDRESS>
WEBrick/1.7.0 (Ruby/3.0.2/2021-07-07)<BR>
at 127.0.0.1:10080
</ADDRESS>
</BODY>
</HTML>
색인 페이지의 HTML이 반환되었습니다!
curl에서 지정한 것과 동일한 url을 브라우저에서 열면 ... 어라?
10080번 포트는 브라우저에서 볼 수 없다
ps aux | grep webrick
라고 써 있습니다. 조사하면 분명히 브라우저가 최근 10080번 포트 사이트를 볼 수 없도록 하는 것 같습니다.솔직하게 10080번을 피해,
ERR_UNSAFE_PORT
의 options
로 지정하는 것을 Port
server.rb
# 省略
options = { BindAddress: '127.0.0.1', Port: '20080', DocumentRoot: '.' }
# 省略
url은 htp://127.0.0.1:20080입니다.
그러자 이런 화면이 되었습니다.
↓
20080
의 options
로 지정한 디렉토리에 DocumentRoot
라는 파일이 없으면 이 화면이 됩니다. ( 홈페이지에 접속하면 「index of/」라고 표시되어 파일이 리스트로 표시되어 버린다 )이번은
index.html
에는 현재 디렉토리( DocumentRoot
)를 지정하고 있으므로, '.'
와 같은 계층에 server.rb
를 작성해 내용을 적당히 준비해 보겠습니다.index.html
<h1>Hello World!</h1>
브라우저에서 조금 같은 URL (htp://127.0.0.1:20080)에 액세스하면 ...
방금전의
index.html
라는 화면이 아니라, Index of /
의 내용이 표시되게 되었습니다!웹 서버를 LAN에 게시
위에서 쓴 것처럼,
index.html
의 options
에 BindAddress
를 건네주면 로컬 전용의 Web 서버가 되어, 127.0.0.1
를 건네주면 LAN내에 공개된 Web 서버가 됩니다.(카페 등의 공공 LAN에 연결할 때는 위험하기 때문에 시도하지 않는 것이 좋다고 생각합니다)
server.rb
# 省略
options = { BindAddress: '0.0.0.0', Port: '20080', DocumentRoot: '.' }
server = WEBRick::HTTPServer.new(options)
# 省略
서버를 다시 시작합니다.
$ ruby server.rb
이제 동일한 LAN 내의 다른 PC나 스마트폰에서도 액세스할 수 있게 되어 있을 것입니다.
액세스하려면
0.0.0.0
대신 개인 IP 주소를 사용하십시오. 물론 포트 번호 (여기서는 127.0.0.1
)도 계속해야합니다.url은 예를 들어
20080
와 같아야합니다.이제 같은 Wi-Fi에 연결된 다른 단말기의 브라우저에 이 url을 넣으면
http://192.168.1.21:20080
의 내용을 볼 수 있었습니다.놀이로 여러가지 쓸만한 느낌입니다.
반복됩니다만, 공공의 LAN에 연결하고 있을 때는 시도하지 않는 편이 좋다고 생각합니다.
Reference
이 문제에 관하여(WEBRick에서 웹 서버를 시작하고 동일한 LAN의 PC에서 액세스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bataconga/items/a349f4867bccd74b1cbf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)