1

私は最初のDjangoアプリケーションを開発しています。openidログインを許可するためにallauthをインストールしました。動的IPの問題を回避するために、no-ip dnsを使用して、Facebookにアプリを登録し、マシンからテストしようとしています。しかし、ポート80でdjangoテストサーバーを外部から表示する方法がわかりません。sudoを使用して強制すると、postgrelデータベースへのロギングで問題が発生しましたが、sudoを使用しないと使用できないと表示されます。そのポート(apacheがオフの場合も)。

ご協力ありがとうございました。

4

3 に答える 3

2

1 つの方法は、Apache で仮想ホストを作成することです。これはmod_wsgi、Django アプリとの対話に使用されます。

例:

<VirtualHost *:80>
    ServerName xxx.xxx.com
    ServerAdmin webmaster@localhost

    WSGIScriptAlias / /var/www/xxx/apache/xxx.wsgi
    Alias /static/ /var/www/xxx/static/

    DocumentRoot /var/www/xxx
    LogLevel info

    ErrorLog ${APACHE_LOG_DIR}/xxx-error.log
    CustomLog ${APACHE_LOG_DIR}/xxx-access.log combined
</VirtualHost>

xxx.wsgi の内容:

import os, sys

apache_configuration = os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
sys.path.append(workspace)
sys.path.append('/var/www/xxx')

os.environ['DJANGO_SETTINGS_MODULE'] = 'xxx.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
于 2012-10-24T23:21:26.790 に答える
2

ポート 80 をポート 8000 に「リダイレクト」

sudo を使用せずにポート 80 にバインドすることはできません。これは、ルートのみがバインドできる保護されたポートです。(1024 未満のポートと同様)

これは、ポート 8000 へのリクエストをポート 80 に転送する単純な iptables ルールです。これにより、ポート 8000 でサービスを提供しながら、ポート 80 でサーバーにアクセスするふりをすることができます。

これはループバック インターフェイスでのみ機能します (たとえば、自分のコンピューターで自分自身と通信している場合など)、それは開発に必要なものです。

iptables -t nat -I OUTPUT --source 127.0.0.1 --destination 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8000

必要な場合、外部クライアントの場合、ルールは次のとおりです。

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8000(必要に応じてインターフェイスを編集します)

代替ソリューション

ただし、この質問を見ることができます:非ルートプロセスが Linux の「特権」ポートにバインドする方法はありますか? は、問題の別の解決策を示しています。

インタプリタ言語(pythonなど)については注意が必要です。

警告の言葉

これは明らかに開発目的のみを目的としています。アプリを実行するには、nginx + gunicorn または apache + mod_wsgi を使用する必要があります。

于 2012-10-24T23:21:28.913 に答える
1

nginx プロキシ パスを使用します。Ubuntuでは、あなたがしなければならないのはsudo apt-get install nginx、それからsudo nano /etc/nginx/sites-available/default. location /ブロックを次のように変更します。

location / {
    proxy_pass http://localhost:8080; #or whatever port you are using
    proxy_set_header Host $host;
}

行のコメントを外して、次のlisten 80;ように変更しlisten 127.0.0.1:80ます (これにより、開発サイトが誤ってポート 80 でインターネット全体に提供されるのを防ぐことができます)。server_name/etc/hosts で何かをしたい場合は、サイトが別の場所にあると思わせるためにを変更する必要があるかもしれません。

sudo service nginx startそしてあなたはビジネスになります。nginx は、起動後に手動で開始する必要がある場合があることに注意してください。毎回起動時に起動するのがデフォルトではないと思います。

于 2012-10-24T23:30:53.217 に答える