F5、NGINXの開発チームをロシア国外へ移転させたことを報告。開発を立て直しリリースサイクルも元通りに NGINX(エンジンエックス)はオープンソースで開発されているWebサーバとしてもっとも人気のあるソフトウェアの1つです。その開発者であるIgor Sysoev(イーゴリ・シソエフ)氏がロシアの首都モスクワに住んでいたことなどにより、NGINXの開発はロシアの首都モスクワを中心に行われていました。 そのロシアは現在、ウクライナへの武力侵攻に反対する西側諸国による厳しい経済制裁下にあり、多くのIT企業もロシアにおける活動を停止しています。 2019年にNGINX社を買収し現在NGINXの開発元となっているF5も、ロシアにおける営業活動とNGINXオープンソースプロジェクトへの貢献を停止したことを、3月15日付けのブログ「Standing Firm in Support of the Pe
nginxはworkerプロセスの数をCPUコア(スレッド)数で決定するworker_processes autoという便利設定があります。 これが多用されているのは、nginxがノンブロッキングでリクエスト処理を行うため、コンテキストスイッチなどを考慮した場合に、コア数で立ち上げておけば効率よくCPUを使い切れるという前提があるからです。 一方で、例えば僕の用途では、現在画像の処理だったりとか、ngx_mrubyのようにリクエストの過程で一部ブロッキングされるような処理も増えてきているため、コア数以上の値に設定しておいた方が性能を発揮できるような状況も増えてきています。 そうなると、現状、非常に便利な設定であるauto設定を使えずに静的に数字を設定する必要があり、例えばサーバリプレース時には古いコア数を考慮した値になっていたりして、リプレース後にCPUのコア設定がそのままで性能が出せてい
# 環境変数 RAILS_MAX_THREADS に 16 をセット threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } ... # 環境変数 WEB_CONCURRENCY に 2 をセット workers ENV.fetch("WEB_CONCURRENCY") { 2 } 実験を行った結果、もちろんサーバーのリソース(今回はCPUコア数: 2)にもよりますが以下のようにサーバーが処理できるキャパシティが変わりました。thread数が少ないともちろんさばける処理数が減るため、サーバーのリソースが余っているにもかかわらず、unhealthyになります。つまり、レスポンスで過負荷を示す503 errorが返却されます。 1worker/5threadの場合、CPU15%ぐらいでunhealthyになる 1worker/10threadの
正直恥ずかしい話ですし、Disk監視ちゃんと入れておけば防げる話です。 AWSのEC2でnginx動かしていたら、Disk使用率が100%になってレスポンスが返せなくなりました。 原因はnginxが巨大なログファイルを出力していたためなのですが、 dfだとdiskが喰われているのに、/に移動してdu -sh *でディレクトリごとの使用量を見てみても、 どこがdiskを喰っているのかわかりませんでした。 そこで何かのプロセスがファイルをつかんでいるだろうと調べたところ、nginxが巨大なログファイルをつかんでいました。 なぜそれがduでわからなかったかというと、実際のファイルは存在していなかったからです。 nginxの起動ユーザーはec2-userになっていたのですが、nginxはyumでインストールしたものなので、 log出力先のディレクトリのオーナーがnginxユーザーになっており、 ロ
Nginxのアーキテクチャについて調べてたことをまとめた。 用語のおさらい プロセス(Process) プログラムの実行単位であり、CPU時間単位で割り振られる。 状態(ステート)があり、現在処理中であるRunning状態だったり、実行可能状態であるReady等が存在する。 CPUがプロセスを実行する場合、そのプロセスが持つメモリデータに対して演算を行う。 プロセスはテキストセグメントとデータセグメントからなる構造データをメモリ上に持っている。 テキストセグメント プログラムの命令列 データセグメント PDA (Processor Data Area)と呼ばれる、プロセッサの情報やプロセス管理用のデータ領域 データ領域と呼ばれる、定数等が置かれる静的領域と、通常の変数等が置かれるヒープ領域からなる領域 スタック領域と呼ばれる、一時的なデータ保管領域 実行中のプロセスを確認 ~ ❯❯❯ ps
Knowledge というオープンソースのソフトウェアを使用しているのですが、その中でファイルをアップロードしたところ「アップロードに失敗しました」とメッセージが表示されアップロードできませんでした。 原因を調べたところ nginx のデフォルトが 1M までということが分かり、 client_max_body_size を適切に設定することで対応することができました。 Knowledge は次の環境で運用しています。 nginx tomcat サーバで取り扱うサイズの変更 http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size によると、 nginx ではデフォルトで1MBまでのデータしか受け付けない設定になっています。 nginx が1MBより大きなデータを扱えるようにするには、 conf
はじめに 本日の08:00~09:30頃まで当サイトが404エラーでページが表示されなくなっていました。 nginxの再起動をしたところ、この状態になってしまいました。 エラーログを確認 エラーログを確認したところ下記のようなエラーが発生していました。 [crit] open() "/hogehoge_html/DocumentRoot/index.php" failed (13: Permission denied), client: xxx.xx.x.xx, server: www.kabanoki.net, request: "GET / HTTP/1.1", host: "www.kabanoki.net" ファイルのパーミッションを変更 エラーのログに(13: Permission denied)とあるので、権限に問題があるのかな?と試しにindex.phpのパーミッションを77
アクセス権限は、 ・ディレクトリには実行権限 ・ファイルには読取り権限 を付与すれば大丈夫なはずですが、このようなエラーが出てしまいました。 [error] 4418#0: *9 open() "/home/ec2-user/www/index.html" failed (13: Permission denied)ディレクトリ・ファイルの所有者やグループをrootに変更してもダメです。 とりあえずの解決案 基本的に、ルートディレクトリの場所がユーザーのホームディレクトリに設定されているとエラーになります。 (というのはちょっと語弊があります。エラーになる理由はこちら) ✖ダメな例 location / { root /home/[ユーザー名]/www; index index.html; }※デフォルトだと「/home/[ユーザー名]/」のパーミッションが700なので、701に変更すれば
概要 nginxを初めて使ってみましたが、 色々ハマりどころがあったため、メモを兼ねて投稿します。 Owner問題 これはnginxに限った問題ではないかもしれませんが、 使用するフォルダがnginxの実行ユーザになっている必要があります。 例えば、centosの場合だと /var/lib/nginx などですね。 ここがうまくいっていないと ダウンロードの処理などを入れた時に failed (13: Permission denied) while reading upstream というエラーがnginxから吐き出されます。 解決手法 sudo chown -R [nginxの実行ユーザ名] /var/lib/nginx ここはもしかしたらOwnerを変えすぎなのかもしれませんが、 そこまで検証をしていません。 もしそういう指摘などありましたら、コメントください。 Permission
Centos7 + Nnginx 1.10.3 でerror.logを見てみると 2017/02/17 10:51:27 [crit] 17910#17910: *1 stat() "/home/user/sample/html/" failed (13: Permission denied), client: xxx.xxx.xxx.xxx, server: sample.com, request: "GET / HTTP/1.1", host: "sample.com", referrer: "https://sample.com" といったエラーがたくさん.. ディレクトリのパーミッションを見てみても $ ls -al /home/user/sample/html/ drwxrwxr-x 7 user nginx 4096 2月 16 12:10 . な感じで問題なさそう いろいろ調
defaultは60秒 sudo vi /etc/nginx/nginx.conf httpブロックのタイムアウト時間を変更する(秒) http{ ... proxy_read_timeout 300; proxy_connect_timeout 300; proxy_send_timeout 300; ... } 特定のサーバだけ、時間変えたい時 server{ ... proxy_read_timeout 300; proxy_connect_timeout 300; proxy_send_timeout 300; ... } 再起動 sudo systemctl restart nginx 確認 systemctl status nginx
# ワーカプロセス数 worker_processes 1; # エラーログ出力先 error_log /var/log/nginx/error.log; # PIDファイルの配置先 pid /var/run/nginx.pid; # 1ワーカプロセスが同時オープン可能なファイルディスクリプタ数最大値 worker_rlimit_nofile 1024; events { # 1ワーカプロセスが同時オープン可能なコネクション数最大値 worker_connections 512; } http { # アクセスログ出力先 access_log /var/log/nginx/access.log; # nginxに常時接続しているクライアントに対するタイムアウト時間 keepalive_timeout 10s; server { listen 80; location / { # 全てのアド
Enables or disables the use of asynchronous file I/O (AIO) on FreeBSD and Linux: location /video/ { aio on; output_buffers 1 64k; } On FreeBSD, AIO can be used starting from FreeBSD 4.3. Prior to FreeBSD 11.0, AIO can either be linked statically into a kernel: options VFS_AIO or loaded dynamically as a kernel loadable module: kldload aio On Linux, AIO can be used starting from kernel version 2.6.2
Nginx経由でPuma+Rails5へアクセスできるように設定してみた。 Rails5でアプリケーションは問題なく動いている前提で記載 Rails5でのデフォルトのアクセス方法は、http://接続IP:3000というもので、ポート3000にアクセスするようになっているけど、一般的にはポート3000でアクセスしているものなんてみたことない。 調べてみると、Railsの前にWebサーバがあって、Webサーバ経由でRailsへアクセスするのが一般的みたい。 例えば、 今まで、http://1.1.1.1:3000にアクセスするとPumaが受け取って、Railsに渡す! という動きだったけど、 一般的には http://1.1.1.1にアクセスすると、Webサーバ(Nginx)が受け取って、Nginxが1.1.1.1:3000に渡して、それをPumaが受け取って、Railsに渡す! という動き
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く