Wie erkenne ich SSL in der gemeinsam genutzten 80/443 SSL Nginx Server Konfiguration?

7

Wenn der Nginx-Server folgendermaßen konfiguriert ist:

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

Wie kann festgestellt werden, dass die Anfrage über HTTP oder HTTPS kam?

(ZB $http_portist unbrauchbar, da der Port nicht explizit angegeben ist und daher leer ist)

Mykhal
quelle

Antworten:

12

http://nginx.org/en/docs/http/ngx_http_core_module.html#variables

  • $ https - "on", wenn die Verbindung im SSL-Modus ausgeführt wird, oder eine leere Zeichenfolge
  • $ Schema - Anforderungsschema, "http" oder "https"

Wenn Sie beispielsweise einen Speicherort auf https und nur auf Folgendes beschränken möchten:

location /admin {
    if ($https = "") {
        return 404;
    }
    # ... and so on
}
VBart
quelle
Es ist wie üblich erwähnenswert, dass If is Evil ist , und man sollte vorsichtig damit umgehen. Aber die "Rückgabe 404" ist eine der gültigen Verwendungen.
Adrien Leravat
1

Warum nicht jede in ihre eigene Server-Direktive trennen und ein Protokoll pro Serverkontext angeben:

Server {
  höre 80;
  Servername 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;
  Servername 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;
}}

Sie können dann jedes Protokoll separat anzeigen, um festzustellen, woher der Zugriff oder Fehler stammt.

Andy Shinn
quelle