• 検索結果がありません。

…l…b…g…‘†[…N…v…“…O…›…~…fi…OfiÁŸ_

N/A
N/A
Protected

Academic year: 2021

シェア "…l…b…g…‘†[…N…v…“…O…›…~…fi…OfiÁŸ_"

Copied!
29
0
0

読み込み中.... (全文を見る)

全文

(1)

12

回の目次

前回: RESTとマッシュアップ 今回: Apacheの基本 Tomcatのサーバーサイドプログラミング Node.js 1 / 29

(2)

本日のソースコード

basic auth/: .htaccessと.htpasswdの例

.htaccessにはもっといろいろ書ける.ただし,学情のWeb サーバはこれを無視する設定になっているらしい.(前回のオ フラインのMIME設定もうまく行かない.)

testcgi.c: CGIの環境変数を表示する

rest.rb: yahooに検索をかけるCGI (written in ruby) tomcat/

testform.html:フォーム入力してform.jspを呼ぶ

form.jsp: PUTされた内容を表示するJSP form jsp.java: form.jspのjavaへの展開結果 test.jsp:<% や <%!の入ったJSP

test jsp.java:上の展開結果

src/: servletの例(HelloWorld.java, web.xml) server.js: Node.jsによるサーバープログラム

(3)

Web

サーバーのソフト

Apache

The Apache Software Foundation Apache HTTP Serverが正式

LAMP: Linux, Apache, MySQL, PHP/Perl

その他の有名なWebサーバ

IIS (Internet Information Server) Nginx

Lighttpd Node.js

GWS (Google Web Server)

(4)

apache

のアーキテクチャ

以下はapache1.3の話(apache 2ではない) apacheの構成

apache core

複数のapache modules (coreから呼び出される)

moduleのリストはhttp://httpd.apache.org/docs/2.4/mod/

(5)

Apache

の全体構成

(6)

Apache Core

の構成

(7)

http request

によるフェーズ管理

http requestは以下の順序でフェーズを管理する URI to filename translation

Check access based on host address, and other available information

Get an user id from the HTTP request and validate it Authorize the user

Determine the MIME type of the requested object (the content type, the encoding and the language) Fix-ups (for example replace aliases by the actual path) Send the actual data back to the client

Log the request

(8)

フェーズと

Module handler

の呼び出し

(9)

並列処理

クライアントにつき一つのプロセス

プロセスは予め作られていて(prefork),それを割り当てる

(10)

Apache2

アーキテクチャをかなり変えた MPM (Multi-processing module)

moduleの一つではあるが入ってないとapacheが動かない. MPMにはprefork (apache 1.3以前の方法),worker (スレッ ド)がある.

APR (Apache Portable Runtime)

apache http serverの下に入ってOSの違いを吸収するレイ ヤー(http server以外にも使われているらしい)

(11)

apache prefork/worker vs lighttpd (1)

abを利用した性能評価

http://thinkit.co.jp/book/2008/07/31/150より引用

(12)

apache prefork/worker vs lighttpd (2)

http loadを利用した性能評価

http://thinkit.co.jp/book/2008/07/31/150より引用

(13)

設定

/etc/apache2/apache2.conf Debianの場合はこれがメインで,ここからIncludeで読みこむ: モジュール設定: /etc/apache2/mods-enabled/*.load→ 読込みモジュールの指定 /etc/apache2/mods-enabled/*.conf→ 各モジュールの設定 ユーザ設定: /etc/apache2/httpd.conf ポート設定: /etc/apache2/ports.conf 一般的な追加: /etc/apache2/conf.d/ バーチャルホストやサイト固有の設定: /etc/apache2/sites-enabled/ 13 / 29

(14)

バーチャルホスト

IPアドレスとホスト名をさまざまに対応付けられる 同じIPアドレスに複数の名前 NameVirtualHost *:80 <VirtualHost *:80> ServerName www.example.com DocumentRoot /var/www1 </VirtualHost> <VirtualHost *:80> ServerName www.example.org DocumentRoot /var/www2 </VirtualHost> 同じホストに複数のIPアドレス <VirtualHost 10.0.0.1> ServerName ∼ DocumentRoot ∼ </VirtualHost> ポートで分けることもできる <VirtualHost *:8080> 14 / 29

(15)

Proxy

フォワードプロキシ

中のクライアント(ブラウザ)を外に出ていけるようにするため

キャッシュ機能も付いている.mod cacheを使う.

ブラウザ側で設定が必要

GET∼やHostはオリジンURL.パケットをプロキシに送る.プ

ロキシから本来のサイトをアクセス. ProxyRequests on

リバースプロキシ

中のサーバを外から見えるようにするため 負荷振り分けにも使える キャッシュ機能も付いている ブラウザ側の設定は不要.ブラウザは,リバースプロキシがター ゲットのサイトそのものだと思っている.

ProxyPass /test http://localhost:3000/test

(16)

プロキシ経由アクセスのダンプ

[proxy.de.shibaura-it.ac.jpへのパケット] GET http://www.google.co.jp/ HTTP/1.1 Host: www.google.co.jp Proxy-Connection: keep-alive Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.84 Safari/534.13 Accept-Encoding: gzip,deflate,sdch Accept-Language: ja,en-US;q=0.8,en;q=0.6 Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.3 Cookie: PREF=ID=3e5f9∼ [proxy.de.shibaura-it.ac.jpからのパケット] HTTP/1.0 200 OK

Content-Type: text/html; charset=UTF-8 Date: Thu, 10 Feb 2011 07:12:13 GMT Expires: Thu, 10 Feb 2011 07:12:13 GMT

Cache-Control: private, must-revalidate, max-age=0 Last-Modified: Thu, 10 Feb 2011 07:12:13 GMT ETag: 7869640352321481114

Set-Cookie: IGTP=LI=1:LM=1297321933; expires=Sat, 09-Feb-2013 07:12:13 GMT; path=/ig; domain=www.google.co.jp Set-Cookie: SID=DQAAA∼; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.co.jp

X-Content-Type-Options: nosniff Server: igfe

Content-Encoding: gzip

X-Cache: MISS from proxyyi01.sic.shibaura-it.ac.jp

Via: 1.0 proxyyi01.sic.shibaura-it.ac.jp:10080 (squid/2.7.STABLE9) Connection: close

(17)

mod alias

AliasとRedirectのモジュール

Alias /foo/bar /baz

Redirect "/example" "http://www2.example.com/new/location" さらに正規表現も使える

Redirect "example(/.*)" "http://www2.example.com/new/location"

より強力なRewriteという機能もある

(18)

その他のさまざまなモジュール

moduleのリストはhttp://httpd.apache.org/docs/2.4/mod/ mod proxy:プロキシ設定のためのモジュール mod ssl: httpsのためのモジュール

mod cache:コンテンツのキャッシュ

mod disk cacheかmod mem cacheと組み合わせて使う mod rewrite: URLを正規表現ベースで任意の形に書き換え 自分のサイト外のURLにすることもできる.その場合は自 動的にredirectしてくれる.

mod deflate:コンテンツの圧縮 mod perl, mod php: perlやphp

(19)

CGI (Common Gateway Interface)

Webサーバー内でプログラムを動かす仕組み http://www.example.com/cgi-bin/test.cgi などと呼ぶと,test.cgiというページでなく,test.cgiというプロ グラムが実行される. 19 / 29

(20)

cgi

の設定

/etc/apache2/sites-enabled/000-defaultの中: ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin">

AllowOverride None

Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny

Allow from all </Directory>

(21)

cgi

プログラムの例

testcgi.c: GETで動かした時の例.主な環境を返す. 最初の3行が重要 testform.c: POSTの出力. このプログラムはどうでもいいが,結果は, name=yamazaki&birthday=10 のようになる. method="GET"にすると,QUERY_STRINGが上のようになるだけ. apacheからの情報は環境変数に入っているので,getenv()を使 う. httpのヘッダは,HTTP_で始まる環境変数に入っている. 例えば,Last-event-idはHTTP_LAST_EVENT_IDに入っている. rest.rb: rubyの例 21 / 29

(22)

Tomcat

Tomcatとは

Servlet (全部をJavaで書く) JSP (HTML埋め込み型)

Apacheと連係させることも単体も可 ServletはJava版のCGI

毎回プロセス起動しないので軽い(JavaのVMの中の話) Javaのさまざまなライブラリを利用できる

(23)

Servlet

のプログラム

【tomcat/src/WEB-INFの中】 web.xml => アクセスされたURLと呼び出すクラスの対応 classes/* => クラスファイル置き場 lib/* => ? 23 / 29

(24)

JSP (Java Server Pages)

HTML中にJavaのプログラムを埋め込める: <body> ... <% out.println(expr) %> プログラムが印刷したものが,そのままページの一部になる. <%= expr =%> 式exprの値をHTMLに埋め込む.(toString()してるだけ) <%@ ... %> page全体の宣言 <%! ... %> メソッドの宣言 セッション実装の機能も用意されている 24 / 29

(25)

実際の

JSP

のプログラム

src/tomcat/

testform.html: これをsubmitすると,form.jspを呼ぶ.

method=はPUTでもPOSTでもJSPプログラムは同じ.

form.jsp test.jsp

form_jsp.java: form.jsp から自動生成されたコード

test_jsp.java: test.jsp から自動生成されたコード

(26)

Node.js

サーバーサイドJavaScriptで書かれたWeb Server

Web Serverに対してプラグインやモジュールを入れていく のではなく

Web Serverを自分でプログラムする →server.js すべてをイベント駆動の形で記述する → 高速 http://code.google.com/p/node-js-vs-apache-php-benchmark/wiki/Tests (ただしJavaScript自身はシングルスレッドなので,うまく 書かないと駄目) クライアントと同じ書き方ができる.JSONも当然得意. WebSocketなど最新の機能が早く導入される 26 / 29

(27)

高性能化

C10K Problem:クライアントを10000接続処理することの難しさ 解決法

select/poll +非同期IO (AIO) [nginx, lighttpd, node.js] 通信の待ちとIOの待ちからどう逃げるか 軽量スレッド[Apache] select/poll使っても,例えばchecksumエラーのパケットが来る と偽陽性になる.非同期IOは必須.もちろんファイルのリード でも. ロードバランサ:サーバをスケールアウト ハード: Citrix Netscalerなど(数十Gbpsまで行けるが高価) ソフト: Linux LVSなど

通常構成とDSR (Direct Server Return)構成 セッションが入ると大変

(28)

The fastest web server in the world?

引用元http://seravo.fi/2012/the-fastest-web-server-in-the-world

Speed of individual requests

Average total time in milliseconds

(29)

課題提出について

課題:本授業で説明した技術を用いた通信アプリ(新規性は問わない) 例: 第3者サイトのAPIを使ったアプリ HTML5の新機能を使ったアプリ サーバーで何か工夫したアプリ(Webサーバ立てました,は駄目) 実装方法: 自分で環境を設定できる場合: Apache/Tomcat/Node.jsを立てて何かする 大学のPCだけで何とかする場合: 無料の外部サーバを使う

IaaS:例えばAmazon EC2 PaaS:例えばHeroku

MyVolume上のpublic htmlにページを作ってブラウザで開く

JSで(googleやTwitterなどの) APIを呼び何かを作る

提出方法: 第15回(2014年1月23日)に概要と全体構成を発表 パワーポイント使用(発表しなかったら不可) 数日以内に以下を提出(正確な〆切りは当日指定) 上記パワポ+ソースコード+詳細説明 または ソース中のコメント 29 / 29

参照

関連したドキュメント

Given a compact Hausdorff topological group G, we denote by O(G) the dense Hopf ∗-subalgebra of the commutative C ∗ -algebra C(G) spanned by the matrix coefficients of

Several other generalizations of compositions have appeared in the literature in the form of weighted compositions [6, 7], locally restricted compositions [3, 4] and compositions

のようにすべきだと考えていますか。 やっと開通します。長野、太田地区方面  

In analogy with Aubin’s theorem for manifolds with quasi-positive Ricci curvature one can use the Ricci flow to show that any manifold with quasi-positive scalar curvature or

Correspondingly, the limiting sequence of metric spaces has a surpris- ingly simple description as a collection of random real trees (given below) in which certain pairs of

We study a particular number pyramid b n,k,l that relates the binomial, Deleham, Eulerian, MacMahon-type and Stirling number triangles.. Based on the properties of the numbers b n,k,l

Since we need information about the D-th derivative of f it will be convenient for us that an asymptotic formula for an analytic function in the form of a sum of analytic

[r]