7.

Web サーバとアプリケーションサーバの違い完全ガイド

編集
この記事の要点
  • Web サーバ(Apache / Nginx / IIS)は静的コンテンツ配信リバースプロキシを担当
  • アプリケーションサーバ(AP サーバ)は動的処理を担当。Java 系では Tomcat / Jetty / WildFly / GlassFish / JBoss
  • Spring Boot / Quarkus はAP サーバを組込(Embedded Tomcat / Undertow)
  • 典型構成: Nginx(フロント)+ Tomcat(バック)proxy_pass で連携
  • Java EE / Jakarta EE 仕様。Servlet / JSP / EJB / JPA / JMS 等の API 標準
  • PHP / Python / Node.js は本質的に AP サーバ役(PHP-FPM、uWSGI、Node プロセス)

2 種類のサーバの違い

Web 三層構成では Web サーバ(フロント)と アプリケーションサーバ(バック)を組み合わせます。役割は明確に分かれます。

項目Web サーバアプリケーションサーバ
主な役割HTTP リクエスト受付、静的ファイル配信、リバプロ業務ロジック実行、DB アクセス、動的レスポンス生成
処理対象HTML / CSS / JS / 画像 / 動画Servlet / JSP / EJB / アプリコード
代表製品Apache / Nginx / IIS / LiteSpeedTomcat / Jetty / WildFly / GlassFish / WebLogic / WebSphere
プロトコルHTTP / HTTPSAJP / HTTP / RMI / JMS
仕様HTTP / TLSJava EE / Jakarta EE
セッション管理基本なしあり(HttpSession 等)
トランザクションなしあり(JTA)

代表的な Web サーバ

製品提供元特徴
Apache HTTP ServerApache Software Foundation最古参。豊富なモジュール。.htaccess
NginxNginx Inc.(現 F5)イベント駆動で高性能。リバプロ・LB 用途
IISMicrosoftWindows Server 標準。ASP.NET と統合
LiteSpeedLiteSpeed TechnologiesApache 互換 + 高速化。商用
CaddyCloudflare 系自動 HTTPS(Let's Encrypt 統合)

代表的なアプリケーションサーバ(Java 系)

製品仕様準拠用途
Apache TomcatServlet / JSP(Web Profile の一部)軽量。Spring Boot 組込でも多用
Eclipse JettyServlet / JSP組込型。Maven プラグインで開発時に便利
WildFly (旧 JBoss AS)Jakarta EE Full ProfileOSS で完全 EE 対応
GlassFishJakarta EE リファレンス実装仕様準拠の標準
WebLogicJakarta EEOracle 商用。大規模エンタープライズ
WebSphereJakarta EEIBM 商用。基幹系で根強い
PayaraJakarta EEGlassFish フォーク。OSS + サポート提供

典型構成: Nginx + Tomcat

もっとも一般的な Java Web システム構成。Nginx を前段に置き、静的配信と TLS 終端を担当、動的処理だけ Tomcat に流します:

[クライアント] --HTTPS--> [Nginx :443]
                            |
                            +--静的(/static/*)--> ローカル配信
                            |
                            +--動的(/app/*)------> [Tomcat :8080]
                                                       |
                                                       +--> [DB / Cache / 外部 API]

Nginx の設定例:

upstream tomcat_backend {
    server 127.0.0.1:8080;
    keepalive 32;
}

server {
    listen 443 ssl http2;
    server_name app.example.com;

    ssl_certificate     /etc/letsencrypt/live/app.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;

    # 静的は Nginx 配信
    location /static/ {
        root /var/www/app;
        expires 30d;
    }

    # 動的は Tomcat にプロキシ
    location / {
        proxy_pass         http://tomcat_backend;
        proxy_http_version 1.1;
        proxy_set_header   Host              $host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

Spring Boot は AP サーバを組み込む

従来は WAR を Tomcat にデプロイしていましたが、Spring Boot / Quarkus / Micronaut は AP サーバを依存ライブラリとして組込みます。java -jar app.jar でアプリ自身が HTTP リッスンします:



    org.springframework.boot
    spring-boot-starter-web




    org.springframework.boot
    spring-boot-starter-web
    
        
            org.springframework.boot
            spring-boot-starter-tomcat
        
    


    org.springframework.boot
    spring-boot-starter-undertow

Java EE / Jakarta EE 仕様

AP サーバが実装する標準仕様。Oracle 配下の Java EE は 2017 年に Eclipse Foundation に移管されて Jakarta EE に名称変更されました。主要 API:

  • Servlet / JSP / JSTL: Web レイヤ
  • JAX-RS: REST API(Jersey / RESTEasy)
  • EJB: Enterprise Java Beans(業務ロジック)
  • JPA: ORM(Hibernate / EclipseLink)
  • JTA: 分散トランザクション
  • JMS: メッセージング(ActiveMQ / Artemis)
  • CDI: 依存性注入

他言語の AP サーバ的存在

言語AP サーバ相当Web サーバとの連携
PHPPHP-FPMNginx fastcgi_pass / Apache mod_proxy_fcgi
PythonuWSGI / Gunicorn / DaphneNginx proxy_pass
RubyPuma / Unicorn / PassengerNginx proxy_pass
Node.jsNode プロセス自体Nginx proxy_pass
Gonet/http バイナリ自体Nginx proxy_pass または直配
.NETKestrelIIS / Nginx

FAQ

Q: Tomcat だけで運用してはいけない?
A: 可能です。ただし本番では Nginx を前段に置くのが定石。TLS 終端、静的配信、レート制限、複数 Tomcat の LB を任せられます。

Q: Spring Boot 時代に AP サーバの知識は不要?
A: 必要です。Spring Boot 内部は Tomcat / Jetty / Undertow が動いており、コネクタ・スレッドプール・タイムアウトのチューニングはこれらに対する設定です。

Q: Java EE と Jakarta EE の違い
A: 名称とパッケージ名のみ。javax.*jakarta.* に変更。Jakarta EE 9+ では import 文の書き換えが必要です。

編集
Post Share
子ページ
  1. Apache HTTP Server
  2. Apache Tomcat
  3. Nginx
同階層のページ
  1. 開発環境
  2. 仮想環境
  3. プロジェクト管理(プログラム)
  4. プロジェクト管理(グループウェア)
  5. ネットワーク
  6. バージョン管理
  7. Webサーバー / アプリケーションサーバー
  8. エミューレーター
  9. システム管理
  10. ゲームエンジン
  11. 3Dグラフィックス
  12. 学習・教育用ソフトウェア
  13. Webサイト作成
  14. シミュレーター
  15. Microsoft Office
  16. エディタ
  17. BIM
  18. Bluetooth
  19. ブラウザ
  20. その他