自分自身で、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を暗号化するためのツールを取り、私のスクリプトでそれを使用できることを理解していますが、突然、既製の「理想」がありますか?

Source: https://habr.com/ru/post/J434010/


All Articles