这是我在社区的第一个问题,如果我写错了,我提前道歉
我在 Python (Django) 中开发了一个应用程序,并且在质量环境中我使用 gunicorn 来提供部署:gunicorn --bind 0.0.0.0:8000 application.wsgi --daemon
在同一台服务器上,我使用 Apache 监听端口 443 (https://) 并通过代理将请求重定向到 Gunicorn,如下所示:
<VirtualHost *:443>
ServerName example.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
Allow from all
</Proxy>
ProxyPass / http://example.com:8000/
ProxyPassReverse / http://example.com:8000/
# SSL
SSLEngine On
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#Include conf-available
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
一切正常,我可以通过 https 访问它,除了静态文件。
我按照文档的建议,执行了命令collectstatic
,文件是在我在 settings.py 中配置的文件夹(/static)中生成的
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
我利用了我已经安装了 Apache 的优势,我尝试在同一个 VirtualHost 中添加 /static 目录的别名,如下所示:
Alias /static "/home/ubuntu/example/static/"
<Directory "/home/ubuntu/example/static">
Order allow,deny
Allow from all
Require all granted
</Directory>
VirtualHost 的完整配置如下所示:
<VirtualHost *:443>
ServerName example.com
Alias /static "/home/ubuntu/example/static/"
<Directory "/home/ubuntu/example/static">
Order allow,deny
Allow from all
Require all granted
</Directory>
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
Allow from all
</Proxy>
ProxyPass / http://example.com:8000/
ProxyPassReverse / http://example.com:8000/
# SSL
SSLEngine On
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#Include conf-available
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
但是,当尝试访问此目录中的文件时,我总是得到一个:
未找到 - 在此服务器上未找到请求的资源。
我分析了 error.log 和 access.log,甚至没有在日志中点击请求。
将相同的别名添加到端口 80 上的另一个虚拟主机,它可以正常工作。我认为问题在于将此别名添加到端口 443 的特定 VirtualHost
你能帮助我吗?
经过很多困难,我发现了错误。
我需要在 ProxyPass 中包含一个例外规则,快捷方式一切正常。
我包括了这一行:
这篇文章帮助了我:
如何向 apache 反向代理规则添加例外