ansibleguy.infra_nginx
Ansibleロール - Nginxウェブサーバー
Ansibleロールを使用して、Linuxサーバーに一つまたは複数のNGINXサイトをデプロイします。
テスト済み:
- Debian 11
- Debian 12
インストール
# 最新版
ansible-galaxy role install git+https://github.com/ansibleguy/infra_nginx
# Galaxyから
ansible-galaxy install ansibleguy.infra_nginx
# またはカスタムロールパスに
ansible-galaxy install ansibleguy.infra_nginx --roles-path ./roles
# 依存関係をインストール
ansible-galaxy install -r requirements.yml
# 基本認証を使う場合: Pythonの依存関係をインストール
python3 -m pip install -r requirements.txt
使用方法
簡単なAnsible GUIが欲しいですか?私のAnsible WebUIをチェックしてみてください。
設定
必要に応じてnginx辞書を定義します!
nginx:
config:
client_max_body_size: '500m'
ssl_session_timeout: '15m'
sites:
some_proxy:
mode: 'proxy'
domain: 'some.guy.net'
aliases:
- 'service.guy.net'
port_ssl: 8443
port_plain: 8080
proxy: # デフォルトのプロキシターゲットはlocalhost
port: 50000 # ターゲットポート
cache: # 上流コンテンツキャッシング
enable: true
ssl:
mode: 'existing' # 既存の証明書をターゲットサーバーにコピー
security:
# ユーザーエージェントマッチングに基づいて悪質なボットをフィルタリング
block_script_bots: true
block_bad_crawler_bots: true
guys_statics:
mode: 'server'
domain: 'static.guy.net'
serve:
path: '/var/www/static'
ssl:
mode: 'snakeoil'
config: # 設定をキーと値のペアで追加
LimitRequestFields: 10
config_additions: # カスタムの設定行リストを追加
- 'location = /favicon.ico {alias /var/not_www/site_guys_statics/favicon.ico;}'
git_stuff:
mode: 'redirect'
redirect:
target: 'https://github.com/ansibleguy'
ssl:
mode: 'letsencrypt'
letsencrypt:
email: '[email protected]'
security:
restrict_methods: false
fileshare:
mode: 'server'
domain: 'files.guy.net'
serve:
path: '/var/www/files'
basic_auth:
enable: true
provider: 'file'
file:
users:
some_user: 'some_password'
実行
プレイブックを実行します:
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml
特定のサイトだけを処理するには: (時間の節約)
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e only_site=SITE_NAME
# 複数のカンマ区切りのサイトも動作します
便利なタグもいくつかあります:
- base => 基本設定のみ; サイトには手を加えません
- sites
- config => サイト設定のみを更新 (証明書は除く)
- certs
- letsencrypt
- auth
- only_certs (スキップタグとして使用可)
エラーをデバッグするには、実行時に「debug」変数を設定できます:
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e debug=yes
機能
パッケージのインストール
- Ansibleの依存関係 (最小限)
- Nginx
設定
複数サイト/サーバーのサポート
三つの設定モード:
- proxy (デフォルト)
- serve
- redirect
'config'および'config_additions'パラメータを使用して特定の設定をサポート
GeoIPによる'locations'のフィルタリングオプション => 近日登場 (:
デフォルト設定:
- 無効化: <TLS1.2、非安全な暗号、autoindex、servertokens
- セキュリティヘッダー: HSTS、X-Frame、Referrer-Policy、Content-Type nosniff、X-Domain-Policy、XXS-Protection
- DDoS対応の制限
- 自己署名証明書の使用
- HTTP2が有効で、HTTP1.1にフォールバック
- IPv6サポートが有効
SSLモード (詳細は: CERT ROLEをご覧ください)
- selfsigned => 自己署名証明書を生成
- ca => 最小限の証明書機関とそれによって署名された証明書を生成
- letsencrypt => LetsEncrypt certbotを使用
- existing => 証明書ファイルをコピーまたは既存のものを使用
デフォルトオプトイン:
- POST/GET/HEADメソッドの制限
- localhostでのステータスページリスナー
- syslogへのログ記録
- http2
デフォルトオプトアウト:
- プロキシモードキャッシング
- 知られているスクリプトボットのブロック
- 知られている悪質なクローラーボットのブロック
情報
注意: このロールは現在Debian系システムのみをサポートしています
注意: ロールの機能のほとんどは、オプトインまたはオプトアウトできます。
利用可能なオプションのすべては、メインのサイトデフォルトファイルにあるデフォルト設定を参照してください!
情報: 多くの変数は、'グローバル'または'サイト別'のスコープで設定できます。
サイト設定が常にグローバル設定を上書きします。
注意: このロールは、サイトの非暗号化「サーバー」が暗号化された接続にリダイレクトすることを期待しています。
注意: すべてのドメイン名がサイト/サーバーに「キャッチ」されるようにするには、エイリアスまたはドメインにアンダースコア '_' を追加する必要があります!
何も指定しない場合は、自動的に行われます。警告: 提供するすべての設定/変数が有効性をチェックされるわけではありません。悪い設定はロールを壊す可能性があります!
情報: デフォルトの設定やヘッダーを無効にするには、それらの値を'' (空文字列)に設定してください。
情報: ファイアウォールでGeoIPフィルタを介してWebリクエストをフィルタリングしている場合、LetsEncryptは世界にポート80を開放するだけで動作します。
'.well-known/acme-challenge/'以外のリクエストは443にリダイレクトされます。
情報: LetsEncryptの更新が動作するためには、以下へのアウトゴーイング接続を許可する必要があります:
80/tcp、443/tcp+udpをacme-v02.api.letsencrypt.org、staging-v02.api.letsencrypt.org (デバッグモード) およびr3.o.lencr.org
情報: このロールは基本認証の設定もサポートしています。
高度な使用ケースでは、OAuthプロキシなどを実装するために
site.config_additions_root
にauth_requestを設定することを検討してください。情報:
plain_only
フラグを設定してHTTPSを無効にすることができます。これは、別のプロキシサーバーの背後にいる場合に便利です。
Role to configure a nginx webserver in one of three basic config modes: proxy, redirect, server
ansible-galaxy install ansibleguy.infra_nginx