1

我正在开发我的第一个 Django 应用程序,我已经安装了 allauth 以允许 openid 登录。我正在尝试使用 no-ip dns 来避免动态 ip 的问题,以便在 facebook 上注册我的应用程序并在我的机器上进行测试。但我不知道如何让我的 django 测试服务器在端口 80 上从外部可见。如果我使用 sudo 强制它,它会给我登录到 postgrel 数据库的问题,但如果我不使用 sudo,它说我不能使用该端口(如果 apache 已关闭)。

感谢您的帮助。

4

3 回答 3

2

一种方法是在 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,它是一个受保护的端口,只有 root 可以绑定到。(就像任何低于 1024 的端口一样)

这是一个简单的 iptables 规则,它将对端口 8000 的请求转发到端口 80,因此您可以“假装”在端口 80 访问您的服务器,同时在端口 8000 服务它。

它仅适用于环回接口(例如,您在自己的计算机上与自己交谈),但这应该是您开发所需要的。

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(根据需要编辑界面)

替代解决方案

但是,您可以看看这个问题:非 root 进程是否可以绑定到 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 回答