エラーInvalid HTTP_HOST header: ”. You may need to add ‘

投稿者: Anonymous Djangoの勉強をしており、AWSでアプリケーションを公開しようというところまできたのですが、ブラウザでアクセスしてみると以下のエラーが出てしまいます。 Bad Request (400) また、Djangoのlogには以下のエラーが出ます。 Invalid HTTP_HOST header: ‘<IP アドレス>’. You may need to add ‘<IP アドレス’>’ to ALLOWED_HOSTS. このエラー文でググってみると、Djangoの設定ファイル(settings.py)のALLOWED_HOSTSに IPアドレスを設定すれば良いと出てくるのですが、変更してもエラーの内容は変わりません。 実際の設定は次のようにしています。 ALLOWED_HOSTS = [os.environ.get(‘ALLOWED_HOSTS’)] 環境変数のALLOWED_HOSTSにAWSで割り当てられているIPアドレスを入れています。 直接IPアドレスを入れたり、ワイルドカードを使ってもダメでした。 (= [‘*’]のように) DjangoやAWSなど初めてだらけでどうやってデバッグすれば良いかもわからず、完全に行き詰まってしまいました。 何か少しでも心当たりがある方にアドバイスをいただきたいです。 解決 エラーメッセージの『Invalid HTTP_HOST header: ”. You may need to add ” to ALLOWED_HOSTS.』のの部分にはDjangoにアクセスしたブラウザが稼働しているマシン(以下、”クライアントマシン”と呼びます)のIPアドレスが書かれていたと思います。 この問題を解決するには、クライアントマシンのホスト名かIPアドレスを、ALLOWED_HOSTSに追加してください。 <具体的な方法> まず、settings.pyのプログラムから、”ALLOWED_HOSTS = []”か”ALLOWED_HOSTS = [aaa,bbb,ccc]”(aaa,bbb,cccの部分はホスト名かIPアドレスの並び)という行を探します。 “ALLOWED_HOSTS =…(Continue Reading)

Let’s Encrypt更新に失敗

投稿者: Anonymous 作成して三ヶ月後ぐらいにhttpsエラーになったので、下記コマンドを打ちました certbot renew ・すると下記エラーが表示されました Incorrect validation certificate for tls-sni-01 challenge. どういう意味ですか? ・作成出来たのに更新できないのは、なぜ?? ・どこを確認すれば良いですか? https化したドメインのイメージ a.example.com b.example.com c.example.net 環境 ・CentOS7 ・Nginx 解決 letsencryptではドメインの確認のため、certbotが臨時の公開鍵で署名したファイルをディレクトリー/.well-known/acme-challengeに置いて、そこにACME Challengeしてきます。もしそのディレクトリーに適正にアクセスできなかければ、そのエラーが発生します。例えば、3つのドメインのどれかを301リダイレクトしていないでしょうか? そういう場合には、letsencrypt用にwebrootを別に設定するようにします。webrootの場所はどこでもいいですが、403にならないようにしておきます。 location ^~ /.well-known/acme-challenge/ { root /var/www/acme-challenge; } 回答者: Anonymous

nginx の alias指定で phpMyAdmin に接続する時の File Not Found エラーの解消法

投稿者: Anonymous CakePHP を動作させる際に phpMyAdmin を設定する際のことに関して質問です。 環境: CentOS6 PHP 5.5 CakePHP 2.6.0 でやっています。 /var/www/phpmyadmin/ に alias 指定でアクセスさせるために質問後半に示すような設定ファイルを書いた結果 http://localhost/phpmyadmin/ でアクセスすることはできたんですが、 File not Found が出てしまいます… 読み込ませるにはどうすればいいでしょうか? 以下 /etc/nginx/conf.d/default.conf に記載した設定 server { listen 80; server_name localhost; #中略 location /phpmyadmin { alias /var/www/phpmyadmin; index index.php; location ~ .php$ { root /var/www/phpmyadmin; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include…(Continue Reading)

.Net CoreにおけるLinuxのメモリ使用量について

投稿者: Anonymous お世話になります。 .Net Core2.1で作ったアプリをAzure AppService on LinuxでWebサービスを運用しているのですが、Azure AppServiceのWindowsサーバーで運用していたときと比べメモリ使用量が平均で10〜20%増加しました。どちらもB1インスタンスなので全く同じスペックですし、サーバーを変えてからアプリケーションの変更は行なっていません。CPUの使用量は全く同じなので変動はありませんでした。 .Net CoreはLinuxサーバーだと若干メモリ使用量が増えるのでしょうか? 解決 使用するライブラリーによりますが、Linuxサーバーだとメモリ使用量が増える場合が多いです。Windowsの方で主に開発されているソフトなので仕方がないと思います。処理速度も.Net Core2.0まではLinuxサーバーの方がはっきり遅かったですが、.Net Core2.1でかなり改善されました。 .NET Core は、windowsとLinuxでは実装に違いがあります。 参考: https://www.slideshare.net/tanakata/20170527-inside-net-core-on-linux 回答者: Anonymous

『このサイトにアクセスできません』と表示される

投稿者: user39764 お世話になっております。 下記の問題で知見がある方がいらっしゃいまいたらご教示お願いします。 起きている問題 nginx+unicorn+railsでサーバの構築をし、AWS上のEC2にALBを経由してアクセスを試みているのですが、上記のように『このサイトにアクセスできません』と表示されてしまいます。 確認したこと ・Nginxが起動していることを確認 $ ps aux | grep nginx root 4855 0.0 0.2 125708 2192 ? Ss 20:48 0:00 nginx: master process /usr/sbin/nginx nginx 4857 0.0 0.4 126140 4976 ? S 20:48 0:00 nginx: worker process ryouya 4968 0.0 0.0 119436 944 pts/0 S+ 21:10 0:00 grep –color=auto nginx ・Unicornが起動していることを確認…(Continue Reading)

Nginxエラーログに不正アクセスIPを自動でブラックリストに入れたいです。

投稿者: Anonymous /var/log/nginx/error.log を見ると毎日何百行もの知らないIPアドレスから、あるはずのないディレクトリやファイルにアクセスされて困っています。データベースの接頭辞も複雑にしてあるのですが、なぜかアクセスされています。(アクセスできないというエラー) 2016/03/12 07:26:21 [error] 909#909: *1528710 FastCGI sent in stderr: “Primary script unknown” while reading response header from upstream, client: 1.86.87.12, server:hoge.com request: “GET /XXXX.php?RequestType=Test HTTP/1.0”, upstream: “fastcgi://unix:/run/php-fpm/php-fpm.sock:” host: hoge.com 全世界に見られているWEBサイトなので、アクセス許可IPを日本のみにするやり方以外で、エラーログに表示された、あるいはXXXX.phpにアクセスしたIPを自動で拒否する方法はありませんでしょうか? 解決 不正アクセスIPの定義 次のどちらかを満たすIPが不正アクセスとします。 a.エラーログに表示されたIP b.存在しない任意の.phpにアクセスしたIP 条件 アクセスログはありません。 手順 1) 存在しない.phpがアクセスされた時にエラーログを残す location ~ .php$ { fastcgi_intercept_errors on; } 2) エラーログからIPを抽出して/etc/nginx/blacklist.confに保存する。書式はdeny 1.86.87.12; grep…(Continue Reading)

phpmyadminをサブディレクトリで運用できない

投稿者: Anonymous やりたいことは http://www.example.com/phpmyadmin にアクセスすると /usr/share/phpMyAdmin にアクセスしてPHPを実行出来る様にする事です。 環境 NGINX1.8 PHP5.4 /opt/nginx/conf/nginx.conf location ^~ /phpmyadmin { rewrite_log on; error_log /opt/nginx/logs/phpmyadmin_error.log notice; root /usr/share/phpMyAdmin; rewrite ^/phpmyadmin/(.*)$ /$1 break; location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/phpMyAdmin$fastcgi_script_name; include fastcgi_params; } } /opt/nginx/logs/phpmyadmin_error.log 2015/05/11 11:20:30 [error] 51293#0: *1 access forbidden by rule, client: XXX.XXX.XXX.XXX, server: www.example.com, request:…(Continue Reading)

EC2(AWS)のインスタンスを再起動すると「ページが動作しません」

投稿者: Anonymous Ruby On Railsで運用していたstaging環境をAWSのEC2からインスタンスを再起動すると、chromeで該当のURLを開こうとしても「このページは動作していません」となり、開けません。safariなど他のブラウザで開いても同じようなメッセージが出ます。 環境 macOS High Sierra(バージョン10.13.6) ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin17] Rails 4.2.6 chrome バージョン: 71.0.3578.98(Official Build) (64 ビット) 試したこと ・ df -hでデータ容量を確認してみましたが空きは十分にありました。 ・ redisを再起動してみましたが「ページが動作しません」は変わりません。 ・ EC2のインスタンスを確認したところ、Elastic IPやIPv4 パブリック IPは変更されていませんでした。 (これはconfig/deploy/staging.rbやconfig/environments/staging.rbに設定されているIPアドレスと同じものです。) ・ ログを確認してみたところ、 1. nginx.access.logとnginx.error.logは動作していませんでした 2. unicorn.logとsidekiq.logとstaging.logはデプロイしたときログを吐いていますがエラーはありません。 実現したいこと staging環境が開けなくなった原因を突き止めて、復旧したいです。 ご教示いただけることがあれば何卒よろしくお願いいたします。 解決 まずはnginx, unicorn, sidekiqのプロセスが起動しているか確認してみてはどうでしょうか。 以下はプロセス一覧からgrepをかけてunicornプロセスが起動しているかを確認する例です。 ps aux | grep -v grep…(Continue Reading)

リバースプロキシを用いた場合のデータベースの扱い方

投稿者: Anonymous nginxを使って、リバースプロキシをして2つのWebサーバーをサブドメインでわけたいと考えています。 この場合データベースはどのように扱えばいいのでしょうか。ちなみに全て1つの物理サーバー内で構築しようと考えています。 例えばこの場合データベースのインスタンス(MySQL等)を1つのポートで1台たちあげると、そのインスタンスを利用できるのは1つのWebサーバーのみとなってしまうと考えられます。 この解決方法として幾つか考えましたがどれがベストなのかわかりません。 ①データベースインスタンスを2台立ち上げ、データの保管場所を同じにしてWebサーバごとに1台ずつアクセスする。 ②1台のサーバではそもそもデータベースを共有できないので別のデータベースを使わなければならない。 ③データベースごとに物理サーバをたてて、スイッチで接続する。 できれば1台のサーバないでできる方法を教えていただきたいです。また、リバースプロキシのベスト・プラクティスや構築パターンなどありましたら教えていただければ幸いです。 解決 例えばこの場合データベースのインスタンス(MySQL等)を1つのポートで1台たちあげると、そのインスタンスを利用できるのは1つのWebサーバーのみとなってしまうと考えられます。 これがおかしいです。RDBMS(に限らずほとんどのネットワーク越しに利用なサーバソフトウェア)は単一のポートで複数の接続を提供できます。Webサーバが80/tcpで多数のコネクションを同時に提供できるのが良い例です。 なので、何も難しいことは無く、 ・DBサーバ一台 ・Web/APサーバ 2 台 (DBの接続先指定はすべて同じ) ・リバースプロキシ1台 +–Web/APサーバ–+ –リーバースプロキシ–+ +–DBサーバ +–Web/APサーバ–+ でよいでしょう。 リバースプロキシ、Web、AP、DBの各サーバを多段で構成する場合の考え方は、一概に言えるものでは無くシステム構成や各要素にどれぐらいの負荷がかかるか、どのぐらいのリソースが提供できるか、耐障害性をどのぐらい確保しなければならないかによって大きく変わります。どうやって実現するのかまで含めるとすくなくとも雑誌記事一本レベルのボリュームになるので、ここで聞くには向かない質問です。書籍等で勉強されることをお勧めします。 回答者: Anonymous

nginxで複数のWebアプリケーションのアクセスをパスで振り分けたい

投稿者: Anonymous アクセスさせたいWebアプリケーションが3つあります。 アプリ名:a-appli、アクセスパス:http://localhost:9000/ アプリ名:b-appli、アクセスパス:http://localhost:8080/ アプリ名:c-appli、アクセスパス:http://localhost:8000/ それを、nginxを用い、それぞれ a-appli は http://localhost/a-appli/ b-appli は http://localhost/b-appli/ c-appli は http://localhost/c-appli/ という風なアクセスをさせたい場合にどのようにconfを書けば良いでしょうか? いずれのアプリも http://localhost:9000/hogehoge/hoge?a=x&c=d のような場合は、 http://localhost/a-appli/hogehoge/hoge?a=x&c=d でアクセス出来る様にさせたいです。 解決 凝ったことヌキの教科書通りの回答ですが、、 upstream a-appli { server 127.0.0.1:9000; } upstream b-appli { server 127.0.0.1:8080; } upstream c-appli { server 127.0.0.1:8000; } としておいて、 server{…} の中で、、 location /a-appli { rewrite ^/(.+) $1 break; proxy_set_header X-Real-IP $remote_addr;…(Continue Reading)

設定ファイルの文法エラーをチェックしてから、Nginx再起動

投稿者: Anonymous 「nginx -t」が正しかった場合のみ、「systemctl restart nginx.service」実行したいのですが、下記で合っていますか? $ sudo nginx -t && systemctl restart nginx.service 下記は、上記と何が違うのですか? ・それぞれ長所短所があれば教えてください sudo sh -c ‘nginx -t && systemctl restart nginx.service’ ・何れも、幾つでも連結可ですか? $ sudo コマンド && コマンド || コマンド || コマンド $ sudo sh -c ‘コマンド && コマンド || コマンド || コマンド’ 環境 ・CentOS7 ・Nginx 解決 試してみればすぐにわかることだとは思いますが、 $ sudo nginx -t…(Continue Reading)

xinetdでポートフォワーディングした後、nginxで実体IPを受け取りたい

投稿者: Anonymous こんにちは。 私は、sudoしていないnginxでport 80を受け付けるため、xinetdでポートフォワーディングを行っています。 service nginx { disable = no type = UNLISTED socket_type = stream protocol = tcp wait = no user = root port = 80 redirect = 127.0.0.1 8000 log_type = FILE /var/log/xinetdlog } xinetd.d 内の設定は以上のように行いました。 この設定で、ポートフォワーディング 80->8000 はうまく成されました。 しかし、8000で受け取っているnginx側のlogのアクセス元IPがすべて127.0.0.1となってしまいます。 これを、実体IP(xinetdのport 80にアクセスしてきたユーザーのIP)にしたいと考えています。 nginx.confにおける $proxy_add_x_forwarded_for にX-Forwarded-ForのIPが記録されているのではないかと期待しましたが、nginx側のlog formatに指定したところ、中身は127.0.0.1となっていました。 XinetdにはX-Forwarded-Forを出力する機構は備わっていないのでしょうか? 解決 xinetd を通して redirect…(Continue Reading)

apt-get upgrade 後「504 Gateway Time-out」エラーが出る

投稿者: Anonymous 多くの基本的な事を理解せず、見まね物まねでruby on rails でアプリケーションを作り、ubuntuで自宅サーバーを立て、Nginxでウエブに公開している者です。 ずっと問題なく一応アプリは稼働していたのですが、昨日(1/17) 急にエラーメッセージ に「504 Gateway Time-out」が出てきてネットからアクセス不可能になりました。 apt-get update ; apt-get upgradeを実行した後このメッセージが出始めました。今までずっとapt-get update ; apt-get upgradeは問題なくできていました。 【ubuntu環境】 [email protected]****:~# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION=”Ubuntu 16.04.3 LTS” 【nginxエラーログ】 /var/log/nginx/error.log 018/01/18 17:31:56 [error] 1236#1236: *20 upstream timed out (110: Connection timed out) while reading response header from upstream , client: 192.168.210.4, server: 192.168.210.150,…(Continue Reading)

Webサーバで利用する.sockはどこにあるのか

投稿者: Anonymous Webサーバで利用する.sockですが、どこで生成されるのかがわかりません。具体的には、Webサーバでcgiを用いてプログラムを実行するには、以下のような指定を行うと思います(TCPの場合はさておき)。 unix:///tmp/myproject.sock ただ、どのサイトでも、何事もなかったかのように説明なしに、上記のような使い方をしています。 説明なしなくらいなので、超常識なのだと思いますが、どのようにしてこれを生成or取得すればよろしいでしょうか。 これは、自動的に作られるファイルで、Webサーバ側と、アプリケーション側で同じ場所を指定していれば、勝手に良しなにやってくれるのでしょうか。 回答をお待ちしております。 解決 自己解決したので、回答します。 私はFlaskを利用していますが、FlaskのFastCGIの項で、以下の記載がありました。これは、FlaskでFastCGIとして動作させるには、これを書けばいいよ、というプログラムですが、これを記載すると、Flaskアプリケーションを動かした際に、Flaskが.sockファイルを生成してくれます。パスはもちろん、以下に記載の/path/to/fcgi.sockです。 WSGIServer(application, bindAddress=’/path/to/fcgi.sock’).run() そして、Flaskが生成した.sockに対して、Webサーバが接続しに行くようです。WebサーバとWebアプリケーションのつなぎ目を理解することができました。 回答者: Anonymous

Nginx 301や404になってしまう

投稿者: Anonymous root直下のファイル以外が読み込まれない状況です。 http://ドメイン/.well-known/acme-challenge内にあるindex.htmlを表示させたいのですが、アクセスすると、404や301エラーになってしまいます。 単純に静的ページの読み込みなんですが、どのように設定すれば良いか解決策を教えていただけると助かります。 環境は、CentOS7でNginx 1.12.2です。 curl -iコマンドで確認すると、以下のように結果が変わっているのがわかりました。 http://ドメイン/.well-known/acme-challenge HTTP/1.1 301 Moved Permanently Server: nginx Date: Sun, 20 May 2018 16:38:58 GMT Content-Type: text/html Content-Length: 178 Connection: keep-alive Location: https://ドメイン/.well-known/acme-challenge <html> <head><title>301 Moved Permanently</title></head> <body bgcolor=”white”> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html> http://ドメイン/.well-known/acme-challenge/ HTTP/1.1 404 Not Found Server: nginx Date: Sun, 20 May 2018…(Continue Reading)

gzip_types を限定すれば BRACH・CRIME 攻撃を受ける心配はない?

投稿者: Anonymous 最新のRails、Nginxで、SSLを使用しています。BREACH, CRIMEのセキュリティ的な問題から、Nginxのgzipをオフにしているのですが、gzip_types で text/css や application/javascript だけなら、利用しても大丈夫なのでしょうか? 解決 それらは、「ユーザーが制御可能な文字列」と「秘密の文字列」の両方がレスポンスに含まれる時に、二つの文字列が一致するかどうかで圧縮後のサイズが変化することを利用した攻撃です。 このような挙動を示すかどうかが重要であり、レスポンスの形式は関係ありません。動的に生成する場合、 CSS や Javascript であっても同様に注意が必要です。 もしあなたが「このMIMEタイプは動的に生成することはない」と言い切れるのであれば、そのような設定でも構わないように思います。 参考 SSL暗号を無効化する仕組み – BREACH, CRIME, etc | yohgaki’s blog 回答者: Anonymous

uWSGI Emperor について

投稿者: Anonymous リンク先内容で、uWSGIを複数起動して、異なる結果を表示させたいのですが ・実行すると、画面には同じ結果が表示されます… ファイル構成 /var/www/中略/emperor/ ┗emperor.ini /var/www/中略/hoge/ ┣hoge.ini ┣hoge.py ┣hoge2.ini ┗hoge2.py /etc/systemd/system/uwsgi.service [Unit] Description=uWSGI Emperor After=syslog.target [Service] ExecStart=/usr/bin/uwsgi –emperor /var/www/中略/emperor/emperor –uid nginx –gid nginx RuntimeDirectory=/var/run/uwsgi/app Restart=always KillSignal=SIGQUIT Type=notify StandardError=syslog NotifyAccess=all [Install] WantedBy=multi-user.target /var/www/中略/emperor/emperor.ini [uwsgi] emperor = /var/www/中略/hoge uid = nginx gid = nginx /var/www/中略/hoge/hoge2.ini [uwsgi] uid = nginx gid = nginx socket = /var/run/uwsgi/app/app.sock…(Continue Reading)

Subir archivos con angularjs en nginx

publicado por: Anonymous Quiero subir un archivo en angular usando post multipart, en el lado del servidor uso nginx como balanceador de carga conectado a varios servidores de aplicaciones y no sé si al hacer esto envíe las diferentes partes del archivo a diferentes servidores de aplicaciones. solución Recuerdo en jquery haber usado la librería…(Continue Reading)

nginxでサブドメイン名に指定したポート番号へフォワーディングしたい

投稿者: Anonymous nginx.confファイルの書き換えだけで実現できるものでしょうか? https://8001.example.com/へのリクエストをhttp://example.com:8001/へフォワーディングしたいです。 よろしくお願いします。 解決 luaモジュールを使えば実現できそうです。 こちらにluaを使って proxy_pass の宛先を変数で指定するサンプルがあります。 http://d.hatena.ne.jp/hiboma/20120205/1328448746 Hostを取得する方法もありますので、Hostのポート部分を取得し、上のサンプルのようにproxy_passの宛先を設定してあげればたぶんできるかと。 https://www.nginx.com/resources/wiki/modules/lua/#ngx-req-get-headers 回答者: Anonymous

Ubuntuでプロキシーサーバを構築

投稿者: Anonymous Ubuntuにプロキシーサーバを構築して、このプロキシー経由した通信には帯域制限をしたいと思っています。 nginxは使い慣れているのでこれでできれば一番いいのですが、Googleで検索するとリバースプロキシーばかり出ます。私がやりたいのは普通のプロキシーです。そもそもできるのかの可否と帯域制限をかけるときの設定サンプルコードを教えていただけると幸いです。参考になるページのURLでもかまいません。 何卒よろしくお願いします。 解決 フォワードプロクシ Nginxではリバースプロクシと似た設定でフォワードプロクシを利用できるはずです。 例:Nginxでyumやwget用のフォワードプロキシ | A Convenient Engineer’s Note 英語版SF: NGINX as http proxy server (not reverse proxy) – Server Fault リンク先にもあるようにSSLは無理なようですが…… 帯域制限 通常と同じようにlimit_rateでいいかと思います。(こちらは経験がないのでわからなければnginx で帯域制限をかける(limit_rate を使ってみる) | レンタルサーバー・自宅サーバー設定・構築のヒントなどを参考にどうぞ。) 回答者: Anonymous

nginx+php-fpmにfsockopenでリクエストを送信すると、Nginxのログにステータスコード499が記録される

投稿者: Anonymous サイトに設置しているPHPにアクセスされた際に、アクセス解析用のPHPを非同期で実行させするのに、GET/POSTで引数を渡せるfsockopenを利用しています。 これを下記のよう実装するとapache+phpの環境だと問題なく動作しますが、nginx+php-fpmの環境だと動作しません。 その時のnginxのアクセスログを見ると、解析用のPHPに499のステータスコードが表示されています。また、phpのエラーログには何も表示されません。 (apache+phpの環境では200のステータスコードで、解析用PHPは実行されます。) 対応方法や問題点などありましたら、ありますでしょうか? $host = “192.168.18.10”; // 解析用のサーバ $port = “80”; $script = “analytics.php”; // 解析用のPHP $param = “aflag=on”; $url = “http://”.$host.”/”.$script.”?”.$param; $fp = @fsockopen( $host , $port , $errno , $errstr ,30); if( !$fp ) { return false; } $string = ‘GET /’.$script.”?”.$param . ‘ HTTP/1.1’ . “rn”; $string .= ‘HOST:…(Continue Reading)

Nginx+Railsコンテナでdocker-composeしてブラウザでアクセスすると500の内部サーバエラーが出る

投稿者: Anonymous 実現したいこと docker-composeで立ち上げたRailsアプリに、ブラウザからアクセスする。 解決したい事象 下記のコンテナ構成でdocker-compose upでコンテナを立ち上げました。 APサーバ:Rails Webサーバ:Nginx DBサーバ:MySQL そして、docker-compose upではエラーが出なかったので、ブラウザでアプリへアクセスしたところ、 下記エラー画面(500 Internal Server Error)が表示され、アプリの画面が正常に表示できません。 何が原因として考えられるか、また解決方法についてお伺いしたい次第です。 なお、先日までは、「Rails」+「MySQL」という構成でDockerを使用しており(Nginxなし)、 その際は問題なくアプリの画面が表示できていました。 この度、Nginxを使用したいと思い、Nginxのコンテナも追加しました。 試したこと サーバ側のエラーメッセージに 「worker_connections are not enough while connecting to upstream」 とあったので、その内容を調査し、下記のQiita記事の内容から、 worker_connectionsを増加させる記述をNginx設定ファイル(nginx.conf)へ行いました。 しかし、事象・エラーメッセージ共に変化せずでした。 [Nginx]worker_connectionsとworker_rlimit_nofileの値は何がいいのか? 現在、nginx.confの内容に原因があるのではと推測し、 エラーメッセージで検索し、調査を続けているところですが、 並行してご質問させていただきました。 サーバ側エラーメッセージ nginx.conf # プロキシ先の指定 # Nginxが受け取ったリクエストをバックエンドのpumaに送信 upstream myapp { # ソケット通信したいのでpuma.sockを指定 server unix:///myapp/tmp/sockets/puma.sock; } server { listen 80;…(Continue Reading)

Nginxプロキシサーバで静的ファイルは無意味か

投稿者: Anonymous location ~* .(?:html|xml)$ { expirs 1d; add_header Cache-Control “public”; } try_filesでURLの後尾に拡張子.htmlが無くてもhtmlと認識しています。 Nginxリバースプロキシの標準通りの設定を施しています。 この状態で/var/cache/nginx/my_proxyを監視しています。 http://hoge.com/car.htmlにアクセスするとmy_proxyまでのパスに何も生成されません。 http://hoge.com/carにアクセスすると /var/cache/nginx/my_proxy/0/2d/sdadafが生成されました。 rm -fR /var/cache/nginx/my_proxy/* 削除して次はlocation~*の部分のhtmlだけ消してNginxを再起動すると、 http://hoge.com/car.htmlにアクセスしても /var/cache/nginx/my_proxy/0/2d/sdadafが生成されました。 つまりexpirsでhtmlをキャッシュしていれば、WordpressなどPHPを使用しないサイトにリバースプロキシは皆無ということでしょうか? リバースプロキシは本来、動的ファイルをキャッシュする目的で作られたんでしょうか? また、expirsでキャッシュしたキャッシュファイルはどこにありますか? また、Nginx.confの文字列は少ない方がWEBサイトが高速になりますか?(includeせずにインラインに入れるなど) 解決 expirsでキャッシュしたキャッシュファイルはどこにありますか? Module ngx_http_headers_module expires は ブラウザキャッシュ のためのヘッダーを送信するためのオプションです。ブラウザからこのNginxサーバーに直接アクセスしている場合、サーバーにキャッシュされるものではありません。 リバースプロキシは本来、動的ファイルをキャッシュする目的で作られたんでしょうか? リバースプロクシは名前の通り、プロクシです。クライアントからのリクエストを他のサーバーに投げて、そのレスポンスをクライアントに返すことが仕事です。 その道中で、リクエスト先のサーバーからのレスポンスをNginxでキャッシュすることによりリクエスト回数を減らし、負荷やロスタイムを軽減させることが出来るのがプロクシキャッシュです。 任意のWebサーバーにはApache HTTPDやphp-fpmを始めとする様々なものが該当します。 やっていることはCDNと大幅には違いないでしょう。(CDNには分散化などもあるため違うと言えば違いますが……) 一方でNginxはプロクシサーバーではなくWebサーバーとしての機能を持ちます。 一般に静的ファイルへのリクエストに対してはNginxは「プロクシサーバー」としては利用されません。 サーバー内の静的ファイルを返すだけならレスポンスが変わるわけでもなく、Nginxからのリクエストは必要ないのでキャッシュを別途つくるのは無意味であり、容量の無駄ともいえます。 (キャッシュと配信元でストレージアクセスのレイテンシが大幅に異なってくるならこれ限りではないでしょうが) Nginx.confの文字列は少ない方がWEBサイトが高速になりますか?(includeせずにインラインに入れるなど) 実装を知っているわけではないですが、設定ファイルはコンパイルされた上でメモリ上にキャッシュされるはずなので、そのような違いは無いかと思います。むしろ管理が大変になるだけかと。 回答者: Anonymous

docker-composeでnginxからstaticフォルダーが参照できるnginx-app.confの設定

投稿者: user28197 お世話になっております docker-compose初心者です 不透明な点、不足点等あればご指摘お願いいたします 参考にした記事 https://sleepless-se.net/2018/06/12/dockerdjango 利用したリポジトリ https://gitlab.com/sleepless-se/django-uwsgi-nginx-https 環境 CentOS Linux release 7.5.1804 (Core) Django==2.1.2 djangorestframework==3.9.0 docker==3.5.1 docker-compose==1.23.0 私は今、docker-composeを使ってDjangoをHTTPS化してデプロイしようと試みています 参考にした記事のリポジトリを利用してWebアプリのHTTPS化は成功しました しかし、Nginxからstaticフォルダーが参照できておらず、CSS等が適用できていない状態です 記事を見るとnginx-app.confを設定するようですが、自分の環境での書き方がわからず悩んでいます Djangoのアプリはappの中にプロジェクトの中身を全て入れてあります appのディレクトリの場所は以下の通りです /home/centos/django-uwsgi-nginx-https/django-uwsgi-nginx/app 現在以下のようにappの直下にstaticフォルダがある状態です app ├── db.sqlite3 ├── manage.py ├── project ├── requirements.txt ├── static ├── templates 記事では以下のようにnginx-app.confを設定するとあります location /static { alias /code/app/プロジェクト名/static; } ですが私のstaticフォルダはapp直下のため、以下のように書いたのですが機能しませんでした location /static { alias /code/app/static; } docker-compose.ymlは以下の通りです(ドメインは記載を変えています)…(Continue Reading)

Resolver error “Primary script unknown” con Nginx

publicado por: Anonymous Al configurar en ubuntu 16.04 un LEMP (Nginx, MySQL, FPM) la versión 7 de PHP y FPM y cuando he ido a hacer una prueba con php, el log de nginx me tira esto. 2016/08/08 22:54:50 [error] 2251#2251: *4 FastCGI sent in stderr: “Primary script unknown” while reading response header from upstream,…(Continue Reading)

Nginx を再起動しても、php-fpm を再起動したことにはなりませんか?

投稿者: Anonymous Nginx と php-fpm の関係性を理解できていません。 何となく、Nginx の上に php-fpm が載っているようなイメージを抱いているのですが、 例えば、Nginx を再起動しても、php-fpm を再起動したことにはならないのですか? 質問背景 原因は不明ですが、朝確認してみたら「作成しているWebサイトの表示だけ」がとても遅くなっていることがあります。 何か遅いプロセスか何かが走っているのかと思い、取り敢えず、Nginx と MySQL を再起動しています。 これまでは php-fpm を再起動 していなかったのですが、ふと Nginx を再起動しても、php-fpm を再起動 したことにはならないのかと思い、質問しました。 環境は、CentOS7です。 解決 質問の冒頭: Nginx と php-fpm の関係性を理解できていません。 何となく、Nginx の上に php-fpm が載っているようなイメージを抱いているのですが、 例えば、Nginx を再起動しても、php-fpm を再起動したことにはならないのですか? それについては、この記事の図が分かりやすいのでは? NginxでPHPを動かす ・PHP-FPMというのは、PHP-FastCGI Process Managerの略で、cgiです。 ・PHP-FPM(=FastCGIのインターフェース) → このプログラムを使って、PHPを動作をさせます ▼ cgi方式 nginxがphp-fpmにphpの処理を依頼し、php-fpmがphpを処理します。 (紹介先記事にこんな感じの図があるので参照してください。) +———+ +———+…(Continue Reading)

logrotate時に出るparent directory has insecure permissionsに関して

投稿者: Anonymous 次のように、nginxを動かしているユーザーtekitouに/var/log/php-fpm以下の所有権を与えると chown -R tekitou:tekitou /var/log/php-fpm 以下のようなエラーが出ます /etc/cron.daily/logrotate: error: skipping “/var/log/php-fpm/error.log” because parent directory has insecure permissions (It’s world writable or writable by group which is not “root”) Set “su” directive in config file to tell logrotate which user/group should be used for rotation. error: skipping “/var/log/php-fpm/www-error.log” because parent directory has insecure permissions (It’s…(Continue Reading)

「$ sudo journalctl -xe」と「$ sudo systemctl status nginx.service -l」について

投稿者: Anonymous Nginx起動しなくなった時に、「$ sudo journalctl -xe」や「$ sudo systemctl status nginx.service -l」を打つのですが、それぞれどういう意味ですか? $ sudo systemctl status nginx.service -l ・Linux オペレーティングシステム用のシステムおよびサービスマネージャーであるsystemd のログの詳細を(出力時にユニット名を省略せず)表示? ・Nginxに限った内容表示ですか? $ sudo journalctl -xe ・ログの詳細情報を含めて表示し、最後に飛ぶ? ・何のログですか? systemd ジャーナル? ・ジャーナル=ログですか? ・Nginxに限った内容とは限らない?? 環境 ・CentOS7 ・Nginx 解決 systemctl status nginx.service -lは指定したユニット(サービス)の状態、直近のログファイルを確認する方法。 journalctl -xeはsystemd-journaldが収集したジャーナル=ログを確認するコマンド。こちらも-u UNITNAMEでユニット名を指定することができますが、質問の実行方法では特に指定がないのですべてのログを表示するはず。 ログは一般的に末尾に追記されていくので、問題が起こった直後はログの一番最後から確認する方が原因を見つけやすいので、-eオプションを推奨しているのでしょう。-xは追加の解説メッセージがもし存在すれば表示するオプションです。 今回実行されたコマンドは恐らくnginxで問題が起きている際のメッセージを参考にしてだと思いますが、sudoコマンドを実行する場合には以下の様な格言もありますので参考までに。 sudo初回実行時のメッセージ – Qiita Think before you type.(入力する前に考えること) With great power comes…(Continue Reading)

ルートドメインでサイトが表示されないドメインがある

投稿者: Anonymous サブドメインで表示しているサイトを、ルートドメインで表示するよう変更しようとしているのですがうまくいきません ルートドメインが正常表示されているドメイン(〇〇〇〇.co.jp) /etc/nginx/conf.d/〇〇〇〇.co.jp.conf server { listen 80; server_name 〇〇〇〇.co.jp; root /var/www/html/〇〇〇〇.co.jp/〇〇〇〇.co.jp/public; index index.php index.html index.htm; ルートドメインが正常表示されないドメイン(xxxx.co.jp) /etc/nginx/conf.d/xxxx.co.jp.conf server { listen 80; server_name xxxx.co.jp; root /var/www/html/xxxx.co.jp/xxxx.co.jp/public; index index.php index.html index.htm; ブラウザ(Microsoft Edge)の画面表示 Web アドレスが正しいことを確認してください: 試したこと /etc/nginx/conf.d/xxxx.co.jp.confを下記へ変更後、Nginx再起動 server { listen 80; server_name xxxx.co.jp; root /var/www/html/〇〇〇〇.co.jp/〇〇〇〇.co.jp/public; index index.php index.html index.htm; ブラウザ(Microsoft Edge)の画面表示 Web アドレスが正しいことを確認してください: 補足 ・xxxx.co.jpのサブドメイン(hoge.xxxx.co.jp)は正常表示されています…(Continue Reading)

nginx 起動ができない

投稿者: Anonymous nginx初心者です。 レンタルVPSでWebサイトを公開しようと、CentOS7上でnginx1.12.1を動かしています。 起動しようとすると、以下のエラーが吐かれます。 systemd[1]: Starting nginx – high performance web server… nginx[4361]: nginx: [emerg] “http” directive is not allowed here in /etc/nginx/conf.d/default.conf:1 nginx[4361]: nginx: configuration file /etc/nginx/nginx.conf test failed systemd[1]: nginx.service: control process exited, code=exited status=1 systemd[1]: Failed to start nginx – high performance web server. systemd[1]: Unit nginx.service entered failed state. systemd[1]:…(Continue Reading)