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

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

ただいまの
回答率

90.12%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,475

sekkati

score 20

 前提・実現したいこと

前提:
①新人のプログラマです。なぜか客先でインフラ関係を整備しなければいけなくなり、大変困っています。
②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 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.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる