ラベル nginx の投稿を表示しています。 すべての投稿を表示
ラベル nginx の投稿を表示しています。 すべての投稿を表示

2020年5月21日木曜日

nginx x phpfpm(設定メモ)



以下を追加する。

[sample]
------------------------------------------------------------------------------------------------
 server {
          listen 80;
          server_name localhost;
          access_log /var/log/nginx/access.log main;
          error_log /var/log/nginx/error.log;
          root /var/www/html;

          location / {
          index index.php index.html index.htm;
          }

              location ~ \.php$ {
              fastcgi_pass 127.0.0.1:9000;
              fastcgi_index index.php;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              include fastcgi_params;
              }
          }
}
-------------------------------------------------------------------------------------------------

サービスの確認を行う。
systemctl restart nginx


vi /etc/php-fpm.d/www.conf


リバースプロキシ検証

検証目的:
リバースプロキシに動きについて把握する

[検証イメージ]

[Beanstalk側]
1)BeanStalkにて、Lalabelを作成する。 
2)①内にて、curlコマンドを実行してみる。 curl http://13.230.81.99 
3)beanstalkのセキュリティポリシの追加を行う インバウンド側で、8888ポートを追加。 
上記、beanstalkの設定については割愛する。 

[EC2側] 
1)②内にて、EC2を作成して、nginxを立ち上げる 
2)②内にて、beanstalkに対して、curlコマンドで確認を行う。 
3)②内にて、リバースプロキシ の記載を行う。 
--------------------------------------------------- 
server { 
 listen 8888; 
 server_name 13.113.1.123; 
 location / { 
 proxy_pass http://13.230.81.99; } 
} 
----------------------------------------------------

4)EC2のセキュリティポリシの追加を行う インバウンド側で、80ポートを追加。 

5)キャプチャコマンドを実施する。
PC ->Nginx(プロキシサーバ)  ̶>lalabel(beanstalk) 

[結果]
以下の内容からリバースプロキシ を経由して、オリジンサーバ(beanstalk)に振り分けていることが 把握できる


[PC側]
1) ブラウザからリバースプロキシ のアドレスを投入してみる、。 
リバースプロキシ を経由して、beanstalkのページが表示されていることが把握できる 

AlpineLinux x nginx

参照先:


AlpineLinuxのサービスコマンド:
①rc-status
②rc-service nginx checkconfig
③rc-service nginx start


2019年5月14日火曜日

チューニング for nginx



以下、パラメータのメモ

パラメーター
内容
default値
net.core.rmem_max = 
TCPとUDPの受信バッファのデフォルトサイズと最大サイズ。
124928
net.core.wmem_max = 
TCPとUDPの送信バッファのデフォルトサイズと最大サイズ。
124928
net.nf_conntrack_max = 
ESTABLISHEDのリストの最大数(OS側の管理数)
可変
net.ipv4.conf.default.accept_source_route = 
ソースルートが指定されたパケットを拒否。本来は経路のテストを行う目的であるのでoffにする
1
net.ipv4.tcp_rmem = 
データ受信バッファ サイズ
可変
net.ipv4.tcp_timestamps = 
NAT環境下で、複数ホストがクライアントのときに、WAN側のサーバに接続が切られる対策
1
net.ipv4.tcp_fin_timeout = 
FINのタイムアウト時間
60
net.ipv4.tcp_syn_retries = 
tcpのSYNを送信するリトライ回数。
この回数SYNを送ってもダメなら諦める
5
net.ipv4.tcp_synack_retries = 
接続を受付側としてオープンするとき、 カーネルは SYN に ACK を詰め込んで送り、先に受けとった SYN を確認する。
5
net.ipv4.tcp_syncookies = 
SYN flood攻撃対策
1
net.ipv4.ip_local_port_range = 
TCP/IPの送信時に使用するポートの範囲
可能なら 1024-65535が良いが、iptablesやAWSだとNetworkACLとかで
同様に必要に応じて開放しておかないとパケットが途中で止まってハマるから注意。
$ cat /proc/sys/net/ipv4/ip_local_port_rangeで確認できる
32768 61000
net.ipv4.tcp_tw_reuse = 
自分からの接続を使い回す。tcp_tw_recycleは相手からの接続を使い回す。
0
net.ipv4.tcp_tw_recycle = 
相手からの接続を使い回す。
0
net.ipv4.tcp_rfc1337 = 
RFC1337に準拠させる。TIME_WAIT状態のときにRSTを受信した場合、TIME_WAIT期間の終了を待たずにそのソケットをクローズする
0
net.ipv4.tcp_fin_timeout = 
タイムアウトはできる限り短いほうがいい
60
net.ipv4.tcp_max_tw_buckets = 
システムが同時に保持するtime-waitソケットの最大数。
DoS攻撃を防げるため、低くするのはやめたほうが良い。
動的
net.ipv4.tcp_orphan_retries = 
こちらからクローズしたTCPコネクションを終了する前の再送回数。
webサーバだとリソースを消費する可能性があるため、低くしたほうが良い
0
net.ipv4.tcp_keepalive_probes = 
TCP が keepalive プローブを送る数。この数に達すると、 その接続が壊れたとみなす。
9
net.ipv4.tcp_slow_start_after_idle = 
keepaliveしててもしばらく通信がなかったらcongestion window sizeをresetする。
keepaliveを利用しており、かつ輻輳が少ない環境ではoffが良い。
1
net.core.netdev_max_backlog = 
パケット受信時にキューに繋ぐことができるパケットの最大数
1000
net.ipv4.tcp_max_syn_backlog = 
ソケット当たりのSYNを受け付けてACKを受け取っていない状態のコネクションの保持可能数。
この値を超えたものに関してはOSはSYNパケットを拒否することになる。
溢れたパケットはnetstatで確認できる。
ただし、この値はnet.core.somaxconnより大きかった場合、net.core.somaxconnの値を優先する。
1024
net.ipv4.conf.eth180.arp_ignore = 
ぶら下がってるAPサーバ群にarpに応答させない(MACアドレスを覚えさせない)
IPとmacアドレスが関係ずけられると、送りたい機器に通信できなくなる。
0
net.ipv4.conf.eth180.arp_announce = 
ぶら下がってるAPサーバ群にarpに応答させない(MACアドレスを覚えさせない)
IPとmacアドレスが関係ずけられると、送りたい機器に通信できなくなる。
0
net.core.somaxconn = 
一度に受け入れられるTCPセッションのキューの数。
TCPのセッション数をbacklogで管理し、それを超えたものはキューに格納される。
このキューの数をここで設定する
128
vm.swappiness = 
実メモリがある状態でスワップを使用しない
0
vm.overcommit_memory = 
実メモリ以上にプロセスにメモリを割り当てない
0
vm.overcommit_ratio = 
OOM killerで勝手にkillするくらいだったら、メモリ不足を検出してエラー処理をさせる。
vm.overcommit_memory = 2のときに設定する
50
kernel.shmmax = メモリのByte数
共有メモリの最大サイズ。サーバーの搭載メモリ(1GB)に合わせて変更するので
動的?
kernel.shmall = 
システム全体の共有メモリ・ページの最大数
68719476736
kernel.msgmnb = 
1つのメッセージキューに保持できるメッセージの最大値
65536
kernel.msgmax = 
メッセージキューIDの最大値
65536
kernel.sysrq = 
SysRqとは、サーバでキーボード操作ができなくなったとき、カーネルが昨日してれば特定のキー(Alt + PrintScreen)で割り込める。使わないので0
0
kernel.core_uses_pid = 
コアダンプ時、".PID"をコアファイル名に追加しない
0

2018年10月4日木曜日

nginx版 waf (Naxsi)

◻️以下のデベロッパー類を入れる

cd /usr/local/src/
wget https://github.com/nbs-system/naxsi/archive/0.54.tar.gz
tar zxvf nixes-0.54.tgz



◻️nginxにnxesのプラグインを導入する


cd /uer/local/src/nginx-1.10.1/
./configure --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_stub_status_module --add-module=../naxsi-0.54/naxsi_src/
make && maike install

◻️ElasticSearchのインストールと起動

cd /usr/local/src/
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.5.tar.gz
tar -xvf elasticsearch-1.7.5.tar.gz
cd elasticsearch-1.7.5/bin
./elasticsearch



◻️ElasticSearchの動作確認とNxapi用のIndexの作成


cp -rp /usr/local/src/naxsi-0.54/naxsi_config/naxsi_core.rules /usr/local/nginx/conf/


◻️Naxsiに付属しているディフォルトルールの配置


cp -rp /usr/local/src/naxsi-0.54/naxsi_config/naxsi_core.rules /usr/local/nginx/conf/



◻️Naxsiをコピーする

cp -rp /usr/local/src/naxsi-0.54/nxapi/ /usr/local/nginx/



◻️nxapiの設定


vi /usr/local/nginx/nxapi/nxapi.json
##############################
{
# ElasticSearchの設定
"elastic" : {
 "host" : "127.0.0.1:9200",
 "index" : "nxapi",
 …
 }

# ルールのパスを指定
 "naxsi" : {
 "rules_path" : "/usr/local/nginx/conf/naxsi_core.rules",
 "template_path" : [ "tpl/"],
 "geoipdb_path" : "nx_datas/country2coords.txt"
 },
 …
}
##############################

Lambda + SSM Run Commandで、数十台のEC2のuserdata結果を一括確認する

コードを1枚貼って、テストイベントを実行するだけで、 全台の確認結果が返ってくる手順です。 [ゴール] Nameタグが web-* / api-* / batch-* のEC2すべてに確認コマンドを流し、 NGの台だけ を結果に表示します。確認対象のuserdata(Ubu...