ansibleguy.infra_nginx

Nginx

Ansibleロール - Nginxウェブサーバー

Ansibleロールを使用して、Linuxサーバーに一つまたは複数のNGINXサイトをデプロイします。

コーヒーを買ってください

Molecule テストステータス YamlLint テストステータス PyLint テストステータス Ansible-Lint テストステータス Ansible Galaxy

Moleculeログ: 短縮版, 完全版

テスト済み:

  • 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_rootauth_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
ライセンス
other
ダウンロード
6.1k
所有者
[email protected] | GPG: https://badges.ansibleguy.net/public.gpg