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

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

新規登録して質問してみよう
ただいま回答率
85.50%
nginx

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

Q&A

解決済

2回答

2944閲覧

nginxでIPとドメイン名を完全一致して振り分ける方法

Auxo

総合スコア34

nginx

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

0グッド

0クリップ

投稿2015/04/20 13:33

nginxをWEBサーバとして利用しています。

対象のサーバに複数にIPが設定されており、それぞれのIPにドメインのAレコードが向けられています。

この時、各設定はそれぞれのIPアドレスとサーバ名の組み合わせが完全に一致したもののみ反応するように、それ以外はデフォルトの設定が読み込まれるようにしたいのですがうまくいきません。

lang

1server { 2 listen 80 default_server; 3 root /home/default; 4} 5server { 6 listen 192.168.0.1:80; 7 server_name example.co.jp; 8 root /home/examplecojp; 9} 10server { 11 listen 192.168.0.2:80; 12 server_name example.com; 13 root /home/examplecom; 14}

このような設定の時に、例えばexample.comのAレコードに「192.168.0.1」が設定されていても、2つめや3つめの設定ではなく、1つ目のデフォルトに設定されているルートディレクトリが反応するようにしたいのです。

しかし、上記のように設定しますと先ほどの例では2番目の設定が反応してしまいます。

どのように修正すればIPとサーバ名が完全に一致した場合のみ反応するように設定できるでしょうか?

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

server {
listen 192.168.0.1:80;
server_name example.co.jp;

erver {
listen 192.168.0.2:80;
server_name example.coj;

だけで、192.168.0.1 でかつ example.co.jp
だけで、192.168.0.2 でかつ example.com

へのそれぞれのエントリーに振り分けになります

ただし、
server {
listen *:80 default_server;

を、用意して、どこにも当てはまらないものの受け先を作らないのと
先に見つけたエントリーに行ってしまいます。

投稿2018/07/22 05:50

編集2018/07/22 05:54
asakawaya

総合スコア45

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こんな感じでいかがでしょうか(動作確認はしておりませんが。。。)

lang

1server { 2 listen 80 default_server; 3 root /home/default; 4} 5server { 6 listen 192.168.0.1:80; 7 server_name example.co.jp; 8 root /home/examplecojp; 9 if ($server_addr != 192.168.0.1) { 10 set $test 1 11 } 12 if ($host !~* example.co.jp) { 13 set $test 1 14 } 15 if ($test) { 16 rewrite ^ http://(DefaultのURL)$request_uri?; 17 } 18} 19server { 20 listen 192.168.0.2:80; 21 server_name example.com; 22 root /home/examplecom; 23 if ($server_addr != 192.168.0.2) { 24 set $test 1 25 } 26 if ($host !~* example.com) { 27 set $test 1 28 } 29 if ($test) { 30 rewrite ^ http://(DefaultのURL)$request_uri?; 31 } 32}

アクセス先のIPアドレスとホスト名をチェックし、一致しない場合は「$test」というフラグを立てます。
フラグが立っている場合、default_serverへリダイレクトします。

投稿2015/04/20 14:41

hyper-drums-ko

総合スコア736

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Auxo

2015/04/20 15:45

ご回答ありがとうございます。 コメントの内容で実現したい内容の動作が確認できました。 あとは細かい挙動を自分で調整してみたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問