Apache設定パターン
本番設定及び、セキュリティ設定
バージョン非表示
code:conf
ServerTokens Prod
ServerSignature off
参考
cmanのhtaccess生成ツール
メンテナンスページの表示
.htaccess
code:.htaccess
ErrorDocument 503 /maintenance.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/maintenance.css
RewriteCond %{REQUEST_URI} !=/icon.png
RewriteCond %{REQUEST_URI} !=/maintenance.html
</IfModule>
※、メンテナンスページに、maintenance.cssとicon.pngを使う場合の設定。
ErrorDocument
ErrorDocument 503 /maintenance.html
503が発生した際maintenance.html をレスポンス。
RewriteBase
ベースパスの設定
RewriteRule
RewriteRuleは、-でURLの置換をしない
フラグについて
LはLastのLで、マッチした後、以降のRewrite処理を行わない設定。
R はリダイレクト
(300〜399)の外にある場合は置換されない。
F
forbidden
暗黙的にLが指定される
正規表現参考
!=で文字列完全不一致チェック
このように設定するとmentainance.htmlが503ステータスでレスポンスされることになる。
全て拒否
.htaccess
code:deny
Order Allow,Deny
デフォルト拒否
後続に許可する設定を入れることができる
Deny from all
全て拒否
txtなどのファイルにアクセス制限を追加する
code:referer
<Files ~ "\.(txt)$">
Deny from all
</Files>
PDFなどのファイルに独自URLを設定する
pdfを表示するが、URLをsomeurlにしておく。
.htaccess
code:pdf用リダイレクトURL
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^someurl/$ wp-content/uploads/some.pdf L </IfModule>
Alias
ドキュメントルート外のディレクトリにマッピング
code:conf
# /download パスをドキュメントルート外のディレクトリにマッピング
Alias /user/download /var/www/download
# ダウンロード用のディレクトリ設定
<Directory /var/www/download>
# ダウンロード用にContent-Dispositionヘッダーを設定
<FilesMatch ".*">
ForceType application/octet-stream
Header set Content-Disposition "attachment"
</FilesMatch>
</Directory>
サイト移行のリダイレクト
301なので永久。
sample.comへのアクセスのみをリダイレクトしたいとき
HTTP_HOSTはアクセスされたドメイン
code:.htaccess
RewriteEngine on
RewriteCond %{HTTP_HOST} ^sample\.com$
全てトップへリダイレクト
code:htaccess
RewriteEngine On
httpとhttpsの両対応するリダイレクト
code:.htaccess
######
# Redirect
RewriteEngine On
# base path
RewriteBase /
RewriteCond %{SERVER_PORT} 80
RewriteCond %{SERVER_PORT} 443
httpsへのリダイレクト
転送Forwarded-Protoがhttpsでないとき、httpsへリダイレクト
code:htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
</IfModule>
CORS
debian
sudo a2enmod headers
モジュール有効化が必要
CORSの設定
apacheのconfファイルで設定
code:conf
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type"
ベーシック認証
apacheのconfファイルで設定
sudo htpasswd -c /var/www/.htpasswd user
.htpasswdファイル作成
code:conf
<Directory "/var/www/sample.com">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
.htaccessで設定
code:.htaccess
# authenticate(Basic)
AuthUserFile /var/www/htpasswd/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
Health Check
health.phpのみ許可する
code:conf
<VirtualHost *:80>
ServerName any
DocumentRoot /var/www/default
<Location />
SetEnvIf Request_URI "/health.php" healthcheck
require env healthcheck
</Location>
</VirtualHost>
参考
basic認証
digitalocean blog
basic認証ファイルを作成するコマンド
apache2はUbuntuなどの場合。
code:basic.sh
sudo htpasswd -c /etc/apache2/.htpasswd username