CentOS Stream 8にアップグレードしたらnginxのstatusがactive(running)なのに何も表示されない

タイトルそのままです。

めちゃんこ悩んだ

なんと、アップデートしたら勝手にNginxの設定ファイルがリネームされてた。

自分のケースでは

/etc/nginx/conf.d/default.conf

/etc/nginx/conf.d/default.conf.rpmsave

にリネームされてた。

設定ファイルがないなら動かないよね。

あと、Nginxのtmpフォルダ(fastcgi)の位置が変わってた

古いのは

/var/cache/nginx

新しいのは

/var/lib/nginx/tmp

なので

/var/lib/nginx/ にパーミッション許可を与えましょう

そうしないと

open() “/var/lib/nginx/tmp/fastcgi/x/xx/0000000007” failed (13: Permission denied) while reading upstream, client: xxx.xxx.xxx.xxx, server: _, request: “POST /xxx.php HTTP/1.1”, upstream: “fastcgi://unix:/var/run/php-fpm/php-fpm.sock:”, host:xxx

と出て、メモリに入り切らない処理が出たときにTMPに書き込みできずエラーになります。

さらに、index.htmlが上書きされてました。

修正しましょう。

 

For English User.

After upgrading to CentOS Stream 8, the status of nginx is active(running), but nothing is displayed.

Solution!

After updating, the Nginx configuration file was renamed.

In my case

Original

/etc/nginx/conf.d/default.conf

Renamed

/etc/nginx/conf.d/default.conf.rpmsave

Just Rename to original Filename….

 

メモリとCPUに余裕があるのにnginxで503エラーが出て、php-fpmが止まった

特に前兆はなく(実はあったんだけど)サーバーが死んだ。

最近はアクティブユーザーが増えてくれて、POSTで1日200万リクエスト(転送量20GB)をこえたりしてたんだけど、突然503エラーで完全に応答しなくなった。(アプリでは通信エラーと出る)

構成としてConohaの メモリ 4GB/CPU 4Core×2台

これをロードバランサーでつないでいる。

 

まぁhtopでロードアベレージも両サーバー0.6とかで、これだったら余裕だろ~って眺めてたら死んだ。

てか実際に落ちたときにhtopで確認したけどロードアベレージが1を超えてなかった。

なんで??という思いが強かったけど、TCPコネクション使い切ったとおもって、とりあえずサーバーリブートで問題なく治った。

これはメモリリークの可能性があるなと思って(サーバー自体は半年以上再起動とかしてない)

とりあえず、様子見したら一日問題なく動いた。

 

実は設定悪い可能性があります!

 

nginx_error.log

connect() to unix:/var/run/php-fpm/php-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client:

 

php-fpm-error.log

[21-Jan-2021 10:50:43] WARNING: [pool www] server reached pm.max_children setting (100), consider raising it
[21-Jan-2021 11:01:23] NOTICE: Terminating …
[21-Jan-2021 11:01:23] NOTICE: exiting, bye-bye!
[21-Jan-2021 11:01:43] NOTICE: fpm is running, pid 1009
[21-Jan-2021 11:01:43] NOTICE: ready to handle connections
[21-Jan-2021 11:01:43] NOTICE: systemd monitor interval set to 10000ms
[21-Jan-2021 11:01:52] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 17 total children
[21-Jan-2021 11:01:53] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 25 total children
[21-Jan-2021 11:01:54] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 35 total children
[21-Jan-2021 11:01:55] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 45 total children
[21-Jan-2021 11:01:56] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 55 total children
[21-Jan-2021 11:01:57] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 65 total children
[21-Jan-2021 11:01:58] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 9 idle, and 75 total children
[21-Jan-2021 11:01:59] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 9 idle, and 76 total children
[21-Jan-2021 11:02:21] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 8 idle, and 84 total children
[21-Jan-2021 11:02:22] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 9 idle, and 86 total children
[21-Jan-2021 11:02:45] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 8 idle, and 98 total children
[21-Jan-2021 11:02:49] WARNING: [pool www] server reached pm.max_children setting (100), consider raising it

 

まずworker_processes を確認!

worker_processes auto;←これが良い

これがworker_processes  1(!?)になってた

CPUコア4なのに、これじゃあ1個しか使わない

あとコネクションの上限も念の為あげとく
worker_rlimit_nofile 16384;

events {
worker_connections 4096;
}

※worker_rlimit_nofileは設定しないと1024とかに制限されちゃうから必要

 

前提としてdynamicで

あと、php-fpmが平均してどれぐらいメモリ使うかによってpm.max_children

の設定も変えましょう

pm.max_children = 200

にした

ps -ylC php-fpm –sort:rss

で調べれる

RSSがメモリ使用率でKBで表示されます(24116だったら24116KB)

だいたい雰囲気の平均をとって、20MBぐらいだな~とおもって

メモリ4GBだったら

4000MB/20MBの200

この200をpm.max_childrenにした(本当はもっと安全をとって低いほうがいいかも)

参考→https://myshell.co.uk/blog/2012/07/adjusting-child-processes-for-php-fpm-nginx/

 

あとpm.max_requestsが自分的にはちょっと大事!

今まではpm.max_requestsはデフォルトの0にしていた

でも多分メモリリークの可能性があって、メモリ使い切って不安定になった可能性がある。このpm.max_requestsっていうのはmax_requestsの回数に達したらプロセスを再起動する設定になるからメモリリークがあっても解消できる。

つまりこれが実は大事だったかも。

ただ現在、1日200万PVなので1日ぐらいで再起動させたい場合、

1日のリクエスト(PV)数 ÷ pm.max_spare_serversになるので

だいたい50000ぐらい?

なんか凄く大きな値になった。

まぁ0よりはいいでしょう

 

とりあえずこれで様子をみる。

 

追記:念のためメモリも8GBにした。

でもこれ多分2台でやる、 8GB×8GBより4GB×4GB×4GBとかのほうが良い気もする。

 

CentOSにSquid(Proxy)をインストールしてProxy経由で日本国内専用サービスにアクセスする方法

日本国内だけのHPやサービスにアクセスする時は普通はVPNを使ったほうがいいんだけど、それが使えないケースもある(私の場合はappetize.io)

 

できるだけ安全に運用するための手順です

イメージ

世界→Myサーバー(squid)→国内専用HP

Basic認証でなおかつホワイトリスト方式(許可したドメインだけのアクセス許可)にします

 

インストール:

yum -y install squid

firewall-cmd –zone=public –add-port=3128/tcp –permanent
systemctl start squid.service
systemctl enable squid.service

yum install httpd-tools

htpasswd -c /etc/squid/passwords user

password#これはBasic認証のために


vi /etc/squid/squid.conf

 

 

/etc/squid/squid.confの中身
#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
auth_param basic children 10

acl authenticated proxy_auth REQUIRED
http_access deny !authenticated #このDeny!にしないと、DNSのホワイトリスト方式が取れない

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines

acl mysite dstdomain www.yahoo.co.jp
acl mysite dstdomain www.google.co.jp
acl mysite dstdomain .google.com
acl mysite dstdomain fonts.googleapis.com
acl mysite dstdomain ajax.googleapis.com
acl mysite dstdomain cdn.jsdelivr.net
#acl mysite dstdomain .googleapis.com
#acl mysite dstdomain .jsdelivr.net
acl mysite dstdomain youtu.be
acl mysite dstdomain .youtube.com
acl mysite dstdomain appetize.io
acl mysite dstdomain .medicalfields.jp
acl mysite dstdomain 157.7.94.189
acl mysite dstdomain www.ugtop.com #To Check Ip
acl SSL_ports port 443
acl Safe_ports port 80 # http
#acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
#acl Safe_ports port 70 # gopher
#acl Safe_ports port 210 # wais
#acl Safe_ports port 1025-65535 # unregistered ports
#acl Safe_ports port 280 # http-mgmt
#acl Safe_ports port 488 # gss-http
#acl Safe_ports port 591 # filemaker
#acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access deny manager

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on “localhost” is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
#http_access allow localhost
http_access allow mysite
http_access deny !mysite

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 3128

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320

dns_v4_first on #こうしないとGoogleに入れなかった

dns_nameservers 8.8.8.8 208.67.222.222