django docs:
您还应该配置位于Django前面的Web服务器以验证主机。它应该响应静态错误页面或忽略对不正确主机的请求,而不是将请求转发给Django。通过这种方式,您可以避免Django日志中的虚假错误(如果您以这种方式配置了错误报告,则可以避免发送电子邮件)。例如,在nginx上,您可能会设置一个默认服务器,以便在无法识别的主机上返回“444 No Response”:
我正在使用Apache,这有效:
- > 404错误
http://serverip - > http://www.example.com - > django site
https://www.example.com - > http://example.com - > django site
现在我遇到了https://example.com的问题 我的浏览器收到了一条不安全的消息,因为我只有example.com,www.example.com的SSL证书,在我接受安全警告后,我看到django网站,但我想要404错误页面。 我怎样才能实现这个目标,还是误解了django文档?
更新配置:
假设django站点为/var/www/html/index.html以简化
000-default.conf:
<VirtualHost *:80>
Redirect 404 /
</VirtualHost>
example.com.conf:
<VirtualHost *:80>
ServerAdmin example@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
example.com勒ssl.conf中:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin example@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>