Nginx
軽量かつ高性能なWebサーバ/リバースプロキシ/メールプロキシであるNginxと その関連の話題を扱うスレッドです。 公式サイト http://www.nginx.org/ nginx Wiki http://wiki.nginx.org/ >>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を超えております。『憲法改正国民投票法』、 でググってみてください。国会の発議はすでに可能です。 平和は勝ち取るものです。お願い致します。☆☆ httpからhttpsにリダイレクトするとなぜかhttpsでもhttpsに無限リダイレクトされる curl -v https://www.example.com/ < HTTP/2 301 < date: Wed, 28 Mar 2018 05:56:05 GMT < content-type: text/html < location: https://www.example.com/ http2 http1.1 IPv4,IPv6どれも変わらず httpの設定でreturn行を無効化してrestartすればhttps側のリダイレクトも止まるんだけどなんでこんなことが起きるの? server { listen 80; listen [::]:80; server_name www.example.com; return 301 https://$server_name$request_uri ; ←ここを無効化でhttpsで接続したときの状態も変化する } server { listen 443 ssl http2; listen [::]:443 ssl http2; >>332 443 で Listen してるブロックにも server_name 書いた方がいいのでは。 あと return 行の記述はうちだとこうしてるな。 return 301 https://$host$request_uri ; >>333 もちろんserver_name書いてあるよ httpsの通信自体はできてるから証明書の設定は効いてて設定自体は有効なはず httpsで無限リダイレクトされるという話題なのにhttps側の設定をロクに出さない質問者 add_headerにalways追記したらできるようになりました VPSを始めたばかりなんですが、 PLESKで「静的ファイルnginxで直接処理」という項目があります。 これらに拡張子を設定すると、 Webコンテンツ側で一部表示できなくなったりします。 nginxに直接処理させた方が良いファイルって、 どんなものがあるんでしょうか? 知り合いから教えてもらったパソコン一台でお金持ちになれるやり方 時間がある方はみてもいいかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 BZW1A (例)otameshi.comとURLを入力したとき、 otameshi.com:8065にリダイレクトさせたいです。 proxy_pass http://localhost:8065 または proxy_pass http://127.0.0.1:8065 やxxx.xxx.xxx.xxx:8065(自分のサーバIP) としたとき、 繰り返しのリダイレクトでエラーになってしまいます。 どうすると同サーバー内のポート違いへ移動できるようになるのでしょうか? Mattermostというソフトを動かしたいのですが、 直に8065を付ければ動かせます。 公式で紹介しているnginx.confの書き方でも同じです。 これwordpressに使いたかったけど、初心者の俺には敷居が高すぎるなぁ。 スレチ的で申し訳ないですが、教えてください。 http://sample.com:8065 → これで問題なく使える。 https://sample.com:8065 → ERR_SSL_PROTOCOL_ERROR proxy_passで sample.comから8065ポートへリダイレクト → リダイレクトループ 同じくhttps://sample.com:8065 へリダイレクト → ERR_SSL_PROTOCOL_ERROR この際、8065ポートへの自動リダイレクトは諦めても、 https接続できるようにしたいです。 証明書をmattermostへ継続させるには、 どのようにnginx.confを書けば良いのでしょうか? >>343 redirectとproxyがごっちゃになってる httpからhttpsにリダイレクトさせるのはnginx側で行うべきことなのでproxy_pass無関係 301とリダイレクト先URLをブラウザに返して、ブラウザ側でページを読み直させる server { listen 80; server_name example.com; return 301 https://$host$request_uri ; } リバースプロクシしようとしてリダイレクトループになってる件はその情報だけじゃ分からん 原因がわかりました。 https://sample.com:8065 の時のエラーは、 証明書の権限のようです。 rootユーザーにすると通るようです。 >>344 ありがとうございます。 location / { proxy_pass https://localhost:8065 ; } これはsample.comにアクセスしたとき、 8065ポートでアクセスするという意味ですよね? https://sample.com とうったとき、 繰り返しリダイレクトエラーになってしまいます。 この繰り返しエラーを防ぐにはどうしたらよいですか? ※https://sample.com:8065 入力はOKになりました。 >>345 君はなんでその部分だけに問題があると思ったの? >>346 proxy_set_headerをどう変えても、 全く変化がありませんでした。 confファイルではなくnginx自体の設定とかだったりするんでしょうか? httpsアクセスではリダイレクトエラーですが、 すべてをhttpだと空ファイルのダウンロードになるようです。 基本的な質問。 server { listen xx.xx.xx.xx:443 ssl http2; server_name hoge.com; } これが同じ.confだったり、 インクルードした別confファイルに複数書いてあった場合、 それぞれ追記している状態になるのでしょうか? 被っていたらそれは後のが上書き? それとも最後のserverだけが有効になるとかでしょうか? read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる