解决Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx' to ALLOWED_HOSTS问题

本文介绍了解决Django项目中因ALLOWED_HOSTS设置不当导致的DisallowedHost错误的方法。当从浏览器访问运行中的Django应用时遇到此问题,可以通过修改settings.py文件中的ALLOWED_HOSTS配置来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行django程序后,通过浏览器访问服务器网址的8000端口,出现访问错误,报错如下

DisallowedHost at /
Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx.xxx.xxx' to ALLOWED_HOSTS.
Request Method:	GET
Request URL:	http://xxx.xx.xxx.xxx:8000/
Django Version:	2.2
Exception Type:	DisallowedHost
Exception Value:	
Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx.xxx.xxx' to ALLOWED_HOSTS.
Exception Location:	/usr/local/lib/python3.5/dist-packages/django/http/request.py in get_host, line 111
Python Executable:	/usr/bin/python3
Python Version:	3.5.2
Python Path:	
['/workspace/Django/Jsmind_Html',
 '/usr/lib/python35.zip',
 '/usr/lib/python3.5',
 '/usr/lib/python3.5/plat-x86_64-linux-gnu',
 '/usr/lib/python3.5/lib-dynload',
 '/usr/local/lib/python3.5/dist-packages',
 '/usr/lib/python3/dist-packages']
Server time:	Sat, 6 Apr 2019 02:40:04 +0000

解决办法:

修改创建项目时生成的setting.py文件

ALLOWED_HOSTS = []

改为

ALLOWED_HOSTS = ['*']

 

<think>我们正在处理一个关于firewalld的错误:`INVALID_ADDR: 10.16.19.46/46`。这个错误通常是由于在配置防火墙规则时使用了无效的IP地址掩码长度(即子网掩码)引起的。在IPv4中,子网掩码的有效范围是0到32,而46显然超出了这个范围(因为IPv4地址只有32位)。因此,我们需要检查并修正这个配置。 根据用户提供的引用内容,虽然引用中涉及了IP地址的配置(如10.16.42.200等),但并没有直接使用错误的掩码(如/46)。因此,错误可能出现在其他地方。 ### 错误原因分析 1. **无效的子网掩码**:IPv4地址的CIDR表示法中,掩码长度必须在0到32之间。而46超出了这个范围,因此出现了`INVALID_ADDR`错误。 2. **配置位置**:这个错误可能出现在以下位置: - 通过`firewall-cmd`命令直接添加规则时指定的源地址或目标地址。 - 在firewalld的配置文件(如XML配置文件)中指定的地址。 ### 解决步骤 #### 1. 检查最近执行的防火墙命令 检查是否在命令行中使用了错误的掩码长度,例如: ```bash sudo firewall-cmd --add-source=10.16.19.46/46 ``` 如果是这样,需要修正掩码长度。 #### 2. 检查firewalld的配置文件 firewalld的配置文件位于`/etc/firewalld/`目录下,包括区域(zones)和服务(services)的配置文件。检查这些文件中是否包含`10.16.19.46/46`这样的无效地址。 #### 3. 修正配置 将掩码长度改为有效的值(0-32)。例如,如果实际子网是`10.16.19.0/24`,那么应该使用`10.16.19.46/24`或者根据实际需要设置。 #### 4. 重新加载防火墙 修正配置后,重新加载防火墙: ```bash sudo firewall-cmd --reload ``` #### 5. 验证配置 检查配置是否正确应用: ```bash sudo firewall-cmd --list-all ``` ### 示例:修正一个区域配置文件 假设错误出现在`public`区域的配置文件中: 1. 打开配置文件: ```bash sudo vi /etc/firewalld/zones/public.xml ``` 2. 查找`10.16.19.46/46`并修正为正确的掩码,例如`10.16.19.46/32`(表示单个主机)或`10.16.19.0/24`(表示整个子网)。 3. 保存并退出。 4. 重新加载防火墙。 ### 注意事项 - 如果配置中使用了多个地址,请逐一检查确保所有掩码长度都有效。 - 如果错误配置是通过`firewall-cmd`的`--permanent`选项保存的,则必须修正配置文件或使用正确的命令覆盖。 ### 相关问题 1. 如何正确配置firewalld的源地址限制? 2. firewalld中如何设置IP地址范围? 3. 如何检查firewalld配置中的语法错误? 通过以上步骤,应该可以解决`INVALID_ADDR`错误。如果问题仍然存在,请检查系统日志以获取更多信息: ```bash sudo journalctl -xe -u firewalld ```</think>### 解决 firewalld 报错 `INVALID_ADDR: 10.16.19.46/46` #### 错误原因分析 该错误表示您在配置防火墙规则时使用了**无效的 IP 地址格式**: ```bash INVALID_ADDR: 10.16.19.46/46 ``` - **根本问题**:IPv4 地址的 CIDR 掩码范围必须是 **0-32**,而您使用了 `/46`(超出有效范围) - 常见触发场景: 1. 添加防火墙规则时指定了错误的掩码长度 2. 修改区域配置时输入了无效的源地址 3. 服务配置文件中存在语法错误 --- #### 解决方案步骤 ##### 1. 检查并修正错误配置 ```bash # 查看当前所有规则(定位错误位置) sudo firewall-cmd --list-all-zones | grep "10.16.19.46" # 检查永久配置 sudo grep -r "10.16.19.46" /etc/firewalld/ ``` ##### 2. 修正无效的 CIDR 格式 ```bash # 正确格式应为 /32(单主机)或 /24(C类子网) sudo firewall-cmd --remove-source=10.16.19.46/46 --permanent # 删除错误规则 sudo firewall-cmd --add-source=10.16.19.46/32 --permanent # 添加正确规则 ``` ##### 3. 重新加载配置 ```bash sudo firewall-cmd --reload # 应用更改 sudo systemctl restart firewalld # 重启服务 ``` ##### 4. 验证修复结果 ```bash sudo firewall-cmd --check-config # 检查配置语法 sudo journalctl -u firewalld -f # 实时监控日志 ``` --- #### 配置示例(正确格式) ```xml <!-- /etc/firewalld/zones/public.xml 示例 --> <zone> <source address="10.16.19.46/32"/> <!-- 单主机 --> <source address="10.16.19.0/24"/> <!-- 整个子网 --> </zone> ``` #### 常见修复场景 | 错误类型 | 修复命令 | 说明 | |--------------------|----------------------------------------------|--------------------------| | 无效掩码 | `--remove-source=10.16.19.46/46` | 删除错误规则 | | 区域配置错误 | `--zone=public --remove-source=...` | 指定区域修正 | | 服务定义错误 | 编辑 `/etc/firewalld/services/xxx.xml` | 修正服务配置文件 | | 运行时配置未同步 | `--runtime-to-permanent` | 同步临时规则到永久配置 | --- #### 防止复发的建议 1. **CIDR 规范检查**: ```bash # 添加规则前验证格式 ipcalc -c 10.16.19.46/32 && echo "Valid" || echo "Invalid" ``` 2. **配置预检机制**: ```bash sudo firewall-cmd --check-config # 每次修改后执行 ``` 3. **使用 IP 范围工具**: ```bash # 生成有效 CIDR ipcalc 10.16.19.46/255.255.255.0 # 输出: 10.16.19.0/24 ``` > **关键提示**:IPv4 掩码范围只能是 **0-32**,IPv6 掩码范围是 **0-128**。参考 TCP/IP 协议规范[^1]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值