[英]Django and Linux, port forwarding
我正在開發我的第一個Django應用程序,我已安裝allauth以允許openid登錄。 我正在嘗試使用no-ip dns來避免動態ip的問題,在facebook上注冊我的應用程序並從我的機器進行測試。 但我不知道如何讓我的django測試服務器從外部80端口可見。如果我使用sudo強制它,它給我帶來了登陸postgrel數據庫的問題,但如果我不使用sudo它說我不能使用那個端口(如果apache關閉的話)。
謝謝您的幫助。
一種方法是在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()
我會使用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; 我不認為默認是每次啟動它都啟動。
如果不使用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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.