如何检测ssl共享80/443 ssl nginx服务器configuration?

nginx服务器被这样configuration时:

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

如何通过HTTP或HTTPS检测到请求?

(例如$http_port不可用,因为端口没有明确指定,因此它是空的)

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

  • $ https – 如果连接以SSL模式运行,则为“on”,否则为空string
  • $ scheme – 请求scheme,“http”或“https”

例如,如果您想要将某个位置限制为https,且仅限于:

 location /admin { if ($https = "") { return 404; } # ... and so on } 

为什么不把它们分离到自己的服务器指令中,并为每个服务器上下文指定一个日志:

服务器{
  听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错误;
 }

服务器{
  听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错误;
 }

然后,您可以分别查看每个日志,以查看访问或错误来自哪里。