Como detectar o ssl na configuração compartilhada do servidor nginx 80/443 ssl?

7

Quando o servidor nginx é configurado dessa maneira:

server {
  listen 80;
  listen 443 ssl;
  server_name www.example.org;
  ...
}

como pode ser detectado que a solicitação veio via HTTP ou HTTPS?

(Por exemplo, $http_port é inutilizável, porque a porta não é especificada explicitamente, portanto, está vazia)

    
por mykhal 15.11.2012 / 16:54

2 respostas

11

link

  • $https — “on” if connection operates in SSL mode, or an empty string otherwise
  • $scheme — request scheme, “http” or “https”

Por exemplo, se você quiser limitar um local a https e apenas:

location /admin {
    if ($https = "") {
        return 404;
    }
    # ... and so on
}
    
por 15.11.2012 / 17:24
1

Por que não separar cada um em sua própria diretiva de servidor e especificar um log por contexto de servidor:

server {
  listen           80;
  server_name      www.nginx.org;
  log_format gzip '$remote_addr - $remote_user [$time_local]  '
                  '"$request" $status $bytes_sent '
                  '"$http_referer" "$http_user_agent" "$gzip_ratio"';

  access_log  /spool/logs/nginx-access.log  gzip  buffer=32k;
  error_log /var/log/nginx/nginx-error.log error;
}

server {
  listen           443 default_server ssl;
  server_name      secure.nginx.org;
  log_format gzip '$remote_addr - $remote_user [$time_local]  '
                  '"$request" $status $bytes_sent '
                  '"$http_referer" "$http_user_agent" "$gzip_ratio"';

  access_log  /var/log/nginx/nginx_ssl-access.log  gzip  buffer=32k;
  error_log /var/log/nginx/nginx_ssl-error.log error;
}

Você pode visualizar cada registro separadamente para ver de onde o acesso ou erro veio.

    
por 15.11.2012 / 17:08