自分自身で、httpsとファイアウォールを使用して、UbuntuでApache TomcatのNginxプロキシを5分で開発または構成する





私は管理者ではありませんが、時々、誰かに委任するよりも自分自身を解決するのが簡単な(そしてより面白い)タスクがあります。



時々、サーブレットコンテナ(ほとんどの場合、Apache Tomcat)を「レイズ」し、そのプロキシ、ssl終了(または単にhttps)を設定し、ファイアウォールですべてをカバーする必要があります(sshとhttp / httpsのみを残します)。



たまたま先週、この問題を3回解決しました(星になり、その前-2年前)。この経験はこの小さな作品に変わりました。



したがって、Ubuntuサーバーが18.04または16.04の場合(ほとんどの場合、以前のバージョン14.04で問題は発生しません)。 Ubuntuサーバーをお持ちでない場合は、たとえばDigital Ocean (私の紹介リンク)にすばやく「ピックアップ」できます。 記事を書いた後、ローンを指定した場合、新しいアカウントのDOは60日間で100ドルを試すことに気付きました。



DNS



Let's Encryptから無料のhttps証明書を取得する簡単なスキームの場合、DNSサーバーにアクセスする必要があります。 UbuntuサーバーのIPアドレスを、たとえばxyzという名前で書き込みます。 明確にするために、mydomain.comドメインがあるとしましょう。 サーバーのDNS名はxyz.mydomain.comになります



設置



Apache Tomcatをインストールします(バージョン8を使用します)



apt install tomcat8
      
      





そして今、Nginx



 apt install nginx-core
      
      





カスタマイズ



Nginx



DNSサーバー名に以前に登録されたNginxを構成します(ファイル/ etc / nginx / sites-available / default



 server_name xyz.mydomain.com;
      
      





インストールされたApache Tomcatへのリンクを登録します(何も変更しなかった場合、ポート8080で「存続」します)。 サーバーブロックにアップストリームブロックを追加する必要があります



 upstream tomcat { server 127.0.0.1:8080 fail_timeout=0; } server { ...
      
      





ロケーションブロックを変更し、すべてのトラフィックをApache Tomcatにリダイレクトします



 server { ... location / { # try_files $uri $uri/ =404; include proxy_params; proxy_pass http://tomcat/; }
      
      





すべてが正しく入力されたことを確認します



 service nginx configtest
      
      





nginxを再起動します



 service nginx restart
      
      





Apache Tomcat



原則として、この部分はオプションであり、実際のIPアドレス、ポート、リクエストのスキーム(httpsについて話している)、およびリクエストされたサーバーがTomcatに送信されることが重要でない場合、このステップは省略できます。 ただし、場合によってはこの手順が必要になります(たとえば、Java Web StartまたはJNLPテクノロジの場合)。



<Host />ブロックの/etc/tomcat8/server.xmlファイルに追加します。



 <Host> ... <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" remoteIpProxiesHeader="x-forwarded-by" protocolHeader="x-forwarded-proto" /> </Host>
      
      





Tomcatを再起動する



 service tomcat8 restart
      
      





HTTP証明書



httpを介した検証を伴うHTTPS証明書は、certbotボット、またはむしろnginxの修正を取得するのに役立ちます-python-certbot-nginx



Ubuntu 18.04では、certbotをインストールするだけで実行できます



 apt install python-certbot-nginx
      
      





Ubuntu 16.04の場合-リポジトリなどの追加に手を加える必要があります( リンクの詳細ガイドを参照 )。



打ち上げ



 certbot --nginx
      
      





このプロセスでは、電子メールを指定し、ライセンス契約に同意し、Let's Encryptでデータを「手探り」させず、証明書の発行先のDNS名を確認し、ボット自体がnginxを「構成」することに同意します。



出来上がり:)



念のため、証明書の更新が問題なく行われることを確認します(証明書は90日間発行され、その後、同じ期間無期限に延長できます)。



 certbot renew --dry-run
      
      





内部の妄想については、cronファイルが適切であることを確認します



 ls -al /etc/cron.d/certbot
      
      





ファイアウォール



仮想マシンの停止とバックアップ(スナップショット)を行います。



 ufw allow ssh ufw allow http ufw allow https ufw default allow outgoing ufw default deny incoming ufw show added
      
      





祈って!

 ufw enable ufw status
      
      





すべてがうまくいったことを確認します-サイトはhttps経由でアクセスでき、httpトラフィックはリダイレクトされ、前述のポートを除くポートとsshは安全に閉じられます。



PSこのテキストが誰かに役立つことを心から願っており、建設的な批判を喜んでいます。



PPSそれとも、すべてを知っているALLがWindows用のcertbotの置き換えを教えてくれるでしょうか? 最初の証明書を取得する必要があります(理想的には、スケジュールに従って更新するか、シックな輝きさえする)。nginxを自分で構成しました。 はい、私はあなたがおそらくIISを暗号化するためのツールを取り、私のスクリプトでそれを使用できることを理解していますが、突然、既製の「理想」がありますか?



All Articles