Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

nginx has the $scheme variable usable in its log_format lines.

%H is the request protocol (e.g. "HTTP/1.1").

How can I do the same with Apache?

share|improve this question

3 Answers 3

up vote 3 down vote accepted

One way to do it is to have two conditional CustomLog directives, controlled by whether the HTTPS variable is set.

CustomLog logs/access.log "https://..." env=HTTPS
CustomLog logs/access.log "http://..." env=!HTTPS

I have also tried using SetEnvIf in the following manner, but it doesn't work (it logs -):

SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."
share|improve this answer
1  
your mod_env endeavors may have failed because of syntactical errors. SetEnv takes its variable and value without an equal sign: SetEnv URL_SCHEME http. –  glasz Apr 5 at 23:30
    
Wow, well spotted! –  CyberShadow Apr 5 at 23:45
    
also, the SetEnvIf line does not work on apache < 2.4.1 because mod_setenvif apparently has no access to the ssl environment. almost drove me crazy on 2.2.22. –  glasz Apr 6 at 0:55
    
This environment variable seems specific to mod_ssl. If you use another module, such as mod_gnutls, you do not have it. –  bortzmeyer Aug 22 at 14:09

Define your log output and add %H to it. This is the same for Apache.

So, you build a LogFormat like this and afaik there are a couple defined in the default apache configuration.

LogFormat "%h %l %u %t \"%r\" %>s %b" common

and add the name of the LogFormat (in this case "common") to the end of your logfile call

CustomLog logs/access_log common

Just look here for further informations about the log and here about the different format strings.

share|improve this answer
    
Um... I've already looked there. I stated in my question that %H does not do what I need. –  CyberShadow Feb 13 '12 at 8:23

For some reason I could not get the examples above to work, so found another way: you can add 2 rewrite rules into your configuration as follows:

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [E=SCHEME:HTTP]

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [E=SCHEME:HTTPS]

Then add this into your LogFormat definition.

scheme=\"%{SCHEME}e\"
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.