Apache日記

mod_deflateでコンテンツ圧縮

1 Mins read

Apacheでは結構、昔からコンテンツの圧縮が可能だったが、
久しぶりに設定したのを忘れないように覚書!

今回はApache2.2系に設定

そもそもgzipでの圧縮のメリット、デメリットは?
■メリット
・ネットワークトラフック軽減
・ファイル減による通信速度向上
・トラフックの低下に伴うネットワークアクセスに使用されていたサーバーCPU使用量が軽減

■デメリット
・圧縮の処理為にタイムロス
・圧縮の処理為、サーバーCPU負荷増
・解凍の処理為、クライアントCPU負荷増
・HTTP1.1以上の通信が必要
・圧縮によりProxyサーバーなどへの影響

こんなもんでしょうか。

圧縮はサーバーマシンもクライアントマシンもスペックが上がってきている為、
問題(サーバーサイドは確認してくださいね。)はないでしょうし、
ネットワーク負荷も下がれば公共に対しても良いことしているので
速度Upと一日一善?ってことでやりましょう。

まずは「mod_deflate.so」をconfファイルに設定し以下の記述を追加してください。

#
# Deflate gzipにてコンテンツ圧縮
# 
 
#==============================================
#ディレクティブは zlib が一度に圧縮する塊の大きさをバイト単位で指定します。
#==============================================
DeflateBufferSize 8096
 
#==============================================
#ディレクティブは 圧縮の程度を設定します。大きな値では、
#より圧縮が行なわれますが、 CPU 資源を消費します。
#値は 1 (低圧縮) から 9 (高圧縮) です。
#==============================================
DeflateCompressionLevel 9
 
#==============================================
#圧縮比に関するメモがリクエストに付加されることを指定します。
#メモ (note) の名前はディレクティブに指定された値です。
#メモはアクセスログに 値を記録し、統計を取る目的にも使えます。
#確認できたらコメントしておくほうがパフォーマンスによろしい
#==============================================
#DeflateFilterNote Input instream
#DeflateFilterNote Output outstream
#DeflateFilterNote Ratio ratio
 
#LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
#CustomLog /hoge/logs/deflate_log deflate
 
#==============================================
#zlib が圧縮に使うメモリのレベルを設定します (1 から 9 の間の値)。
#(訳注: 2 を底とする対数の値になります。 8 程度が良いでしょう。)
#==============================================
DeflateMemLevel 8
 
#==============================================
#zlib の圧縮用ウィンドウ (訳注: zlib で使用される履歴バッファ) の大きさを指
#定します (1 から 15 の間の値)。
# 一般的に大きなウィンドウサイズを使用すると圧縮率が向上します。
# (訳注: 2 を底とする対数の値になります。 8 から 15 にするのが良いでしょう。)
#==============================================
DeflateWindowSize 15
 
#==============================================
#Output Compression
#圧縮機能は DEFLATEフィルタ により実装されています。
#以下のディレクティブはそのディレクティブのある コンテナ中のドキュメントを
#圧縮するようにします:
 
#上位Pathより機能を有効にする
#==============================================

 
# Insert filter
SetOutputFilter DEFLATE
 
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
 
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
 
# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
 
# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
 
# Don't compress images
#SetEnvIfNoCase Request_URI \\.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary
 
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
 
#通常、特定のMIMEタイプについてのみ圧縮したいのであれば、
#AddOutputFilterByType ディレクティブを使用します。
#次に Apache のドキュメントの html ファイルのみの圧縮を有効にする例を示します。
#AddOutputFilterByType DEFLATE text/html text/plain text/xml #連続指定可
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rdf+xml

注意!Win版では以下をコメント!Proxyなどバッティングは調査が必要
「Header append Vary User-Agent env=!dont-vary」

こんな感じであとはYSlowを使って確認してみましょう!

Related posts
日記

Swagger EditerをDockerでローカル起動

1 Mins read

swagger

API開発で設計したDocment管理として使用できサンプルコードとしてJSONにしてくれて、よしなにPostmanみたいな動きしてくれるやつ

最近現場で使っているところが増えてる

ローカルでサーバー起動(例は3つ、外部APIサーバーが3つある場合などなど)

docker pull swaggerapi/swagger-editor
docker run -d -p 8090:8080 swaggerapi/swagger-editor
docker run -d -p 8091:8080 swaggerapi/swagger-editor
docker run -d -p 8092:8080 swaggerapi/swagger-editor

http://localhost:8090 などをブラウザで開き

ソース管理と一緒にリポジトリ内などにあるyamlファイル内容をコピペでブラウザ左Windowへ貼り付け

get、postなどテストをおこなう

※APIなので多少仕様の理解が必要となる

よく一緒に使われるのが OpenAPI

こちらはAPI設計ファイルとなったyamlファイルを読み込ませることにより指定した言語としてI/O部分のソースコードを自動でジェネレートしてくれるツール、ただし良いところばかりではなく、間違ったソースもジェネレートしてくるから地雷除去が必要な場面に出くわすこと多い

 

 

日記

AlmaLinux 8 GPG キー変更の準備をする

1 Mins read

dnfコマンドでエラー

dnf update

AlmaLinux 8 - BaseOS 485 kB/s | 3.4 kB 00:00 
GPG 鍵 0xC21AD6EA をインポート中: 
Userid : "AlmaLinux <packager@almalinux.org>" 
Fingerprint: E53C F5EF 91CE B0AD 1812 ECB8 51D6 647E C21A D6EA 
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux 
これでよろしいですか? [y/N]: y 
鍵のインポートに成功しました 
鍵をインポートしても役に立ちませんでした。鍵が間違っていませんか?

キーが新しくなった

AlmaLinux 8 GPG キーの変更

2024 年 1 月 12 日に、更新された GPG キーを使用して AlmaLinux 8 の RPM パッケージとリポデータへの署名を開始します。以下の手順を実行すると、切り替え後も引き続き問題なくアップデートを受信できるようになります。

システムに新しい AlmaLinux 8 GPG キーが既に含まれており、それを信頼していることを確認したい場合は、それをインポートするだけです。

sudo rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux
日記

MongoDB、Mongo Expressの環境をDockerで立ち上げる(docker-compose)

1 Mins read

ブラウザから

http://localhost:8081

ME_CONFIG_MONGODB_ADMINUSERNAME: root 
ME_CONFIG_MONGODB_ADMINPASSWORD: password

で指定したID,Passをブラウザへ入れてもログインできない?はて?

ブラウザのBasic認証用ID,Passの環境変数追加設定が必要だったらしい

ME_CONFIG_BASICAUTH_USERNAME: admin
ME_CONFIG_BASICAUTH_PASSWORD: password

「docker-compose.yml」ファイル作成(下のコード)
「docker-compose up -d」コマンドをターミナルで実行


version: '3.1'

services:

  mongo:
    container_name: mongo-dev
    image: mongo
    restart: always
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: password
    volumes:
      - ./configdb:/data/configdb
      - mongoDataStore:/data/db

  mongo-express:
    container_name: mongo-express
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: password
      ME_CONFIG_MONGODB_URL: mongodb://root:password@mongo:27017/
      ME_CONFIG_BASICAUTH_USERNAME: admin
      ME_CONFIG_BASICAUTH_PASSWORD: password

volumes:
  mongoDataStore:
    driver: local

Mac ターミナルからも接続確認(testDBはexpressからなどcreateしておくこと)

mongosh "mongodb://root:password@localhost:27017/testDB?authSource=admin"

Current Mongosh Log ID: 65be609e7384r68762b10b0
チームを強化する

サービスの
サブスクリプションの利点を説明するテキストを追加します。