2024年5月26日日曜日

504 Gateway time outについて考察

以下のアイドルタイムの変更が必要なのかもしれない 

登場リソース;

①ALB                           : Idle timeoutの値を60秒(例)に設定

②PHP                          : max_execution_time = 180秒 [スクリプトの最大実行時間](例)

③SQL(MS SQL2019)   : remote query timeout 300秒(例)


参照先:

https://qiita.com/nagaakihoshi/items/f7326978221ee053d208


https://repost.aws/knowledge-center/504-error-alb

2024年5月25日土曜日

phpのチューニング(504 Gateway Timeout Error)

504 Gateway Timeout Errorが出たので、改善方法を記載してみる


1)php.iniを作成する

; エラーログを有効にする
log_errors = On

; エラーログの出力先ファイルを指定する
error_log = /var/log/php_errors.log

; エラー表示を有効にする(開発環境用)
display_errors = On

; エラーレポートのレベルを指定する(開発環境用)
error_reporting = E_ALL

; デバッグレベルのログを出力する
; 以下のように設定することで全てのログが出力される
log_errors_max_len = 0

max_execution_time = 180
max_input_time = 300


2)dockerfileの作成を行う

FROM php:7.4-apache


# 新しいphp.iniファイルをコピー
COPY php.ini /usr/local/etc/php/


3)php infoにて、設定内容を確認してみる



2024年5月22日水曜日

apache2 チューニング(for dockerfile)

参照先:
https://qiita.com/kaihei777/items/4e3c257e073eb886b38a

RUN sed -i 's/KeepAliveTimeout 5/KeepAliveTimeout 750/' /etc/apache2/apache2.conf
RUN sed -i 's/Timeout 300/Timeout 750/' /etc/apache2/apache2.conf

2024年5月20日月曜日

FROM php:7.4-apache(apacheのuser&groupの変更方法)

訳あって、FROM php:7.4-apacheでの実行ユーザーとグループの変更が必要になってので
以下の記載により再現させてみることに。


1)start-apache.shを作成

#!/bin/bash
# Apacheをapacheユーザーとして起動

# ログファイルの所有権を変更
chown apache:apache /var/log/apache2 /var/log/apache2/*

# Apacheをapacheユーザーとして起動
exec gosu apache /usr/sbin/apache2ctl -D FOREGROUND


2)dockerfileの作成を行う

FROM php:7.4-apache


# 新しいユーザー(test)とグループ(apache)を作成
RUN groupadd -r apache
RUN useradd -r -g apache test

# Apacheの環境変数のファイルを更新する(ユーザーとグループを変更)
RUN sed -i 's/APACHE_RUN_USER:=www-data/APACHE_RUN_USER:=test/g' /etc/apache2/envvars
RUN sed -i 's/APACHE_RUN_GROUP:=www-data/APACHE_RUN_GROUP:=apache/g' /etc/apache2/envvars

# apache log(所有者変更)
RUN chown test:apache -R /var/log/apache2
RUN chown test:apache -R /var/www/html
RUN chown test:apache -R /run/lock/apache2
RUN chown test:apache -R /run/apache2
RUN chown test:apache -R /var/cache/apache2/mod_cache_disk


# gosuのインストールに必要なパッケージのインストール
RUN apt-get update && apt-get install -y \  
wget \  
gnupg2 \  
dirmngr \  
&& rm -rf /var/lib/apt/lists/*

# gosuのインストール
RUN set -eux; \  
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.12/gosu-amd64"; \
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/1.12/gosu-amd64.asc"; \
export GNUPGHOME="$(mktemp -d)"; \  
gpg --keyserver keyserver.ubuntu.com --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \  
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \  
rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \  
chmod +x /usr/local/bin/gosu; \  
gosu --version; \  
apt-get purge -y --auto-remove wget gnupg2 dirmngr

# スクリプトをコピーして実行権限を付与
COPY start-apache.sh /usr/local/bin/start-apache.sh
RUN chmod +x /usr/local/bin/start-apache.sh

CMD ["start-apache.sh"]

2024年5月16日木曜日

対象のフォルダー最下層まで一覧を作成して、再度chmodコマンドを作成するshell

/etc配下のフォルダー最下層まで一覧を作成して、そこからchmodコマンド一覧を作成するshell

-----------------------

 #!/bin/bash

## フォルダーの一覧と権限を取得し、chmodコマンドを生成する
find /etc -type d -exec ls -ld {} \; | awk '{print "chmod",$1,$NF}' > chmod_commands.sh


## 生成されたchmod_commands.shを実行可能にする
chmod +x chmod_commands.sh

## chmod_commands.shを実行してフォルダーの権限を設定する
#./chmod_commands.sh


作成した、chmod_commands.shの中身


 

Redhat linuxのdockerfileイメージで、apacheを実行(apacheユーザで)できない件


以下に追記することで、解消できたので記載します。


1)php-fpm.conf

#add ##
listen = /run/php-fpm/www.sock


2)dockerfileに以下を記載。

# ApacheユーザーのUIDを1001に変更
RUN usermod -u 1001 apache && groupmod -g 1001 apache

# PHP-FPMユーザーのUIDを1001に変更(もし必要なら)
RUN usermod -u 1001 apache && groupmod -g 1001 apache

# ApacheとPHP-FPMのディレクトリの所有権を変更
RUN chown -R apache:apache /var/www && \
chown -R apache:apache /etc/httpd && \
chown -R apache:apache /var/log/httpd && \
chown -R apache:apache /var/run/httpd && \
chown -R apache:apache /var/log/php-fpm && \
mkdir -p /run/php-fpm && \
chown -R apache:apache /run/php-fpm

# ソケットファイルのディレクトリを作成し権限変更
RUN mkdir -p /run/php-fpm && chown -R apache:apache /run/php-fpm

2024年5月15日水曜日

Apache MPM Eventsの値

参照先:
https://qiita.com/rryu/items/5e02ea60e36d7fd956b8

以下、httpd.confに追記する。

<IfModule mpm_event_module>
StartServers 8
MinSpareThreads 50
MaxSpareThreads 175
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 10
</IfModule>


apacheの再起動して、プロセスの確認をしてみる










2024年5月13日月曜日

Apacheの特権分離について

 Apache HTTPサーバーが通常、rootユーザーで起動し、その後特権を降格してからリクエストを処理するメカニズムは、セキュリティと安全性を確保するための重要な設計です。これを理解するために、以下のポイントを詳しく解説します。

  1. 起動時の特権 Apache HTTPサーバーは通常、起動時にはrootユーザーとして実行されます。これにより、Apacheは必要なファイルやポートにアクセスするために必要な特権を持つことができます。

  2. 特権の降格(特権分離) Apacheが必要な初期設定やファイルへのアクセスを完了した後、特権を降格します。特権の降格はセキュリティ上の理由から行われます。root権限を持つプロセスは攻撃者によって悪用される可能性が高いため、リクエストを処理する段階では特権を持たない一般ユーザーとして動作することが推奨されます。

  3. セキュリティ向上 特権の降格により、Apacheは攻撃者が攻撃に使用できる潜在的な脆弱性を利用されにくくなります。例えば、特権を持つプロセスがリクエストを処理する場合、攻撃者はそのプロセスを標的にしようとします。しかし、特権を持たない一般ユーザーとして動作するApacheは、攻撃者にとっては難しいターゲットとなります。

  4. セキュリティ対策の重要性 特権の降格はセキュリティ対策の重要な要素の1つですが、それだけでなく他のセキュリティ対策も必要です。例えば、適切なファイルアクセス権限の設定、セキュリティパッチの適用、DoS攻撃への対策などがあります。

総じて、Apache HTTPサーバーがroot権限で起動してから特権を降格するメカニズムは、システム全体のセキュリティを向上させる重要な手段です。これにより、潜在的な攻撃からシステムを保護し、安全性を確保することが可能となります。

MPM prefork(Apache):チーニング編


 1)/etc/httpd/conf.d/mpm.confを作成する

<IfModule mpm_prefork_module>
StartServers 400
MinSpareServers 400
MaxSpareServers 400
ServerLimit 400
MaxClients 400
MaxRequestsPerChild 80
</IfModule>

2)00-mpm.confの編集を行う。

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines. See the httpd.conf(5) man
# page for more information on changing the MPM.

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#
# NOTE: If enabling prefork, the httpd_graceful_shutdown SELinux
# boolean should be enabled, to allow graceful stop/shutdown.
#

## mpm_prefork ##
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#

## Default setting ##
#LoadModule mpm_event_module modules/mod_mpm_event.so


3)httpd.confに追記

KeepAlive On
MaxKeepAliveRequests 80
KeepAliveTimeout 120

4)apache のサービスを再起動






php module installについて

 参照先:

https://dennie.tokyo/it/?p=2511


RUN yum --disableplugin=subscription-manager -y install mod_php

2024年5月10日金曜日

FPMのログを設定(コンテナ用のログ出力)

FPMのログを設定

RUN ln -sf /dev/stderr /var/log/php-fpm/error.log
RUN ln -sf /dev/stderr /var/log/php-fpm/fpm-access.log

2024年5月8日水曜日

apache .htaccessのデバッグについて

dockerfileにapacheを入れているので、以下の記載により詳細なデバッグログが表示される 

RUN sed -i 's/LogLevel warn/LogLevel info rewrite:trace8/g' /etc/apache2/apache2.conf

php log(ECS ログ出力)

# PHPエラーログの設定 ENV PHP_INI_DIR /usr/local/etc/php RUN { \ echo 'log_errors = On' ; \ echo 'error_log = /proc/self/...