[Apache]WARNING: Attempt to change ServerLimit ignored during restart

Posted under ソフトウェア by uechoco on 水曜日 8 9月 2010 at 23 : 06 : 02

Apahce httpdで、ServerLimitなどの値を変更した後に「WARNING: Attempt to change ServerLimit ignored during restart」という警告がerror_logに出ました。文字通り、gracefulやrestartコマンドではServerLimitの値の変更は適用されず、無視されてしまうようです

httpd/apachectlコマンドで、stopし、startすれば警告は消えます。


[python]mod_pythonのpublisherとpspを使う

Posted under python by uechoco on 月曜日 9 8月 2010 at 23 : 17 : 03

前回はPythonHandlerをファイル指定で使っていましたが、mod_pythonには汎用的なPythonHandlerの指定方法もあるようです。mod_python.publisherというものらしい。publisherを使うと、URLを解析して以下のようにエントリポイントが変わった(私の環境の場合)。

  • http://test.localpy/ ... 403 Forbidden
  • http://test.localpy/index ... 404 Not Found
  • http://test.localpy/index/ ... 404 Not Found
  • http://test.localpy/index.py ... /document-root/index.py内のdef index(req):関数が実行された
  • http://test.localpy/index.py/ ... /document-root/index.py内のdef index(req):関数が実行された
  • http://test.localpy/index.py/index ... /document-root/index.py内のdef index(req):関数が実行された
  • http://test.localpy/index.py/hello ... /document-root/index.py内のdef hello(req):関数が実行された
  • http://test.localpy/index/hello ... 404 Not Found
  • http://test.localpy/other.py ... /document-root/other.py内のdef index(req):関数が実行された
  • http://test.localpy/other.py/index ... /document-root/other.py内のdef index(req):関数が実行された
  • http://test.localpy/other.py/world ... /document-root/other.py内のdef world(req):関数が実行された
  • http://test.localpy/dir/another.py ... /document-root/dir/another.py内のdef index(req):関数が実行された
  • http://test.localpy/dir/another.py/index ... /document-root/dir/another.py内のdef index(req):関数が実行された
  • http://test.localpy/dir/another.py/asdf ... /document-root/dir/another.py内のdef asdf(req):関数が実行された

参考になるリンクを示しておきます。

お次はPSP。Play Station Portable という意味ではありません(Python for PSPというものが確かにあるらしいですが)。PSPはPython Server Pagesの略です。JSPとかASPの真似っ子ですね。ようはphpみたいにHTML内にPythonが書ける仕組みをmod_pythonが提供しています。このPSPという仕組みは、私がグーグルでいろいろ調べている感じだとあんまり流行ってなさそうな雰囲気です。じゃぁみんなPythonのWebは動やっているんだろう。。。PSPは、mod_wsgiとかではたぶん提供していないと思います。

PSPのサンプルコードとして、Python Server Pages! 略してPSP - Fioの素敵な日々という記事を参考にしました。コードをそのまま拝借して(charsetくらいはUTF-8にして)test.pspを作り、そのまま、http://test.localpy/test.psp?name=uechocoにアクセスすると、以下のようなHTML表示がされます。

これならphpっぽくWebが作れそうですね。といってもmod_pythonに依存しすぎていますが。

ちなみに、今回使ったhttpd.confのVirtualHostは以下のものです。

TEXT:
  1. <VirtualHost *:80>
  2.     ServerName test.localpy
  3.     DocumentRoot "/Users/dev/py_works/test.localpy"
  4.     <Directory "/Users/dev/py_works/test.localpy">
  5.         Allow from all
  6.         AddHandler mod_python .py .psp
  7.         PythonHandler mod_python.publisher | .py
  8.         PythonHandler mod_python.psp | .psp
  9.         PythonDebug On
  10.     </Directory>
  11.     ErrorLog "logs/test.localpy-error_log"
  12.     CustomLog "logs/test.localpy-access_log" common
  13. </VirtualHost>


[python]MacPortsで入れたpython25をApacheで動かすには?

Posted under python by uechoco on 月曜日 9 8月 2010 at 12 : 11 : 06

最近Pythonを始めたのは皆さんご存知かと思いますが、PythonはWebに特化していないのが厄介ですね。phpはWebに特化していてCLIも出来るというイメージですが、Pythonは軽量でなんでもできる言語なのでWebも出来るというのが現時点での私のイメージです。

Webサーバのデーモンと言ったらやっぱりApacheが多いかと思いますが、PythonをApacheで動かすにはどうしたらいいんでしょうか。『入門Trac』に書いてあったのとかを参考に思いつくものを並べてみました。

  • mod_python ... 古くからあり、おそらく資料も豊富なはず。ただし、開発プロジェクトは公式に終了宣言されているらしい
  • mod_fastcgi/mod_fcgi ... FastCGI系。FastCGI自体の理解はあまりないのだが、CGIで動かしている+αと考えれば、CGIに分類されるはず。
  • mod_wsgi ... WSGIというインタフェースに対応したモジュール。mod_pythonの代わりとして徐々に定着しつつある?mod_pythonやmod_fastcgiなどよりは多少速いとか。

他にも、Apacheで動かさないという選択肢もあるようです。フレームワーク自体にサーバ機能が含まれているWeb2pyとかがそうなのかな。Nginxとかはわからないので、別の機会に。

さてさて私のPythonはGAE開発環境を意識して、SnowLeopardにMacPortsで入れたpython25です。ApacheもMacPortsで入れたapache2です。python_selectでSnowLeopard標準のpython26-appleからpython25に切り替えています。

できればMacPortsでモジュールを入れたいです。個人的にはFastCGIは馴染みがないのでmod_wsgiか、mod_pythonに的を絞ります。MacPortsでmod_wsgiをsearchすると、どうやらpython26(標準のともpython25とも違うMacPortsオリジナルのPython 2.6)に依存してしまっているので、python25では使えなさそうです(ソースコード インストールとかはわかりません)。mod_pythonをsearchすると、mod_python25やmod_python26などがあり、mod_python25であれば私がインストールしたpython25に依存しているようです。

早速「sudo port install mod_python25」でインストールし、

TEXT:
  1. ########################################################
  2. # to enable mod_python add
  3. #  LoadModule python_module modules/mod_python.so
  4. # to your apache2 config file:
  5. #  /opt/local/apache2/conf/httpd.conf
  6. ########################################################

というメッセージが表示されるので、LoadModule宣言を指定のhttpd.confに書き込み、Apacheをgracefulします。

続いて、3.3 mod_python は一体何をやっているのかを参考に、VirtualHostの設定やリクエストハンドラを設定しておきます。私の場合は以下のような感じにしています。もちろんtest.localpyというのは架空のドメインですので、/etc/hostsにも登録してあります。

TEXT:
  1. <VirtualHost *:80>
  2.     ServerName test.localpy
  3.     DocumentRoot "/Users/dev/py_works/test.localpy"
  4.     <Directory "/Users/dev/py_works/test.localpy">
  5.         Allow from all
  6.         AddHandler mod_python .py
  7.         PythonHandler mptest
  8.         PythonDebug On
  9.         DirectoryIndex mptest.py
  10.     </Directory>
  11.     ErrorLog "logs/test.localpy-error_log"
  12.     CustomLog "logs/test.localpy-access_log" common
  13. </VirtualHost>

あとは、上記DocumentRootにmptest.pyというファイルを作成し、以下のプログラムを記載します。

PYTHON:
  1. from mod_python import apache
  2.  
  3. def handler(req):
  4.     req.content_type = "text/plain"
  5.     req.write("Hello Apache mod_python!")
  6.     return apache.OK

あとは指定のURL(私の場合はhttp://test.localpy/)にアクセスすればOKです。DirectoryIndexが効かない場合は、http://test.localpy/aaa.pyみたいに適当なファイル名をつけてみてください。適当なファイル名でもいい理由は3.3 mod_python は一体何をやっているのかに書いてあります。

とりあえず、Webで動いたー!でもちょっとやりづらいのはphpでMVCフレームワークとかに慣れ過ぎなせいですかね。


[Linux]ApacheがPermission deniedを吐いてくる

Posted under Linux by uechoco on 火曜日 1 1月 2008 at 03 : 46 : 16

 VirtualBoxでFedora 7をせこせこがんばっている最中です。sshやsftpなんかも問題なく繋がって、あとはApacheの設定を終わらせればLinuxのWeb開発環境が完成するというところまで来ていますが、VirtualHostを設定すると、wgetできなくなるという現象が発生しました。

 エラーログはこんな感じです。

[Mon Dec 31 14:30:13 2007] [error] [client 127.0.0.1] (13)Permission denied: access to /index.html denied [Mon Dec 31 14:31:10 2007] [error] [client 127.0.0.1] (13)Permission denied: access to /index.html denied [Mon Dec 31 14:35:01 2007] [error] [client 127.0.0.1] (13)Permission denied: access to /index.html denied [Mon Dec 31 14:36:01 2007] [error] [client 127.0.0.1] (13)Permission denied: access to /index.html denied [Mon Dec 31 14:38:02 2007] [error] [client 127.0.0.1] (13)Permission denied: access to /index.html denied [Mon Dec 31 14:52:10 2007] [error] [client 127.0.0.1] (13)Permission denied: access to / denied [Mon Dec 31 14:54:00 2007] [error] [client 127.0.0.1] (13)Permission denied: access to / denied [Mon Dec 31 14:54:55 2007] [error] [client 127.0.0.1] (13)Permission denied: access to /index.html denied [Mon Dec 31 14:59:57 2007] [error] [client 127.0.0.1] (13)Permission denied: access to / denied [Mon Dec 31 15:00:18 2007] [error] [client 127.0.0.1] (13)Permission denied: access to / denied

 /var/www/htmlが初期設定ののDocumentRootです。症状としては

  • /var/www/htmlをDocumentRootに設定したVirtualHostはOK
  • /var/www以下に作ったディレクトリをDocumentRootに設定したVirtualHostはOK
  • /var/www2/htmlとか/home/hoge/htmlとかいろんなところに新しく作ったディレクトリをDocumentRootに設定したVirtualHostはNG

な感じです。AA-Camp #6に参加しているakkyさん、studio15さん、shinさんにアドバイスをもらいながらもなかなか原因がわからなかったのですが、もしかしてSELinuxじゃない?っていうアドバイスももらったので

echo 0 > /selinux/enforce

というコマンドでSELinuxをとりあえず切ってみたら、さっきまでNGだった場所をDocumentRootに設定したVirtualHostもしっかりと受け付けてくれました。仮想環境のLinuxだから、セキュリティはそんなに意識しなくてもいいでしょということで、/etc/selinux/config で

# /etc/selinux/config SELINUX=disabled

としてSELinuxが起動しないように設定しました。

 Apacheが動かないからずっとhttpd.confとにらめっこしたりディレクトリのパーミッションを全部777にしてみたりrootオーナーに変えてみたりを繰り返していましたが、こんなところに魔物が潜んでいたんですね。勉強になりました。


[xampp]ローカルにサブドメイン切ったらaccess forbidden食らった

Posted under ソフトウェア by uechoco on 木曜日 6 12月 2007 at 16 : 45 : 03

 XREAのWebスペース上で開発することが多々あるのですが、たまにSAFE_MODEの弊害があってローカルのXAMPP / Windows 上での開発に移行したりします。

 で、たまたまlocalhostのサブドメインをまだ切っていないマシンだったので、サブドメインを追加しようと思って、

C:\xampp\apache\conf\extra\httpd-vhosts.conf

NameVirtualHostを有効にして、該当の<VirtualHost>ディレクティブを追加して、

C:\WINDOWS\system32\drivers\etc\hosts

127.0.0.1 localhost
127.0.0.1 subdomain1.localhost

を追加して見たのですが、早速 http://subdomain1.localhost/ にアクセスしても

Access forbidden!

といわれました。なぜだーとおもって昔のhttpd.confを覘いたら、<Directory>ディレクトリを書き忘れていたようです。

 こういう細かいところのノウハウ(?)ってすぐに忘れちゃうんですよね。ってことで備忘録的に設定載せておきます。

httpd-vhosts.conf

NameVirtualHost *:80

<VirtualHost *:80>
DirectoryIndex index.php index.html
DocumentRoot "C:/path/to/subdomain1"
ServerName subdomain1.localhost
</VirtualHost>

<Directory "C:/path/to/subdomain1">
order deny,allow
allow from ALL
</Directory>

<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs"
ServerName localhost
</VirtualHost>


次ページへ »

Copyright © 2012 うえちょこ@ぼろぐ. WP Theme created by Web Top.