Apache統合スレ 12 (HTTPServer以外も含む)
HTTP ServerだけでなくAntやTomcatなどApache全般に関するスレだ! ■公式 Apache Software Foundation http://www.apache.org/ ■HTTP Serverの最新Version Apache/2.4.4 Apache/2.2.24 Apache/2.0.64 ■前スレ Apache統合スレ 11 (HTTPServer以外も含む) http://engawa.2ch.net/test/read.cgi/mysv/1286137109/ apache tomcat連携させて javaアプリケーション作ってるひといまうsか こちらのスレで良いのかわからないのですが PHPへのアクセス時に拡張子なしでもアクセスできるように RewriteEngine On RewriteCond %{REQUEST_URI} !\. RewriteRule ^(.*)$ $1.php [L] と設定しました。 うまくいったのですがexample.com/index.phpなどのアドレスにexample.com/でアクセスしようとすると403エラーとなってしまいます。 DirectoryIndex index.php としても特に変化はありませんでした。 あまりサーバーには詳しくないのですが、何かおかしな設定をしているようでしたらアドバイスいただけないでしょうか。 >>131 OSがLinuxだとしたらselinuxとかiptablesとかも 調べてね。 >>131 試してないけど、ファイル名なしをindex.phpとするよう ルールを追記する必要あるんじゃないかな。 mod_writeの指定をしてる場合、DirectoryIndexが効かない(優先されない?)のは俺も記憶にある 404 じゃなくて 403 になる理由はよくわからんが %{REQUEST_URI} に / が入ってくるので RewriteRule で /.php に書き換えられる /index.php を見に行くわけがない 質問させてください。 直接apacheとは関係無いかもしれませんが、質問先が不明確なのでこちらへ書き込みさせて頂きました。 apacheのmod_rewriteを使いファイルのダウンロードURLを書き換えてDLを行わせようとしています。 例: http://hoge.com/download/file.zip ↓ http://hoge.com/d/file.zip mod_rewriteの書き換えは問題なく行えるのですが、実際の「d」ディレクトリがmnt先にあり、アクセスに失敗します。 他のファイルやディレクトリもmnt先にあり、ブラウザから直接、各ファイルのあるディレクトリを指定してブラウザからアクセスすると表示やダウンロードは行える状態となっています。 Aliasの設定は下記のように行っております。 例:Alias /contents/ "/mnt/samba/c/" Alias /download/ "/mnt/samba/d/" etc... 因みにmod_rewriteのデバッグは下記設定で行っており、rewrite自体が間違っているわけではないようです。 RewriteLog /tmp/rewrite.log RewriteLogLevel 9 実際のlog内容とは違い、hoge以降無いようは変更しておりますが、下記のようなログとなっております。 (2) init rewrite engine with requested uri hoge・・・ (3) applying pattern '/hoge/'・・・ (2) rewrite '/hoge' -> '・・・' (2) local path result: /hoge/d/file.zip (2) prefixed with document_root to /var/www/hoge/d/file.zip (1) go-ahead with /var/www/hoge/d/file.zip [OK] ここまでは調べられたのですが、どのように解決させればよいかわからずにいます。 どうかアドバイス頂けませんでしょうか。 よろしくお願いいたします。 Apache2.2+PHP5.2をApache2.4+PHP5.5に更新したら劇遅になりました。 設定に関しては基本的に同じになっています。 同じ様なことになった方はいませんか? PHP使ってないページでも遅いです。 ggr://blog.wnotes.net/blog/article/apache-event-mpm http://www.example.com/ をルートとして 存在しないページのアクセス要求(仮に http://www.example.com/news001.html とします)で アドレスバーで ・http://www.example.com/404.html を返す ・アドレスは http://www.example.com/news001.html のまま、リターンされるコンテンツが404.htmlの内容になる 上の場合はわかるんですが、下の例で何が違うんでしょうか 鯖建てられないヘタレですが教えてください >140です 上は存在しないページへのアクセスをリダイレクト?とかで404ページに飛ばしているのかなぁ 下は、リターンする内容を404ページのそれに入れ替えているのかなぁ なんて妄想しました よかったらだれかホントのところを教えてくだしあ だいたい合ってる 前者は RewriteRule か Redirect か RedirectMatch でリダイレクト。 後者は ErrorDocument でエラーページを指定。 けど大事なのは見た目のURL とか 404.html の内容ではなく HTTP ステータス。 世の中 「404 ファイルが見つかりません。」 と書かれたページを HTTP/1.1 200 OK で返してくる サイトの多いこと多いこと。 リダイレクト方式は HTTP/1.1 200 OK が返る。 ErrorDocument 方式は HTTP/1.1 404 Not Found が返る。 ので後者を使うのが正解。 >>142 あのー、どちらもErrorDocumentで、ErrorDocumentにURLを指定しているからリダイレクトになる訳ですがw まあ、無駄にプログラムを使いたくないならば、 無駄に読み込んだままになっているmod_asisでも使って ステータスコードを変えろということだなw まあmod_rewriteでも存在するかどうか判定できるけどね。 >140です ご指摘ありがとうございます なるほど、イロイロできるぶん、対処を優先するのかエラーなどしきたりを重んじるのかなど 視点の違いで設定が違うと。 実際の鯖を運用するわけではないにせよ、挙動を理解しておかないとやっぱダメですよね。 LAN内限定localhost鯖をたててあれこれ弄ってみようかと思いますが 深みにはまりそう。外向けには公開するコンテンツがないのであくまでも内向けで。 ヘッダーでbootstrapのような固定ナビ コンテンツにautoindexでディレクトリ内容一覧みたいな だれかテンプレート作ってくれよ Apacheのリバースプロキシについてご教授ください。 まず、サーバは下記3サーバになります。 ・WEBサーバ1:frontsrv.com ・WEBサーバ2:backsrv1.com ・WEBサーバ3:backsrv2.com この3サーバのうち、下記のようなURLでアクセスしたい場合の設定方法を教えて頂けませんでしょうか。 ・http://frontsrv.com/ → WEBサーバ1のローカルファイルを表示 ・http://frontsrv.com/back1/ → WEBサーバ2のローカルファイルを表示 ・http://frontsrv.com/back2/ → WEBサーバ3のローカルファイルを表示 また、back1/、back2/でそれぞれWEBサーバ2、WEBサーバ3にアクセスした場合に、 そのサーバのローカルに存在しているCGIも実行したいと思います。 ※例1:http://frontsrv.com/cgi-bin/test1.cgi → WEBサーバ1のtest1.cgiを実行して表示 ※例2:http://frontsrv.com/back1/cgi-bin/test2.cgi → WEBサーバ2のtest2.cgiを実行して表示 よろしくお願いいたします。 質問や説明のために実在するかもしれないドメインを使ってはいけません。 example.com などを使いましょう。→ http://ja.wikipedia.org/wiki/Example.com Webサーバ1:frontsrv.example.com Webサーバ2:backsrv1.example.com Webサーバ3:backsrv2.example.com LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so ProxyPass /back1/ http://backsrv1.example.com/ ProxyPassReverse /back1/ http://backsrv1.example.com/ ProxyPass /back2/ http://backsrv2.example.com/ ProxyPassReverse /back2/ http://backsrv2.example.com/ バックエンドサーバーのCGIが生ホスト名のクッキーを吐くならさらに ProxyPassReverseCookieDomain backsrv1.example.com frontsrv.example.com ProxyPassReverseCookieDomain backsrv2.example.com frontsrv.example.com リバースプロキシで ProxyRequests On を指定してはいけません。ダメ、絶対。 2.4.9誰かzipでもっていない? oaoslあっとやほお apache.orgで httpd-2.4.9.tar.gz と httpd-2.4.9.tar.bz2 のいずれも配布してるが?よく探せよ 他人経由でいいならLi/so/169610 めあど5 知人からの依頼でファイル名部分に日本語を含むURLを使いたいのですが、404エラーになり悩んでいます。 ex. http://www.example.com/ テスト.pdf さくらインターネットサーバ(vps)やローカル環境(xampp)にpdfを設置した場合は問題なく表示されます。 (ファイル名部分をurlencodeしてもしなくてもアクセスできます。) しかし、Xserver環境で404エラーになってしまいます。 Xserverのapacheログを見ますと、ファイル名部分が通常のエンコードと異なり、「%」になる部分が「\x」に変換されています。 こちらが原因のような気がしているのですが、どう対処したら良いか分からず、悩んでいます。 どなたか、情報をお持ちでしたら教えて頂けますと嬉しいです。 Xsererのapacheログ: \xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88.pdf 通常のエンコードだと↓のようになると思うのですが %E3%83%86%E3%82%B9%E3%83%88.pdf \x は生でその値なんだろう、エンコードされてない Xserver環境、がよくわかんないけど 通常のWebブラウザ使ってるなら、漢字をエンコードしてるのはブラウザだよ。 >>156 >>157 ありがとうございます。 php側でurlエンコードして、そのアドレスからアクセスしているのですが Xserverだけログを見るとなぜかurlエンコードされておらず素の値になっています。 (さくらインターネットのapacheログにはちゃんとエンコードされた値が入っています。) 下記のサイトでapacheの癖?というものを見つけて少し気になってもいます。 http://colo-ri.jp/develop/2012/08/apache-mod_rewrite-japanese.html さくら環境で動くということは、サーバ側の問題なのかと思っているのですが、手詰まりでして悩んでいます。 (そもそも日本語を使うな!と言いたいのですが。) accesslogとerrorlogでどうなってる? もともと\x で問題ないはずだけど、サーバ側のファイル名の文字コードが違うだけでないの? あーそれ、昔なったわ。 どうやって解決したか忘れたけど、直したな >> 159 ありがとうございます。 access_logとerror_logは以下のようになっています。 (IP等、一部伏字にしました。) access_logとerror_logでファイル名部分がなぜか変っています。(%→\x) access_log: 113.xxx.xxx.xxx - - [26/Aug/2014:17:07:13 +0900] "GET /schedule/upload/%E3%83%86%E3%82%B9%E3%83%88.pdf HTTP/1.1" 404 2275 "http://www.example.com/schedule/detail.php?id=20" ; "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" error_log: [Tue Aug 26 17:07:13 2014] [error] [client 113.xxx.xxx.xxx] File does not exist: /home/xxx/xxx.jp/public_html/schedule/upload/\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88.pdf, referer: http://www.example.com/schedule/detail.php?id=20 その /home/xxx/xxx.jp/public_html/schedule/upload/テスト.pdf は存在するの? ファイル名はUTF-8で保存されているの? はい、 /home/xxx/xxx.jp/public_html/schedule/upload/テスト.pdf は存在しています。 試しにFTPクライアントでディレクトリを開いて、英語名「test.pdf」にすると表示されるのですが、 日本語に戻すと表示できなくなります。 念のため、UTF-8Nでテキストファイルを作って同じようにやってみたのですが やはり日本語名だと表示が出来ないような状態です。 もしもファイル名がUTF-8なら、 /home/xxx/xxx.jp/public_html/schedule/upload/\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88.pdf と /home/xxx/xxx.jp/public_html/schedule/upload/テスト.pdf は 同じものを指してるはずだよ。 コンソールで ls で ちゃんと表示されてる環境で locale コマンドで見ても ja_JP.UTF-8とかって出る? SSHでつないでlocaleコマンドを打ってみました。 一応、ja_JP.UTF-8 など設定されているようです。 LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL= 1点気になったのは、ls -la コマンドでファイル一覧を表示させたときに 日本語ファイルはファイル名が文字化けしています、これは関係ないのかな。 関係あるでしょ ftp使ったのかsambaなのかわからんけど そのファイルを転送したツールの文字コード設定が間違ってるか 無変換で転送してるよ、たぶん >>167 ありがとうございます。 試しに、文字化けしている日本語ファイルをサーバ上でリネームして、 lsコマンドで正常に表示されるのを確認した後、 該当URLにアクセスすると無事に表示されました。 Apacheの設定ではなかったようで、大変失礼しました。 サーバやFTP系の文字コード周辺をもう一度見直してみます。 コメント頂いた方々、ありがとうございました。 win server2008 apache2.2系 basic認証を使用するために.htpasswdファイルを作成しました。 >htpasswd.exe -m .htpasswd user1 作成された.htpasswdファイルにコメントを追加したいのですが、 設定ファイルの文法が記載されたサイトはありませんか? 他の設定ファイルと同様に先頭#で良さそうなのですが確証がありません。 書式なんて無いと思う 1行に ユーザid : ハッシュ値 が決められてるだけ コロンがなけりゃ有効にならないから:入れなきゃいいだけじゃないかな と、ちょっと試したけど #のユーザーはツールでも作れるけど httpdのソース見たら 1文字目 # はスキップしてるわ 1) ググる .htpasswd コメント - Google 検索 ttp://www.google.co.jp/search?q=.htpasswd+%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88 2) 最初に出てきたページで答えを発見 .htpasswd生成 ベーシック認証のパスワードファイル作成 ttp://ao-system.net/htpasswd/ まとめ:脳味噌は生きているうちに使うものだとおもう >>172 申し訳ないのですがhtaccessファイル内の話はしていません。 >>170-171 確認ありがとうございます。 こちらでもソースコードをダウンロードしてみたのですが、 mod_authn_file.c#check_password()内部の処理でしょうか? >>173 そうだね、空行と行頭#をスキップしてる。 それ以外の部分はすべて#を特別扱いしてないけどね。 特別扱いしてない、と書いたのは、 htpasswd で #つきユーザー作成と ブラウザで認証やってみた結果 ユーザーは作成できたけどhttpdエラーログにはユーザーnot found が残ってた。 >>174 ありがとうございました。 確証が取れたので安心して追加できます。 お世話になりましたm(_ _)m >>175 リロードできてなかった… 動作確認もありがとうございます。 こちらでも同様の結果になりました。 おっと、それはデフォルトで無効なユーザを作るためにスルーされていることで、バグではないからなw >>178 その情報どこに書いてるの? apache公式のhtpasswdのページには単純に255文字以内でコロンは使えないよとしか書いてない 先頭#もダメと書いてないのはどうなんだろうと思わなくもないがUNIXの世界じゃ常識みたいなもんだからなあ >>174 ap_cfg_getline()の中で取得した行の前後のスペースをtrimしてる その行で最初に出てきた空白以外の文字が#なら無視される 空白の連続+改行も無視な 質問です リバースプロキシの設定をしたいと思っています。 公開サーバ< グローバルIP> と、コンテンツ<ローカルIP>があります。 http:// ローカルIP/hoge/ にはローカルからアクセスできます。 http:// グローバルIP/hoge/ でローカルへアクセスしたいのです。 グローバルIPのpxroxyは Server version: Apache/2.4.10 (FreeBSD) を利用します。 httpd.confの以下の行が有効な状態で <IfModule proxy_html_module> Include etc/apache24/extra/proxy-html.conf </IfModule> proxy-html.confには LoadFile /usr/lib/libxml2.so LoadModule proxy_html_module modules/mod_proxy_html.so LoadModule xml2enc_module modules/mod_xml2enc.so ProxyPass /hoge http:// ローカルIP/hoge ProxyPassReverse /hoge http:// ローカルIP/hoge などと記載しています http:// グローバルIP/hoge/ にアクセスしても404になるんですが、 なにか設定が不足していますでしょうか。 グローバルIPのApacheに404のログが出ています。 ローカルIPの方にはアクセスの形跡はありません。 そのグローバルの受け口からローカルにはもちろんその設定のURLで アクセスできるんだよね? あーそれと <IfModule proxy_html_module> でインクルードしてるのに、そのインクルードしたファイルにLoadModuleがあるのはどうなんだ? IfModuleがfalseになってないか? もしそうなら404のログで物理的な場所も出てるはずだから proxy効いてないってわかるよなあ、、、どうなんだろ Apacheを学ぶにあたってオライリーを買おうかと思いますが Apacheハンドブック Apacheクックブック のどちらを買えばよいですか またそれぞれはどのような違いがありますか win8.1でapache loungeの2.4.10を使ってますが、 shiftjisのhtmlが文字化けしてしまいます。 どうすれば直るのか教えてほしいです。 PCのlocal環境にて、 firefoxで見ると text/html; charset=UTF-8 が返ってきてるようです。 元々confファイルにAddDefaultCharsetの記述は特になし 記述なし=AddDefaultCharset Off設定だとは思いますが、 ・httpd.confにAddDefaultCharset Off を追加⇒変化なし ・extra/httpd-languages.conf にAddDefaultCharset Off 追加⇒変化なし どこかでUTF-8決め打ちで設定してるような項目があるのでしょうか? ちなみに、loungeの2.2.29を使ったらsjis文字化けなしでした。 ただphpのdllが2.4用になってるのでできればApacheも2.4系を使いたいです。 書いた直後にMonitorみてて気づきました。 httpd.confからphpの設定を抜いたら文字化けがなくなりました。 php.ini側の問題みたいです。 静的ページであろうとphp設定が影響してくるんですね。。。 >>189 勧めないけど、性格がちがうから両方必要だろう Apache初心者が勉強するのにおすすめの本あったらおしえてちょ AH-64の話だったら、どうしても情報は少ないね。 まあ、最近訓練用ソフトの一部が盗聴されたって話もあるし、 一般に公開されるのも時間の問題かも。 おいおいCentOS 7に付いてくるのって2.4じゃねーか。 俺もついに2.2から移行しなきゃいけない時が来たか…。('A`)マンドクセ 403エラーが回避できない・・・ http://ip アドレス/ http://ip アドレス/サブディレクトリ ともに403がでます・・ サブディレクトリをvhostでservernameを設定して、ローカルのhostsファイルを編集すると http://servername/ でアクセスすると見れるんだけど。 403 はエラーログみりゃ実際にどこをアクセスしようとしてるかわかるだろ それアドレス間違ってない? 別のサーバ(同じサーバの別httpd含む)が返してる 恐らく同じサーバーなんだけど、 別httpdがあるのかな・・困った。。 まずやることはエラーログの特定かな わざとエラー出して更新されたファイルを探すとか psコマンドでよけいなhttpdが無いか探して 動いてるhttpd で -V オプションとか とにかくこれが解決してもログがわからないんじゃ運用に困ると思うので。 設定してなかったりレベルを下げてあったりすると見つからないけどなw logwatchで xxx.xxx.xxx.xx -> mx3.mail2000.com.tw:25: 1 Time(s) というログを見つけたので /var/log/httpd/access_logで確認したところ CONNECTに成功してて404を返してました 調べたら200か405が返ってれば大丈夫ということが わかったのですが404を返す場合対策はどうしたらいいでしょうか? ぽしえろください nginxをリバースプロキシで、Apacheと共存してるときのバーチャルホストの設定なんですけど httpd.conf [ Listen 8080 #既存 Listen 8082 #追加 NameVirtualHost *:8080 NameVirtualHost *:8082 <VirtualHost *:8080> ServerName hoge.com DocumentRoot /var/www </VirtualHost> <VirtualHost *:8082> ServerName hogehoge.com DocumentRoot /var/www/virtual </VirtualHost> ] と書いて nginx.conf [ server { listen 80; server_name hoge.com; root /var/www; client_max_body_size 50G; location / { proxy_pass http://127.0.0.1:8080 ; } } server { listen 80; server_name hogehoge.com; root /var/www/virtual; client_max_body_size 50G; location / { proxy_pass http://127.0.0.1:8082 ; } } Proxy_passらへんの記述省略 ] 既存のやつはアクセス出来るのですが、追加した方 hogehoge.com が繋がりません。 iptables は無効にしてあります 海外のサイト、日本のサイトも結構参考にして2日経ちましたが進捗皆無です^ー すいません 遠い昔に書いたhostsがローカルに向けてありました.... 出来ました。 スレ汚ごめんなさい 解決できたのはいいが、実在する(あるいはその可能性のある)ドメインを例示に使うのはやめれ example.com(.net, .org)という例示用に予約されたものを使いなさい apacheのアクセスログに出力されるレスポンスタイムについて質問なのですが、 レスポンスタイムにはレスポンスが相手に届くまでの時間も含まれていますでしょうか? レスポンスタイムを見るときにネットワークのレイテンシが関係あるのか気になって質問しました。 >>214 ググったんですが今一つよく分からず。。 >>216 IT用語辞典のサイトにターンアラウンドタイムは処理要求を送ってから結果の出力が終了するまで、レスポンスタイムは結果の出力が始まるまでと書いてあったので、 レスポンスタイムは結果の最初のパケットが届いたという応答がapacheに返ってくるまでの時間ということでしょうか。 >>217 時系列に事象を書いて、それのどこからどこまでか示してみ? >>218 BからIまででしょうか。217には最初のパケットが届いたという応答がapacheに返ってくるまでと書きましたが、 apacheがパケットに分割する処理まで制御してないと思ったのでIまでかと。 @ クライアントが処理を開始する A クライアントから要求が届く B apacheが処理を開始する C apacheがレスポンスを作成し終わる D apacheが応答を開始する E 最初のパケットがクライアントに届く F 最初のパケットが届いたという応答がクライアントから届く G 最後のパケットがクライアントに届く H 最後のパケットが届いたという応答がクライアントから届く I apacheが処理を終了する >>219 ようやく話が見えてきた。 リクエスト発行側からみた ターンアラウンドタイムってのは @ 〜 G レスポンスタイムってのはA 〜 D になる。 で、話の元にあったApacheのログの話なら 「リクエストを処理するのにかかった時間」だから B 〜 C >>220 なるほど、apacheが処理している時間なのですね。ありがとうございます。 うーん、やっぱりapacheのログの%Dにはクライアントにレスポンスが届くまでの時間も含まれているような気がしますね。 https://twitter.com/fujiwara/status/217269924727492608 @〜DとIがアプリケーション層の話なのに E〜Hがトランスポート/セッション層っぽい話になってるからおかしくなってる パケットがクライアントに届くとかそれの応答とかってのはTCP/IPが勝手にやる話 Apacheは send() で送信バッファにデーター渡したら終わり >>223 送信バッファより大きなデータやったらどうなるん? <Directory />と<Directory "/var/www/html">は何が違うんですか? /var/www/htmlがドキュメントルートなので、これに漏れる設定って無いようなきがするんです <Directory /> は <Directory 〜>ディレクティブの終わりです read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる