質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.59%

apacheの設定方法とwsgiファイルを外部公開する方法を教えてください

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,288

score 14

flaskを使って外部公開すためにまずwsgiファイルを作成しました。

wsgiを使って、pythonのファイルを外部公開したいです。
apacheの/etc/httpd/conf.d/mod_wsgi.conf
のディレクトリ以下に

#LoadModule wsgi_module modules/mod_wsgi.so

WSGIScriptAlias /?????/myapp /home/h0/?????/webapps/myapp.wsgi
<Directory "/home/h0/?????/webapps">
    Order allow,deny
    Allow from all
    #SSLRequireSSL
</Directory>


と書き込みました。
?????は私のpublic_htmlです。

https://ドメイン名/?????/myapp にアクセスすると
Not Found になります。これはmyappというファイルを作成していないからでしょうか?
必要ならどのような設定で必要でしょうか。

またhttps://ドメイン名/?????/webapps/myapp.wsgi
にアクセスするとインターナルサーバーエラーが出力されます。

myapp.wsgiの中身は

#/usr/local/bin/python3

def application(environ, start_response):
    start_response('200 OK', [('Content-type', 'text/plain')])
    return [b'Hello, world']

です。

権限は755に変更してあります。

そもそも、/usr/local/python/lib/python3.5/site-packages
にアクセスしてみると、mod_wsgiがダウンロードされていません。

このサーバーは共有サーバーであり、一般ユーザーの私に権限がありません。

mod_wsgi.confファイルは以前使われていた方の真似をして自分の名前だけを変えて追加書き込みしてもらいました。
管理者の方曰く、以前の方々はこの設定でpythonファイルを実行できていたそうです。
今は、その方達がいないため何も聞くことができないため、この場で質問させていただきます。

外部公開するための
wsgiファイル、apacheやディレクトリなどのアドバイスをお願いします。

現在調べても何もわからず八方塞がりです。よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2019/05/14 18:15

    サーバーの設定変更語に Apache を再起動していますか?


    > またhttps://ドメイン名/?????/webapps/myapp.wsgi にアクセスするとインターナルサーバーエラーが出力されます。

    Apache のログに 詳細なメッセージが記録されていると思いますので、エラーメッセージを確認してください。

    キャンセル

  • shuntakahashi

    2019/05/15 01:15

    コメントありがとうございます。
    はい、サーバーの設定変更後に再起動はしましたが依然エラーが出力されます。
    Apache のログを確認してみると
    '''
    [@自分のドメイン]$ ./public_html/webapps/myapp.wsgi
    ./public_html/webapps/myapp.wsgi: line 3: 期待してない token `(' のあたりにシンタックスエラー
    ./public_html/webapps/myapp.wsgi: line 3: `def application(environ, start_response):'
    '''
    とエラー出力されます。どの例文をコピーして貼り付けても全く同じとこでエラーが出るので原因がわからないところです。

    キャンセル

  • gh640

    2019/05/15 10:14

    ちなみに、該当するドメインに対する Apache の設定は、記載されているものですべてですか?もし他にも関連する設定行が存在するのであればそのあたりも含めてご提示になると、状況がより伝わりやすくなると思います。

    (「 https://ドメイン名/?????/webapps/myapp.wsgi にアクセスするとインターナルサーバーエラーが出力されます」とのことですが、ご提示の WSGI の設定だけではそのような挙動にはならないのではないかと思い、このコメントです)

    キャンセル

  • shuntakahashi

    2019/05/17 16:30

    コメントありがとうございます。
    この設定で全てです

    コードは、上記で示した .wsgiで
    ./webapps/myapp.wsgi: line 3: 期待してない token `(' のあたりにシンタックスエラー
    ./webapps/myapp.wsgi: line 3: `def application(environ, start_response):'
    と出力されます。
    このファイルをwebに公開せずに、ローカルのターミナル環境で実行するとエラーは出力されず実行されます。

    キャンセル

回答 1

0

mod_wsgi.conf の中身が本当に記載されているとおりなのであれば、まずは LoadModule の行をアンコメントして mod_wsgi を適切にロードする形に変更する必要があるのではないでしょうか。

- #LoadModule wsgi_module modules/mod_wsgi.so
+ LoadModule wsgi_module modules/mod_wsgi.so

そして、もし mod_wsgi のインストールをまだ行っていらっしゃらなければ、まずは mod_wsgi をインストールするところから、かと思います。

リポジトリの README と公式ドキュメントをまずはご覧になってみてください。

その上で、うまく行かなければ何らかのエラーがログが出ると思いますので、 CHERRY さんのおっしゃるようにログを確認するとよいのではないかと思います。

追記 1

コメント欄でいただいた質問に回答します。

modules ディレクトリには mod_wsgi.so がインストールされているのですが
/usr/local/python/lib/python3.5/site-packages には、mod_wsgiがインストールされていません。
site-packages 以下のmod_wsgi と modules ディレクトリ以下の mod_wsgi.so は全く違う挙動でしょうか?
wsgiファイルを動かすためには、どちらもインストールする必要があるのでしょうか?

mod_wsgi.so ファイルが modules 以下にあるか site-packages 以下にあるかは単純にインストール方法による違いだと思います。ですので、 modules 以下に正しく動くものがすでに入っているのであれば site-packages には mod_wsgi 関連のものが入っていなくても問題ないと私は考えます(ただし一般論としてのお話です。前の担当の方が特殊なことをされていたらわかりません)。

その感じだと Quick Installation Guide のページをまだご覧になっていらっしゃらない、ですよね?まずは  Quick Installation Guide をじっくりお読みになって & LoadModule の行をアンコメントして mod_wdgi.so が読み込まれるかどうかを確認されてみるのはいかがでしょうか。

追記 2 

質問者さんが同内容の質問を別に立てられたようなので、重複を防ぐためこちらの回答は終了します:

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/15 00:55

    コメントありがとうございます。
    modules ディレクトリには mod_wsgi.so がインストールされているのですが
    /usr/local/python/lib/python3.5/site-packages には、mod_wsgiがインストールされていません。
    site-packages 以下のmod_wsgi と modules ディレクトリ以下の mod_wsgi.so は全く違う挙動でしょうか?
    wsgiファイルを動かすためには、どちらもインストールする必要があるのでしょうか?

    キャンセル

  • 2019/05/17 16:28

    コメントありがとうございます。
    コメント頂いた通り、load moduleをコメントアウトすると読み込めました。

    しかし、設定したwsgiファイルに置いて依然、Internal Server Error が出力されます。 
    コードは、上記で示した .wsgiで
    ./webapps/myapp.wsgi: line 3: 期待してない token `(' のあたりにシンタックスエラー
    ./webapps/myapp.wsgi: line 3: `def application(environ, start_response):'
    と出力されます。
    このファイルをwebに公開せずに、ローカルのターミナル環境で実行するとエラーは出力されず実行されます。

    キャンセル

  • 2019/05/19 21:05

    少し意思疎通がうまくいっていない感じがします。

    > コメント頂いた通り、load moduleをコメントアウトすると読み込めました。

    「 `LoadModule` の行をアンコメントして」というのは「 `LoadModule` のコメントアウトを解除して」、つまり「先頭の `#` を削除して」という意味でした。わかりづらくて申し訳ありません。

    まずは `mod_wsgi` の読み込みを正しく行う必要があるので、まずはそこを目指してください。できているかどうかわからなければコマンド等でチェックしましょう。

    参考:

    https://www.shellhacks.com/list-loaded-enabled-apache-modules/

    > しかし、設定したwsgiファイルに置いて依然、Internal Server Error が出力されます。 

    これはどの URL にアクセスしたときの話をされていますか? wsgi として動かしたいのであれば、 `https://ドメイン名/?????/myapp` で確認する必要があるものと思いますが、この URL のことをおっしゃっていますか?

    また、「リポジトリの README と公式ドキュメントをまずはご覧になってみてください」というコメントがスルーされているような気もするのですが、いかがでしょう。本来複雑なことではないはずなので、いちどドキュメントをご覧になることをおすすめします。

    > 管理者の方曰く、以前の方々はこの設定でpythonファイルを実行できていたそうです。

    もしかしたら、実は wsgi ではなく cgi として実行されていた、という可能性はありませんか?念のためチェックされるとよいかもしれません。

    最後に余談ですが、 `myapp.wsgi` の shebang 行は `#` ではなく `#!` 始まりにする必要がある気がします(質問文だけのタイポであればスルーしてください)。

    キャンセル

  • 2019/05/23 15:11

    コメントありがとうございます。

    上記で示して頂いた通りに、コメントアウトを解除して読み込みました。
    またリポジトリの README と公式ドキュメントも読み、私が使っているapacheサーバーにmod_wsgiがインストールされていることを確認しました。

    シェバンのコメントもありがとうございます。正しいシェバンにしています。

    しかし、https://ドメイン名/?????/myapp でアクセスすると、internal server error が依然出力されブラウザに出力されない状況が続いています。
    どうか、お力をお貸しいただければと存じます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る