簡體   English   中英

ALLOWED_HOSTS 和 Django

[英]ALLOWED_HOSTS and Django

我試圖在生產服務器上啟動一個 Django 1.11 項目。 當我啟動應用程序時,我看到以下錯誤:

無效的 HTTP_HOST 標頭:“bla-bla-bla.bla-bla-vla.com”。 您可能需要將 u'bla-bla-bla.bla-bla-vla.com' 添加到 ALLOWED_HOSTS**

但是,主機"bla-bla-bla.bla-bla-vla.com"已添加到settings.py中的ALLOWED_HOSTS中!

我試圖將DEBUGFalse切換到True並返回。 那么它工作正常。

我究竟做錯了什么?

如果 Django 說:

無效的 HTTP_HOST 標頭: 'bla-bla-bla.bla-bla-vla.com' 您可能需要將 ' bla-bla-bla.bla-bla-vla.com ' 添加到 ALLOWED_HOSTS

那么您需要將bla-bla-bla.bla-bla-vla.com逐字(或使用點作為通配符)添加到ALLOWED_HOSTS ( docs )。

然后重新加載 Apache2(不重新啟動,重新加載)以驗證更改是否已應用。

正如我在評論中所說:

第一個選項:

您必須在 settings.py 文件中寫入: ALLOWED_HOSTS=["bla-bla.com", "localhost", "127.0.0.1"]

然后,您只需使用以下命令重新啟動服務器:

sudo reboot

或者輕松重新加載或重新啟動 apache2 服務

service apache2 reloadservice apache2 restart

它現在應該可以工作了;)

ALLOWED_HOSTS = [
    '127.0.0.1',
    'localhost',
    'bla-bla',
]

此外,如果您在localhostnginx服務器或apache2服務器之間有類似gunicorn的服務。 記住也要重新啟動它。

sudo systemctl restart gunicorn

我有同樣的問題使用編輯 settings.py 修復

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

然后運行

python manage.py runserver 0.0.0.0:8000

NGINX遇到了同樣的錯誤。 如果一個人正在開發並且仍然port 80 only (no 443 yet)進行測試,則可能需要直接從django settings.py本身暫時停用任何strict HTTPS設置。 例如評論:

# #### strict https settings
# #### UNCOMMENT at production
# SECURE_REFERRER_POLICY = "same-origin"
# SECURE_BROWSER_XSS_FILTER = True
# SESSION_COOKIE_SECURE = True
# CSRF_COOKIE_SECURE = True
# CSRF_COOKIE_HTTPONLY = True
# SECURE_HSTS_SECONDS = 15780000  
# SECURE_CONTENT_TYPE_NOSNIFF = True
# SECURE_HSTS_INCLUDE_SUBDOMAINS = True
# SECURE_HSTS_PRELOAD = True
# SECURE_SSL_REDIRECT = True
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
#
# 
# #PREPEND_WWW = True
# #BASE_URL=["https://www.example.com"]

錯誤消失。 然后,當port 443 nginx 服務器塊設置也完成時,您可以取消注釋回strict HTTPS設置。

暫無
暫無

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

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