質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Apache

    1819questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • nginx

    840questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • SSL

    503questions

    SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

  • HTTPS

    256questions

    HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

nginxをリバースプロキシサーバとして使いたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 398

sekkati

score 16

 前提・実現したいこと

前提:
①新人のプログラマです。なぜか客先でインフラ関係を整備しなければいけなくなり、大変困っています。
②apacheで動いている既存のシステムをそのままにして、nginxをリバースプロキシサーバとして使用したいです。
③apacheで動いている既存システムはポート番号によってプログラムが分かれています。
(:8060 :8070 :8080 :8090) そのうちの:8090に対しssl化したnginxをはさむイメージ?
④今今ssl化自体はオレオレ証明書(自己署名)でいいとのこと。
⑤下記URLを参考にssl化していいとのことでmod_sslをyumで導入しました。
(Opensourcetechブログ: 簡単に nginx でhttpsを実施する方法)

# yum list installed | grep mod_ssl
mod_ssl.x86_64          1:2.2.15-69.el6.cento


⑥apache側のアプリケーションには特定のネット(ポケットwi-fi)からしかアクセスできないみたいです。

実現したいこと:
①apacheで動くシステムはssl化されておらず、ssl化されたnginxをリバースプロキシとしたいです。
②ssl化したnginxからどのようにapache側のサイト(IP:8090ポート)に移動するようにすればいいのでしょうか?

私自身、簡単な環境構築しかしたことがなく、言葉足らずな部分もあるかと思います。小さなことでもご指摘ください。よろしくお願いします。

 該当のソースコード

/etc/nginx/conf.d/default.confは下記のようになっています。

### httpでアクセスしてきた場合はhttpsにリダイレクト
server {
    listen 80;
    server_name localhost;
    return 301 https://$host$request_uri;
}

### https設定
server {
    ## 追加7/13
    listen       443 ssl;

    server_name  localhost;

    ## 追加7/13
    ssl_certificate /etc/nginx/localhost.crt;
    ssl_certificate_key /etc/nginx/localhost.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;

    ## 編集7/18
    location / {
        proxy_pass http://192.168.100.110:8090;
#        proxy_redirect                         off;
#        proxy_set_header Host                  $host;
#        proxy_set_header X-Real-IP             $remote_addr;
#        proxy_set_header X-Forwarded-Host      $host;
#        proxy_set_header X-Forwarded-Server    $host;
#        proxy_set_header X-Forwarded-For       $proxy_add_x_forwarded_for;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

/etc/httpd/conf/httpd.confは下記のようになっています。(名前等変えています) & (:8090だけ抜粋)

<VirtualHost *:8090>
                ServerName localhost
                DocumentRoot "/opt/abcd/www.defg"
                ErrorLog "logs/error_abcd.log"
                CustomLog "logs/com-accsess.log" common
<Directory "/opt/abcd/www.defg">
   Allow Override All
   Allow from all
</Directory>
</VirtualHost>

 補足情報(FW/ツールのバージョンなど)

フレームワーク:MVVMフレームワーク(フレームワークもどきと呼ばれてました)

$ cat /etc/redhat-release
CentOS release 6.10 (Final)

$ nginx -v
nginx version: nginx/1.14.0

$ httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Jun 19 2018 15:45:13

$ php -v
PHP 5.6.13 (cli) (built: Sep  3 2015 14:19:17)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

$ php-fpm -v
PHP 5.6.36 (fpm-fcgi) (built: Apr 25 2018 10:12:10)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

※上記のphpとphp-fpmの具体的な違いもわかっていないです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

location / {...}の部分でproxy_passを設定すればnginxがリバースプロキシとして動作するようになります。https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/18 13:13 編集

    YouheiSakurai様 ご回答ありがとうございます。今今default.confを修正してサイトにアクセスすると

    An error occurred.Sorry, the page you are looking for is currently unavailable.
    Please try again later.If you are the system administrator of this resource then you should check the error log for details.Faithfully yours, nginx.

    という画面が表示されてしまいます。/var/log/nginx/error.logを確認すると

    2018/07/18 13:00:37 [error] 22635#22635: *12 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.100.101, server: localhost, request: "GET / HTTP/1.1", upstream: "http://192.168.100.110:8090/", host: "192.168.100.110"

    と同じような文言が複数行にわたって書かれていました。。

    キャンセル

  • 2018/07/18 13:29

    upstream (http://192.168.100.110:8090/)がConnection refusedしたようです。それがなぜかログ等を見てみると解決の糸口が見つかると思います。

    キャンセル

  • 2018/07/18 13:46

    YouheiSakurai様 ご回答ありがとうございます。

    2018/07/18 13:00:37 [error] 22635#22635: *12 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.100.101, server: localhost, request: "GET / HTTP/1.1", upstream: "http://192.168.100.110:8090/", host: "192.168.100.110"
    2018/07/18 13:00:37 [error] 22635#22635: *12 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.100.101, server: localhost, request: "GET /favicon.ico HTTP/1.1", upstream: "http://192.168.100.110:8090/favicon.ico", host: "192.168.100.110", referrer: "https://192.168.100.110/"

    この二つのセット(*12の部分の数字違い)がエラーログに並んでいるように見えます。。
    ファビコン周りでしょうか?自分でググったところphp-fpm関係っぽいですが、その部分の設定も必要なのでしょうか?解らなくて若干混乱しています。。

    キャンセル

  • 2018/07/18 13:56

    favicon.icoはブラウザが勝手にリクエストしているだけなので無視でOKです。

    client: 192.168.100.101 -(GET /)-> server: 192.168.100.110:443 -(プロキシ)-> upstream: "http://192.168.100.110:8090/"

    という状況だと思うのでupstreamがなぜrefuseするのかupstreamのログを見ると良いと思います。nginx自体はちゃんと設定できていそうだと感じます。

    キャンセル

  • 2018/07/18 14:23 編集

    YouheiSakurai様 ご回答ありがとうございます。(何度も申し訳ないです!!)

    ご指摘いただいたupstreamのログの場所がわからないです。そもそもupstreamの意味がわからないのでググったのですがロードバランサに使う設定でしょうか?

    先ほど追記させていただいたのですが、
    ⑥apache側のアプリケーションには特定のネット(ポケットwi-fi)からしかアクセスできないみたいです。
    ↑が原因じゃないかとhttpd.conf周りを調べています。

    キャンセル

  • 2018/07/18 14:46 編集

    そもそも、同サーバにあるApacheを停止していました。

    # service httpd start
    httpd を起動中: Warning: DocumentRoot [/opt/aiueo/www] does not exist
    (98)Address already in use: make_sock: could not bind to address [::]:80
    (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
    no listening sockets available, shutting down
    Unable to open logs
    [失敗]

    今今Apache側のポート番号80とnginxの80が被っているように思えてきました。

    キャンセル

  • 2018/07/18 14:53 編集

    【httpd.conf】
    # Listen 80
    Listen 8080
    Listen 8090
    Listen 8070
    Listen 8050
    Listen 8060

    とし、保存すると今度は

    # service httpd start
    httpd を起動中: Warning: DocumentRoot [/opt/aiueo/www] does not exist
    (98)Address already in use: make_sock: could not bind to address [::]:443
    (98)Address already in use: make_sock: could not bind to address 0.0.0.0:443
    no listening sockets available, shutting down
    Unable to open logs
    [失敗]

    となりました。443は開いていないような・・・
    nanoエディタないで443の文言を探しましたが見つかりませんでした。

    キャンセル

  • 2018/07/18 15:03 編集

    少しそれてしまいました。
    Apache側のエラーログということでしょうか、/var/log/httpd/ 直下に複数エラーログがあるので、質問事項のhttpd.confでいうlogs/error_abcd.logがエラーログということになるのでしょうか。中身を確認したところ何も書かれていませんでした。

    キャンセル

  • 2018/07/18 16:05

    「Apache側のエラーログということでしょうか」->YESです。nginxのupstreamは、今回の構成ではApacheです。

    キャンセル

  • 2018/07/18 16:11 編集

    YouheiSakurai 様 ありがとうございました!

    チームのエンジニアに助けていただき解決することができました!!!apacheが起動していないこと、443ポートに関してはssl.confが読み込まれていました。用件的にはリダイレクト云々ではなく、nginxの443だけ開けば良かったそうなので、そのようにdefault.conf側も修正しました。

    キャンセル

  • 2018/07/18 16:22

    解決できてよかったですね。

    キャンセル

0

同じチームのエンジニアの方に助けていただきました。

①nginx側は443ポートだけ開いて80番ポートは閉じました。

【default.conf】

### httpでアクセスしてきた場合はhttpsにリダイレクト
#server {
#    listen 80;
#    server_name localhost;
#    return 301 https://$host$request_uri;
#}

②apacheが起動していないこと→起動すると下記エラーが出る

(98)Address already in use: make_sock: could not bind to address [::]:443
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443

/etc/httpd/conf.d直下の*.confなるものがすべて読み込まれていました。
こちらのssl.confの443ポートを閉じました。

【httpd.conf】

#
# Load config files from the config directory "/etc/httpd/conf.d".
#
Include conf.d/*.conf

こちらの443ポートを閉じました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Apache

    1819questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • nginx

    840questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • SSL

    503questions

    SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

  • HTTPS

    256questions

    HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。