Nginx
軽量かつ高性能なWebサーバ/リバースプロキシ/メールプロキシであるNginxと その関連の話題を扱うスレッドです。 公式サイト http://www.nginx.org/ nginx Wiki http://wiki.nginx.org/ 複数のドメインで同じスクリプトを動かすために、 設定ファイルの「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での接続になりませんでした. 試しにCanary版も入れてそのバージョン固有の問題なのか調べてみようぜ >>288 お手数おかけして,すみません >>290 こいつで合ってますか? ttps://www.google.co.jp/chrome/browser/canary.html google syncを使う前(spdy indicatorのみいれた)/後とも,http2になりませんでした. chromium browserも入れてみましたが,同様にhttp2にはなりませんでした. バージョン固有ではない感じですかね… まさかのクライアントOS依存,もしくはIEに入れている証明書関連かも… nginxの問題ではない気がしてきていますが,もし進展があれば,また,報告に来ます. ますます,よく分からないことが分かったので,報告します. スレ違いになってきた気がするのと,今すぐに試せることも尽きてきましたので,報告はこれで最後にしようと思います. お騒がせしました. 別ホスト(windows 7 Ultimate/Professional)のgoogle-chrome 50.0.2661.102 でhttp2が有効になりました. win8.1の方は,新しいユーザを作成してインストール済chrome(さっきと同じ)でspdy indicatorのみ入れてアクセスしましたが,http2は有効になりませんでした. まとめ Win 7 Ult + google chrome → http2 ok Win 7 Pro + google chrome → http2 ok Win 8.1 Pro + google chrome/chrome canary/chromium browser → http2 ng ubuntu + google chrome → http2 ok 試してみてくださった皆さま,アドバイスくださった皆さま,ありがとうございました. >>293 ご紹介ありがとうございます. 試そうとしたのですが,いくつか知らない設定が出てきてしまったので,さっと試せそうにないです. nginxの設定が原因だと判明しましたら,また報告に来ます. openssl1.0.2hでnginxをビルドしなおしたら治った(confはそのままで) そういやうちの鯖もログ見てたら友人のWin8.1Chrome51からはh2なってるけど俺のWin10Chrome53からは1.1なんだなあ 不思議だ うちの鯖はArchだから元から1.0.2hなのよね ssllabで見てもNPNもALPN有効になってるし >>279 一部ここまで出てきた情報の繰り返しになるかもだけど… ・Chromeが5/15のリリース以降NPNサポートを落とし、ALPNだけに対応するようになった ttps://ma.ttias.be/chrome-drops-npn-support-for-http2-alpn-only/ ほんの最近の話なのでバージョンによってはまちまちかもしれない。 ・OpenSSLは1.0.2からALPNに対応、1.0.1はNPNだけ対応 よってブラウザがChromeかつサーバ側がOpenSSL 1.0.1とリンクしたサーバだとHTTP/2での通信にはならない。 で、 > サーバ > OS: debian jessie jessieのOpenSSLは1.0.1なのでまさに上に書いた状況に陥ったということかと。 >>295 さんも書いてるけどOpenSSL 1.0.2を野良ビルドしてNginxをそれにリンクすればひとまずはおkですね。 特定のドメインにhttpsで来た通信を証明書使わずに別に回すことってできないよね? たくさんあるから証明書の管理面倒だ >>301 無能さが知れるからこれ以上口開かない方がいいよ >>295 >>300 jessie-backportsから.opensslだけ1.0.2を引っぱってきたら,できました! ありがとうございます! もっと頻繁に見てれば良かった… >>303 何をトチ狂ったか… これは,279で阿呆を晒してた私のレスです… 同じポートの設定ファイルを 複数のファイルに分割ってできる? ポートだけならいくらでも 多分聞きたいのはこっちだけど コンフィグの中にinclude hoge書けばそこにhogeの中身読み込んでくれるよ listen 80; があちこちの設定ファイルにあっても ちゃんと処理してくれる ねぇ、これなに言ってるか分かる人いる? https://www.wpx.ne.jp/server/news_detail.php?view_id=1442 ・Nginxは静的コンテンツを高速に配信するように設計されたWebサーバーです。 ・Nginxの導入により高速かつ安定したサーバー環境でWordPressを運用することが可能です。 静的コンテンツ向けのサーバーにした事が、WordPressの高速化にどう影響するの? 何をどう実装してんのかしらんからなんともいえんな。 リンク先には基盤システムにとあるから、ロードバランサーやらフロントエンドとして使って更にキャッシュさせてるだけかもしれんし。 >>309 まぁ、そういう使い方は確かにNginxの分野だからそうなのかもしれないね。 書いてある内容の意味と大きく違うけど。 特定ディレクトリにアクセスされたら別ドメインに飛ばしたいんだけどif全部通すの以外でやれない? location /hogeにreturn書いたら行けた .htaccess みたいに個別の設定を各ディレクトリに置きたいんだけど どうしたらいいの? nginx.confあたりにinclude hogeでマッチするように書けばいいんだよ hogeにはドキュメントルート/*適当な名前みたいな感じで >>314 そうなんだ じゃあ今まで通りconf.dに置くしかないのか Windowsサーバーを使ってNginx&PHP7で動かしてるんだけどfile_get_contentsした時にlocalhostのPHPが取得できん 外部サイトはOKだしlocalhostでもHTMLとか単純なTXTとかなら取得できる なんで? ずーっと昔,chromeでhttp2が有効にならないエラーを報告した者です. ここ最近,firefoxでアクセスしてもSSL接続に対してエラーが出るようになったので,本格的ににおかしいと思って調べたところ,こんな記事を見付けまして,StartSSLを捨てました. http://blog.zolesystem.info/startssl%EF%BC%88startcom%EF%BC%89%E3%81%AEssl%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%8Ciphone%E3%81%AA%E3%81%A9%E3%81%A7%E8%AA%8D%E8%AD%98%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84%E5%95%8F%E9%A1%8C/ で,SSL証明書を別のCAから発行したら有効になりました. StartSSLが弾かれたWoSignとの一件が原因なのか,それはおいといてStartSSLの発行するSSL証明書が原因なのかは不明だけれど,Certbotの証明書に替えたらhttp2が有効になりました. 大分と時間がたったけど,一応解決したのでご報告まで. リバースプロキシのlocationで (*.) はどんな意味ですか? *. とは異なりますか? 書き間違えました。 (*.) と .* は異なりますか? (.*)って普通に正規表現でしたね。 頭の中で(*.)と思い込んでてこれって正規表現じゃ無いと間違えてしまいました。 構文的にはできているのですが、何故そうなってるかが知りたくて書いてみました。 正規表現スレに移動します。 失礼しました。 add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; これが無視されるようになってしまいました。 昨晩apcuの設定値を弄り、その直後は何もありませんでした。 今朝チェックしてみると、上記が無視されています。 apcuの設定を元に戻して再起動かけてもやはり無視されます。 どうしたら上記が有効になるでしょうか? その後わかったのが「無視されている」のではなくて、 重複して宣言されていることでエラーが発生しているようです。 nginx.confでそれらを設定していないのに、 そのヘッダが定義されているのは何故なのでしょうか? 質問なのですが、location @proxy{ や、 try_files $uri @proxy など アットマークで始まる変数(?)は、どういう意味、どこで定義されているのでしょうか? >>327 ありがとうございます。 https://www.nginx.com/resources/wiki/community/faq/ にもありますね。 named location というのですね。 @、アットマークがうまくググれませんでした。さんくす。 >>327 アットマークで検索できないから仕方ない charset utf-8; と書いてもContent-Typeに追加されないのはなぜ? ☆ 日本の、改憲をしましょう。現在、衆議員と参議院の両院で、 改憲議員が3分の2を超えております。『憲法改正国民投票法』、 でググってみてください。国会の発議はすでに可能です。 平和は勝ち取るものです。お願い致します。☆☆ read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる