簡體   English   中英

Django和Linux,端口轉發

[英]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; 我不認為默認是每次啟動它都啟動。

將端口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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM