Ответ 1
Убедитесь, что nginx отправляет fastcgi_param HTTPS on
для соединений на 443.
Я запускаю FastCGI за Nginx и должен обнаруживать, когда URL доступен через HTTPS. Однако мое веб-приложение Django всегда сообщает, что соединение является HTTP (request.is_secure() == False). Однако SSL настроен правильно, и я проверил свои https://URL-адреса защищены с помощью проверки SSL.
Как я могу заставить Django правильно определять, когда запрос с URL-адресом HTTPS?
Настройки My Nginx:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
listen 443 default ssl;
ssl_certificate /home/webapp/ssl.crt
ssl_certificate_key /home/webapp/ssl.key
server_name myapp.com;
access_log /home/webapp/access.log
error_log /home/webapp/error.log
root /home/mywebapp;
location / {
# host and port to fastcgi server
fastcgi_pass 127.0.0.1:8801;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
}
}
}
Я запускаю процесс Django FastCGI с помощью:
python /home/webapp/manage.py runfcgi method=threaded host=127.0.0.1 port=8801 pidfile=/home/webapp/fastcgi.pid
Убедитесь, что nginx отправляет fastcgi_param HTTPS on
для соединений на 443.
Спасибо Юджи за ответ. Я обновил свой серверный блок, чтобы условно ввести HTTPS или HTTPS в зависимости от $server_port:
{
server {
listen 80;
listen 443 default ssl;
if ($server_port = 443) { set $https on; }
if ($server_port = 80) { set $https off; }
ssl_certificate /home/webapp/ssl.crt
ssl_certificate_key /home/webapp/ssl.key
server_name myapp.com;
access_log /home/webapp/access.log
error_log /home/webapp/error.log
root /home/mywebapp;
location / {
# host and port to fastcgi server
fastcgi_pass 127.0.0.1:8801;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
fastcgi_param HTTPS $https;
}
}
}