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/ 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 〜>ディレクティブの終わりです <Directory "/">はフルパスの指定ですね
/home/usser/なんちゃらとか
ルート以外も設定できるでしょ、それのデフォルト UserDirとかVhostAliasとかその辺で動的にディレクトリを参照されたときに誤爆を防ぐw >>231
おお!おまじないみたいに最初に書いておけばいいな。 apacheではchmodの代わりに、Directory使うってイメージでOKですか
Directoryって物理パスと1対1になってるんでしょ?
だから、DocumentRootよりも上のディレクトリにも設定できる nphスクリプトをnph-始まりじゃない任意ファイル名で実現したかったらどうすれば出来ますか?
リバースプロキシ以外で何か方法があれば… ちょっと見てみたけど
Apacheのソース
modules/generators/mod_cgi.c
に埋め込んであるから、これいじるしか無いんじゃ? ApacheのSSIの質問はここでいいのかな
<!--#include virtual="foo/bar.html" -->のディレクティブを記入したんだけど
どうもan error occurred while processing this directiveがでちゃうみたいで・・・
ttp://www.tohoho-web.com/lng/199911/99110261.htm
ここと症状的には一緒なんだけど、解決策といった解決策がヒットしなくてこまってます
助け舟をお願いしたいです すみません。自己解決しました。
.htaccessで全アクセス拒否にしてました。。。
でもこれを消したら、インクルードファイルが直にアクセスされて困るような気もします foo/bar.html?fooで読んで、?fooが無いと中身が出ないようにするとかw 直にアクセスされて困るのにincludeだと問題ないなら
virtualじゃなくてfileにしたら fileだと上のディレクトリを読めないとかいう事情があるらしく
そういうのは面倒臭いのであくまでもvirtualでやりました
とりあえずこの問題も解決出来ました
ドキュメントルートにRewriteRuleとかを書いた.htaccessを置くと直アクだけ弾けるようです サーバー構成とか容量諸々の都合により、 Webサーバーとファイルサーバーを分けたのだけど、
ローカルにコンテンツがあった頃に比べて反応が鈍くなった気がする。
そこで mod_cache / mod_mem_cache / mod_disk_cache を使って頻繁にアクセスされる
静的ファイルをキャッシュさせてみようとした・・・のだけど、
このモジュールが Apache のかなり入り口の方で呼ばれるらしく、Deny Allow ディレクティブなどが
効かないし環境変数などを使った制御も効かない(とドキュメントに書いてある)。
これを解決するにはアクセス制御用の前段apache, コンテンツサーバー用の後段apacheの2段に
するしかない?
まぁ どっちか nginx でもいいんだけど。
ファイルを直接アクセスせずにKVSで擬似キャッシュみたいなのは余計重くなりそうだし。 domain.comとwww.domain.comの両方でwebサイトを見れるようにしています。
サブドメインなしの https://domain.com/〜 でアクセスしてきた場合に
「www」付きの https://www.domain.com/〜 にリダイレクトされるように
設定したいと思ってます。
サブドメインなしでアクセスできるwebコンテンツすべて(https://domain.com/~userも含む)に
反映されるように、
/etc/apache2/mods-available/ssl.confや
/etc/apache2/sites-available/default-ssl.confに
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(domain\.com)(:443)?
RewriteRule (.*) https://www.domain.com$1 [R=301]
</IfModule>
を追記して、Apacheを再起動したりしてますが、全く反映されません。
どのようにすれば反映されるのでしょうか?
なお、httpsではなく通常のhttpでの http://domain.com/〜 → http://www.domain.com/〜
については/etc/apache2/sites-available/000-default.confや
/etc/apache2/mods-available/userdir.confに上記を追加することで反映されています。
使用環境
Apacheバージョン:2.4.7
OS:Ubuntu 14.04.1 LTS
カーネル:Linux 2.6.32-042stab093.5 #1 SMP rewriteで思った動作とならないときは、ログ取るのが定番。
わかりやすいとはいえないログだけど、なんとなくどう処理してるのか分かると思う。 >>247
回答ありがとうございます。rewriteのログ取れるの初めて知りました。
結局、rewriteを使わずRedirectを使って解決しました。 へー
ttp://gigazine.net/news/20150219-http-2-major-update/ Apache2.6/3.0 は組み込み済みになる予定だって。
それ以前のはmodで対応かな 出先からスマホで会員限定サイトを見たいのですが、IP制限がかかっています。
【例】
アクセスするアドレス: http://(自宅のIP)/s01/hogehoge/1.avi
実際に見たいアドレス: http://s01.example.com/hogehoge/1.avi
そこで
ProxyPass /s01 http://s01.example.com
ProxyPassReserve /s01 http://s01.example.com
(実際にはs01〜s12まであります)
としたのですがうまくいきませんでした。
診断くんを同じ方法で見てみると「HTTP_X_FORWARDED_FOR」にスマホのIPが表示されていました。
どうすればこれらのヘッダーを消すことができるのでしょうか? mod_headersでヘッダーの書き換え、削除ができたと思うが apache2.confに
Header unset HTTP_X_FORWARDED_FOR
と記述したんですがダメでした。
もちろん、a2enmodでheaderを有効にしています。 > うまくいきませんでした。
具体的な症状くらい書けって話