ブログ移転?しました エックスサーバを契約してみたので、 いろいろカスタマイズできそうなWordPressを使って ブログを作ってみました。 https://gametech.vatchlog.com/ 多分こちらでも同じような記事を書いていくと思います。 忍者ブログ

ばちブロ

プログラミングとか徒然を書いていた(過去形)

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


【NGINX】アクセス元IPアドレスごとにバックエンドサーバを振り分ける方法

nginxでリバースプロキシさせる際に、
SourceIPによってバックエンドサーバを変更したい要件があった。
色々探していたらifを使って出来そうだったのでちょっとやってみました。
location / {
if ($remote_addr = xxx.xxx.xxx.xxx) {
ploxy_pass http://hogehoge1
}
if ($remote_addr = yyy.yyy.yyy.yyy) {
ploxy_pass http://hogehoge2
}
}


こんな感じで設計。
ソースIPがxxx.xxx.xxx.xxxの場合はhttp://hogehoge1へ。
yyy.yyy.yyy.yyyの場合はhttp://hogehoge2へリクエストします。

ちなみに、/24とかで操作したい場合は以下の感じで。
location / {
if ($remote_addr ~* xxx\.xxx\.xxx\.*) {
ploxy_pass http://hogehoge1
}
if ($remote_addr ~* yyy\.yyy\.yyy\.*) {
ploxy_pass http://hogehoge2
}
}

拍手[2回]

PR

【NGINX】connect() failed (113: No route to host) while connecting to upstream というエラー

例のごとく備忘録的な。

nginxにて以下のような構成を構築しようとした。

【クライアント】
 ↓ HTTPS
【リバースプロキシ(nginx)】
 ↓ HTTPS
【WEBサーバ(nginx)】

んで、設定を完了させクライアントから適当にGETしてみたら
なぜかbad gateway(502)が返ってきた。

Serverディレクティブの設定とか全見直ししたが、
結局原因はiptablesだった。

リバースプロキシからWEBサーバへリクエストを送る際、
WEBサーバのiptablesにてHTTPSリクエストを落としてました。

多分、hosts.denyとかでDROPさせても同様動作するんじゃないかな・・

30分ぐらい悩んだ結果がこれとかちょっと情けない気もしますが。。。

拍手[0回]


【NGINX】nginxをyumでインストールする方法

今更ですが、nginxをyumでインストールする方法をまとめておきます。

■レポジトリをインストールする
# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm

■yumでインストールする
# yum --enablerepo=nginx install nginx


簡単!
ちなみに、2015/6/10現在では、1.8.0ぐらいがインストールされるはずです。

拍手[0回]


【NGINX】メモ:クエリを除外したリクエストURIが格納される変数

今回はメモ程度に。

リクエストURIにクエリが入っているがゆえに、キャッシュが効かなくなってしまったことがあったので。

$request_uri
英語:full original request URI (with arguments)
翻訳:リクエストURIがまるまるそのままこの変数に入りますよー

$uri
英語:current URI in request, normalized
   The value of $uri may change during request processing, e.g. when doing internal redirect, or when using index files.
翻訳:よくわからん!!!


英語がよくわからないので、実際にGETリクエストを投げた際に、それぞれの変数にどのような値が入るのかを以下に記載します。
curl http://localhost/testdir/testfile?querytest


結果:
$request_uri … /testdir/testfile?querytest
$uri     … /testdir/testfile

proxy_cache_keyなどにURIを指定する場合、以上の点に注意しないと意図していないものがキャッシュされたり、逆にキャッシュしたいものがされなかったりします。
自分のところのシステムはこれによってキャッシュヒット率が10%ぐらい落ちてました・・・

拍手[0回]


【nginx】レスポンスタイムアウトの設定メモ

ちょっとしたメモ代わりに。
割と重要で、なかなか参考になるものがなかったので。

以下3つの設定値について、ちょっと調べてみました。
proxy_connect_timeout
proxy_send_timeout
proxy_read_timeout

参考書などの説明によると、各設定値はこんな感じの説明をされていました。

■proxy_connect_timeout
バックエンドサーバとの接続タイムアウト時間の指定
バックエンドサーバに接続要求を送り、n秒間接続できない場合発生
すでにバックエンドと接続されている場合、このタイムアウトは発生しない

■proxy_send_timeout
バックエンドサーバへのデータ送出のタイムアウトの秒数を指定
このタイムアウトは、応答全体の遅れではなく、2回の書き込み処理の間の遅れに対するものである

■proxy_read_timeout
バックエンドからのデータ受信のタイムアウト秒数を指定
このタイムアウトは、応答全体の遅れではなく、2回の書き込み処理の間の遅れに対するものである


・・・(´・ω・`)?


あんまりよくわからんので、図でまとめてみました。



そもそも、クライアントからnginxにnginxはまずはじめに、バックエンドサーバにTCPコネクションを張りにきます。(1)
そのときのタイムアウト条件がproxy_connect_timeoutということですね。

コネクションを張ることができたら、クライアントは次にnginxサーバはバックエンドサーバにリクエストを投げます。(2)
そのリクエストを送信するタイムアウト条件がproxy_send_timeoutです。
送るのに時間がかかったらこの条件に引っかかるんですね。

リクエストを送信したら、バックエンドはリクエストに対しての応答をnginxサーバに行います。(3)
バックエンドサーバからのレスポンスが遅ければ、proxy_read_timeoutの条件に引っかかり、タイムアウトが発生します。

ちなみに、
nginxとバックエンドとのコネクションが張れなければsendは発生しないし、sendが発生しなければreadも発生しません!

そこだけを注意して各タイムアウト値の設定を行う必要がありますね。

拍手[19回]


        
  • 1
  • 2