我正在开发我的第一个Django应用程序,我安装了allauth以允许openid登录。 我正在尝试使用no-ip dns来避免动态ip的问题,在facebook上注册我的应用程序并从我的机器进行测试。但我不知道如何让我的django测试服务器在端口80上从外部可见。 如果我使用sudo强制它,它给我带来了登录postgrel数据库的问题,但如果我不使用sudo,它说我不能使用该端口(如果apache关闭也是如此)。
感谢您的帮助。
答案 0 :(得分: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()
答案 1 :(得分: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提供给整个互联网)。如果你想对/ etc / hosts做任何事情,你可能还需要更改server_name
,以使你的网站认为它在其他地方。
sudo service nginx start
你将开展业务。注意,启动后可能需要手动启动nginx;我不认为默认是每次启动它都会启动。
答案 2 :(得分:0)
如果不使用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
(如果需要,编辑界面)
但是,您可以查看此问题:Is there a way for non-root processes to bind to "privileged" ports on Linux?,表示您的问题的另一种解决方案。
请注意与解释语言有关的问题(例如python)。
这显然仅用于开发目的。要运行您的应用程序,您应该使用nginx + gunicorn或apache + mod_wsgi。