Nginx
軽量かつ高性能なWebサーバ/リバースプロキシ/メールプロキシであるNginxと
その関連の話題を扱うスレッドです。
公式サイト
http://www.nginx.org/
nginx Wiki
http://wiki.nginx.org/ Win版でautoindex onでファイル名に日本語含まれてるとアウトなのって解決不可能? ドメインごとにログを分けるには自分でログファイルを作成しなきゃだめなんですよね?
パーミッションのオススメ設定は? nginxモジュールをテスト含めて一本書いたけど、
日本語のドキュメントが全くなくて大変だった。。。 英語のドキュメントも割と少なくて困った。
設定ファイル中に埋め込まれるいわゆる変数ひとつとっても、
速度とのトレードオフで扱いが大変になっていたり、
英語苦手な俺が少ない英語ドキュメントで理解するのはきつかった。
日本語ドキュメントは圧倒的に英語力が足りないので、
理解に時間を要した箇所について、チラ裏程度にこっそり書いて行く予定。 >>192
チェーンバッファの書き換えの正しいやり方について教えて下さい。 >>197
レスポンス書き出しの時に何かと出てくるngx_chain_t構造体の事かな?
今回はアクセスフェーズに挟み込んで独自の認証を組み込むモジュールだったから、
レスポンス書き出しに関しては触れてないです。すみません。 ちょっとコード確認してきましたが構造体を見る限り、
中身はngx_buf_tの単方向連結リストだから、
ngx_buf.h内に定義されてるマクロやら関数やらを使うのが正解なのかな?
(使いどころにもよるだろうけど)
というわけで圧倒的に知識不足でスマソ Cの文法理解したあとすぐにngixのソース読むのってきついですか? >>200
nginxのコードのすべて読み解くとかだったら根気が重要かなー
モジュール書くのに必要な箇所しか読んでないけど、
普段C言語触ってないような俺でもコードはすんなり読めたから、
nginxのコード自体は読みやすく出来てると思う。 >>199
レスありがとうございます。
filterを作ってるのですが、絵鏡ガイドを見てもチェーンを追加する方法しか
書かれてなくて困っています。
入ってきたinチェーンを破棄し、書き換えた新チェーンにゴッソリ入れ替えて
も大丈夫なのでしょうか。
ちなみにApacheも同じチェーン構造をしているらしいのですが、Apacheも同じ
ように処理するのでしょうか? >>204
期待に添えるレスではないかもせれませんが、
まず、Apacheモジュールは作ったことがないのでわかりません。
chainの書き換えに関してはSERVER_REWRITEフェーズあたりにハンドルさせて、
Requestプールを指定したメモリ領域を使って、書換を行う分には問題は起きないように見えます。
ですが、実際に試したわけではないので確証は持てません。
handlerにてr->urlの書き換えを行ったのですが、 書き換え後のURLで再びhandlerが呼び出されて二重に処理が実行されてしまいます。 これを防ぐ手段はありませんでしょうか? よろしくお願いします。 >>207
uri書き換え処理をNGX_HTTP_REWRITE_PHASEに登録したハンドラで行ってみてください。 >>208 レスありがとうございます。
調べてみるとhandlerを通常のREWRITEフェーズとSERVER_REWRITEフェースに
二重に登録していました。
handlerのdirectiveはlocation内でcallされる仕様のため、
通常のREWRITEフェーズのみに絞るとうまくいきました。
ありがとうございます。 GoogleのウェブマスターツールにあるエラーURL欄にスラッシュ無しのURLが表示されて困っています。
実際にアクセスするとエラーページが表示されます。
/yasai/daikon
( 本来のurlは /yasai/daikon/ )
自動でスラッシュを付けたいので
confファイルに
try_files $uri $uri/ =404;
を追記してアクセスしてみたのですが、404ページが表示されてしまいます。
80、8080 どちらの下に追加してもエラーが出ます。
どのように対処すればいいでしょうか? 自己解決しました。
正規表現を使えばいいだけでした。
ハイフンの無い連続した英数字だけだったので以下を追記しました。
rewrite /yasai/([0-9a-z]*)$ /yasai/$1/; Basic認証を特定のリモートホストからは無効にするにはどうすればよいでしょうか? なんて発音してる?
エンジンエックスで伝わらなくて
ああ「んぎんくす のことかよ」とか言われたらやだよな 公式がengine-xなんだからエンジンエックスだろ nginx [えんじんえっくす] は Igor Sysoev によって作られた HTTP とリバースプロキシのサーバで、メールプロキシサーバでもあります。 「サイオステクノロジー、高速Webサーバー『Nginx』の商用版を7月販売」を読んで驚きました。
Nginxの伸びを改めて感じさせられたからです。
http://itpro.nikkeibp.co.jp/article/NEWS/20140617/564699/
Webサーバーの世界で長く1位の座に座り続けてきたApacheはLinuxと並ぶオープンソース・ソフトの成功例だと
認識していたのですが、現実は変わり始めたようです。
上記記事には「オーストリアのQ-Successが提供するWeb技術の調査サービス『W3Techs.com』のレポートでは
記事執筆現在(2014年6月17日)、アクセス数上位1000サイトでの利用率はNginxが39.3%でApacheの33.8%を抑えて1位
アクセス数上位1万サイトでの利用率でもNginxが39.2%でApacheの39.2%と並ぶ」という一節がありました。
果たしてこれからWebサーバーの世界はどうなっていくのでしょうか。NginxがWebサーバーの代名詞に変わるのか
Apacheが巻き返すのか、それとも第三の勢力が登場するのか。目が離せません。
http://itpro.nikkeibp.co.jp/article/COLUMN/20140617/564807/ 大分今更じゃね?日経だしそんなもんか。
まぁ日本で話題になるようになったのはつい最近な印象で
情報遅いなぁとは思ってたけど。 こんなあからさまな捏造記事信じるやつ居るんだw
Nginx と Apache でシェア8割!?
すげーな!
Apache とシェア争いしてる IIS はどこ行ったの?
大量の google系のサーバーは無視?
泡沫サーバーという意味でお仲間の lighttpd は?
Nginxユーザーは頭の中お花畑だな >>220
データの真偽はともかく「アクセス数上位1000サイトでの利用率」と書いてあるのに
全世界のhttpサーバの話と勘違いして脊髄反射しちゃったのは何でなんだろうな? >>223
ありがとう。
一般にはリリースされてないのね。 ITpro編集長日記は記事の表面だけなぞってドヤ顔してるホント頭悪いページだな
理解浅いし話題遅いし編集部の評価を下げるだけのゴミ
元ネタ記事も低レベルの広告記事で参考リンクくらい貼れよと
Usage of web servers broken down by ranking
ttp://w3techs.com/technologies/cross/web_server/ranking
AlexaのポピュラーなWebサイトランキングとやらで対象を決めてるらしいが
サブドメインとかはシラネとか詳細不明で要するに中身はよく分からんw
ttp://w3techs.com/technologies
他の掲載データ
Usage of web servers for websites
ttp://w3techs.com/technologies/overview/web_server/all
Historical yearly trends in the usage of web servers for websites
ttp://w3techs.com/technologies/history_overview/web_server/ms/y
こういうのをエビデンスとか言い出すアホが出てくるとやっかいだが
ブラウザシェアと同様そんなのもあるんだと聞き流せるならいいんじゃね サーバ引っ越しのついでにapacheから乗り換えてみようかと思っています。
旧サーバに複数バーチャルがあり、ドメイン1つ以外はまだapacheのサーバに向いています。
ローカルマシンのhostsに設定すると、まだDNS解決していないドメインもアクセス出来るのですが
動作確認の為に自分以外にもアクセスしてもらう必要があり、
nginxに向いているドメインをaaa.com
apacheに向いているドメインをbbb.com、ccc.comとした場合
http://aaa.com/bbb
http://aaa.com/ccc
のような形でアクセスさせるにはどうしたらいいでしょうか いまのバーチャル用設定は下記の通りです。
server {
listen 80;
server_name aaa.com;
error_log /var/log/nginx/aaa.com/error.log warn;
try_files $uri $uri/ /index.php?q=$uri&$args;
location / {
root /var/www/vhosts/aaa.com/httpdocs;
index index.html index.php;
}
location /bbb/ {
alias /var/www/vhosts/bbb.com/httpdocs;
index index.html index.php;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/vhosts/bbb.com/httpdocs/$fastcgi_script_name;
include fastcgi_params;
}
} ブラウザからaaa.com/bbbにアクセスすると404エラーを吐いて
エラーログに
2014/10/03 19:43:18 [error] 11496#0: *10 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 自分のIP
6, server: aaa.com, request: "GET /bbb/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "aaa.com"
と出ます。他には設定ファイルからではなくln -sででbbb.comのドキュメントルートにリンク貼ってみたりしましたが同じエラーが表示されました。
エラー回避方法または他の実現方法ありましたらご教示ください ディレクトリ以外の設定まったく同じにしてhtmlからやり直せ 複数のドメインで同じスクリプトを動かすために、
設定ファイルの「server_name」で正規表現を使ったのですが、
そうすると$_SERVER['SERVER_NAME']で取得できる値も、
正規表現で記述した内容に置き換わってしまいます。
$_SERVER['HTTP_HOST']なら正常にドメインを取得できましたが、
利用している外部ライブラリでも$_SERVER['SERVER_NAME']を
多用していたので、できれば$_SERVER['SERVER_NAME']のまま
元のドメインの情報を取得する方法はありますでしょうか?
「server_name_in_redirect」という設定があったので、
それを「off」にもしてみましたが、「on」でも「off」でも
取得できる値は変わりませんでした。
もし対処法が分かる方がいれば教えてください。 別ドメインからのインラインフレームの呼び出しの禁止と
許可ドメインの設定に関して、
Apacheの.htaccessファイルでは以下のように記述して、
正常に動作していました。
Header set X-Frame-Options "SAMEORIGIN"
Header set X-Frame-Options "ALLOW-FROM http://hogehoge.com"
Nginxの設定ファイルでも同様に以下のようにしたのですが、
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Frame-Options "ALLOW-FROM http://hogehoge.com";
別ドメインからの呼び出しは、許可したい「hogehoge.com」からも
含めて全部弾かれてしまいました。
許可ドメインを設定する方法ってこの記述ではないのでしょうか? 質問失礼します。
Nginx-rtmpにて、配信を行おうと思ったのですが、
テストという事で配信レート20Mbpsに設定、配信開始後
/str/data.zip を人物Aに転送した場合、20Mbps
/str/live を人物Aに転送した場合、3Mbps
とRTMPライブストリーミングでの転送速度が極端に遅くなってしまいます。
なお、Twitch では速度低下することなく、問題なく配信できておりますので
RTMPプロトコル、アップロード側のプロバイダ規制はかかってないと考えています。
原因わかる方よろしくお願いします。 リバースプロキシを使ってる時ってmemcachedがあまり役に立ってない気がするんですが、みなさんはどういうふうに分業させてますか? 動画サイトのコンテンツをリバースプロキシでキャッシュしたいのですが、
キャッシュサーバを2台で冗長性を持たせるとキャッシュ効果も落ちてしまうのかなと思い、構成に悩んでいます。
たとえば2台のリバースプロクシのキャッシュを共有・同期する方法は有るのでしょうか?
それとももっと良い方法があったりするのでしょうか? 頻繁にアクセスされるファイルならほっといても両方にキャッシュされるし、
たまにしかアクセスされないならキャッシュしてもあんま意味ないし、
同期なんかせず普通にしてればいいんじゃね? GeoIPの話なかったのか。。
スレ検索して(´・ω・`)ガッカリ… ubuntuにてnginx+php5-fpmで
/var/www/root → tp:/domain.com/
/var/www/user1 → tp:/domain.com/user1/
/var/www/user2 → tp:/domain.com/user2/
こういうディレクトリ構成で運用したいんだけど全然うまく動かせない
同じような構成で動かしてる人いたら設定ファイルを見せてほしいです root /var/www/root;
location /user1/ {
root /var/www/user1;
}
lication /user2/ {
root /var/www/user2;
}
こんな感じじゃ駄目? >>243
location /user1/ {
root /var/www/user1;
}
これだと ://domain.com/user1/ に接続すると /var/www/user1/user1 にマッピングされてしまう
しかもuser1 user2わざわざ記述分けてる意味ない
>>242
root /var/www
locaiton / {
alias /var/www/root
}
://domain.com/root/ にアクセスするとそれも見えちゃうけど
副作用ってことでいいよね? http://www.doodletoo.com/#/white
いつも遊んでいた海外サイトなのですが突然nginxを導入しろ?のようなページに飛ばされて
利用できなくなりました…。
色々と調べてみてnginx1.9.3というのをダウンロードしてみましたが利用できるようにはなっておらず
「ウェルカムnginx」のページは見れて正常に動作していると出るのですが
肝心の利用したいサイトは見れず、という状況です…。
すいませんができるようにするにはどうすればいいか教えてもらえませんか? ハゲ侍 サブコミュ イケメン スカイプ マリリンマンソン Twitter マリオ64 ゲーム実況者 マリオカート
ハゲ侍 ツイッター 星のカービィ64 マリオサンシャイン ニコニコ超会議 ポケモン フレコ MH4G アメブロ
ハゲ侍 アメーバブログ 仕事 Skype ツイキャス モンハン 歌い手 スプラトゥーン マニアック
ハゲ侍 動画 顔 ドリームクラブ 好き 刃牙 サイレントヒル ドラゴンボール イケボ
ハゲ侍 漫画 フレンドコード NG縛り ニコニコ生放送 歌ってみた 太刀 ニコニコ超パーティー コミュニティ
ハゲ侍 大学 アキネーター 配信 ニコ生 サブコミュ マリリンマンソン イケメン 学歴
ハゲ侍 マリオカート Twitter スカイプ マリオ64 ツイッター ゲーム実況者 星のカービィ64 ニコニコ超会議
ハゲ侍 ポケモン マリオサンシャイン フレコ MH4G アメーバブログ 仕事 Skype ツイキャス
ハゲ侍 モンハン 歌い手 マニアック 動画 アメブロ スプラトゥーン 刃牙 ドリームクラブ
ハゲ侍 好き サイレントヒル ドラゴンボール 漫画 顔 NG縛り フレンドコード ニコニコ生放送
http://kanae.2ch.net/test/read.cgi/pcqa/1421101110/51
http://kanae.2ch.net/test/read.cgi/pcqa/1415921104/55
http://kanae.2ch.net/test/read.cgi/pcqa/1436852775/17 http://redmine_server:8080/ で動いてて
http://nginx_server/redmine でアクセスできるように
したいんだけどうまくいかないです。
具体的には stylesheet が適応されず、リンクも見つかりません。
アドバイスお願いします。
location ~* ^/redmine(.*) {
proxy_pass http://redmine_server/$1$is_args$args;
} >>249
これでどうかな?違ったらゴメン.
location /redmine/ {
proxy_pass http://redmine_server:8080/;
} >>250
最初そのように書いたんですが動きませんでした。
location / {
proxy_pass http://redmine_server:8080/;
}
→ http://nginx_server/ でアクセス OK 。
location /redmine/ {
proxy_pass http://redmine_server:8080/;
}
→ http://nginx_server/, http://nginx_server/redmine/ ともに 404 でアクセス NG 。
なお、自分の記入に間違いがあったので訂正します。
location ~* ^/redmine(.*) {
proxy_pass http://redmine_server:8000/$1$is_args$args;
}
→ http://nginx_server/redmine/ でアクセスできるが stylesheet なし、リンクがおかしい。
よろしくお願いします。 >>251
location /redmine/ {
proxy_pass http://redmine_server:8080;
}
ではどう?(proxy_pass の引数に/を付加しない) >>252
最後のスラを削除すると、 404 になってしまいました。。。 >>252
解決しました。
まず /path/to/redmine/config/routes.rb に
Redmine::Utils::relative_url_root = "/redmine" # 追記
Rails.application.routes.draw do
scope Redmine::/Utils::relative_url_root do # 追記
root :to => 'welcome#index', :as => 'home'
:
end # 追記
end
と記入し、 unicorn を再起動。
次に、 /etc/nginx/conf.d/default.conf に
location /redmine {
alias /var/lib/redmine/public;
try_files $uri/index.html $uri.html $uri @app;
}
location @app {
rewrite ^/(.+) $1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://redmine_server:8080/$1$is_args$args;
}
と記入し、 nginx を再起動。
以上で http://nginx_server/redmine/ でアクセスできるようになりました。
Redmine 公式の HowTo Install Redmine in a sub-URI と proxy_pass を組み合わせて実現できました。
<http://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_in_a_sub-URI>
ありがとうございました。 URLをwwwなしでリダイレクトさせることはできたのですがindex.htmlを表示させない?削る?ように統一する方法はありますか?
リダイレクトループから出られなくなりました
お知恵を拝借したいです、よろしくお願いします 自宅鯖(fedora23,nginx1.8.1)と全く同じコンフィグ使ってるんですがVPS(archlinux最新,nginx1.8.1)でだけ問題が発生します
httpできたリクエストをhttpsに飛ばしてるんですがVPSの方だけhttpでアクセスすると
400 bad request plain HTTP reqestがHTTPSポートに送られた
ってなかんじの表示が出てちゃんと飛ばしてくれない(ここはまだhttp)
conf.d/hoge.confにこんな感じに設定
server {
listen 80;
server_name fuga.hoge.net;
return 301 https://fuga.hoge.net$request_uri;
}
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/letsencrypt/live/hoge.net-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hoge.net-0001/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
root /var/www/fuga/;
server_name fuga.hoge.net;
以下アクセスログやindex、fastcgiの設定
原因わかりますか? 何かとは?
ファイアーウォールみたいなものは全て許可の設定になってるしそれはないと思います nginx.confの方になんか書いてあったっぽいです
そっちもコピペで内容同じにしたらうまく行きました 特定のディレクトリ以下のファイルやディレクトリのアクセス禁止ってどう書けばええの?
locaiton /hogehoge {
deny all;
}
だけじゃダメだよね? それなら基本的には大丈夫なんだけど、自分でアクセスした結果はどうなの?
質問するなら設定内容とその目的、結果はどうなったかを書いていかないと
情報を小出しにするのは宜しくないよ。聞く側も聞かれる側もだけど。
もっともスルーすれば良いんだけど俺みたいに食い付いちゃうのもいるww アクセスするとディレクトリ自体は403返してくれるんですがファイルに直接アクセスすると見えちゃうんです
もちろんキャッシュとか消して見てる /hogehogeは403
/hogehoge/fuga/a.txtは普通に見れる
という感じです >>266
書いてないです
/ とphpと/hogehogeと画像とjsのキャッシュ設定だけです ReverseProxy かましてバックエンド側にその拒否設定とか書いてない? ただのjsonやテキストファイルなのでnginxだけ処理してるはず
phpだけphp-fpmに回してる もう一度 conf 見なおすとかすると良いんじゃ無いかなー。
うちの検証環境で同じ事をしても指定パス以下は全て 403 返してくるから想定通りに動くよ。 ついでに一部伏せたログペタリ
# conf
location /test/ {
deny all;
}
# log
2016/04/20 11:21:05 [error] 27953#27953: *1 access forbidden by rule, client: 192.168.x.x, server: example.com, request: "GET /test/a.txt HTTP/2.0", host: "example.com"
2016/04/20 13:52:48 [error] 28742#28742: *2 access forbidden by rule, client: 192.168.x.x, server: example.com, request: "GET /test/hoge/b.txt HTTP/2.0", host: "example.com" confがこんな感じで
location / {
index /hogehoge/public/index.php;
}
location ~\.php$ {
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~\.(jpg|gif|png|css|js) {
expires 7d;
}
location /hogehoge/private/ {
deny all;
}
} 具体的な設定(出せないところは伏せるとして)書かない時点で
エスパー案件だったか
構ったのが悪かったよ、あほらし 218.221.35.229 - - [20/Apr/2016:14:09:20 +0900] "GET /hogehoge/private/conf/options.json HTTP/1.1" 200 12219 "-" "Mozilla/5.0 (Linux; Android 5.1; Power Build/LMY47D)"
普通に出来ちゃってるんです 270, 271 だけど
情報小出しだし、どうも要領を得ない感じなのもあって時間とれないんで
他の人のレス待つか設定見なおすとかしてみるといいかもですね。
ではでは。 jsonが~\.(jpg|gif|png|css|js)にマッチしてるからとか。
~\.(jpg|gif|png|css|js)$にしてみたらどう? >>276
それです
無事403にできました
ありがとうございます CORS対応しようとしててgzip off;にしたんですがContent-Lengthが0にしまう
どこを直したらいいですか?
コンフィグとcurl -vの結果
http://hastebin.com/ubopavobis.vhdl google-chrome で http2 が有効にならない.
切り分けがうまくいってないんですが,怪しいところがないか,アドバイスもらえませんか.
サーバ
OS: debian jessie
nginxバージョン: 1.10.1
コンパイルオプション(モジュール系): --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_gzip_static_module --with-http_v2_module
クライアント
OS: win8.1
ブラウザ: cyberfox 45.0.1,google-chrome 51.0.2704.63
サーバ側の切り分け
・cyberfox+spdy indicator → http2有効
・google chrome+spdy indicator → spdy無効
クライアント側の切り分け
・wikipedia へ google chrome+spdy indicatorでアクセス → http2有効
大していじれないブラウザよりも,自分でコンパイルしているnginx側を疑っているんですが,google-chromeで一度も成功しておらず,何が問題か判明していません.
nginxの設定は次の投稿で user www-data;
worker_processes 1;
events {
worker_connections 768;
}
http {
include mime.types;
include deny.conf;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
gzip on;
gzip_disable "msie6";
gzip_comp_level 1;
gzip_proxied any;
gzip_vary on;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
(続く) server {
listen 443 ssl http2;
root /home/USERNAME/public_html;
index index.php index.htm;
access_log logs/ssl_access.log;
error_log logs/ssl_error.log;
server_name www.hadacchi.com;
ssl_certificate /path/to/server.crt;
ssl_certificate_key /path/to/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!ADH:!MD5:!aNULL:!eNULL:!SHA1:!MEDIUM:!LOW:!EXP:!kEDH;
ssl_prefer_server_ciphers on;
...(以下,locationディレクティブの羅列)
}
}
以上です.
怪しいところがあれば,教えてくださいませ. ですよねー
いつまでも止めておくわけにいかないので,再開しました
ってそれはいいとして,なんか怪しい設定ないですかね; 追加です.
まさかと思ってクライアントのOSかえたら,下の環境でhttp2通信できました.
OS: ubuntu 14.04
ブラウザ: google-chrome 50.0.2661.94
もーワケワカメ
google sync使っているから,基本は同じ環境になっているはずなんですがー
chromeが臭い気がしてきたので,クライアントの設定の方を調べることにします.
結局,鯖の設定晒して終わるっていう... なんだよw
今アクセスして色々みてたけど、h2 enable なってるから出来てるじゃないかーと
レス入れようかとおもってたところだわw >>287
認証方式というのは,ssl_ciphersのことで合ってますか?
コメントアウトしてみましたが,win版chromeからはhttp2での接続になりませんでした.