Bagaimana cara log skema URL (http / https) di Apache?


8

nginx memiliki $schemevariabel yang dapat digunakan dalam log_formatbarisnya.

%H adalah protokol permintaan (mis. "HTTP / 1.1").

Bagaimana saya bisa melakukan hal yang sama dengan Apache?

Jawaban:


3

Salah satu cara untuk melakukannya adalah memiliki dua CustomLogarahan kondisional , dikendalikan oleh apakah HTTPSvariabel diatur.

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

Saya juga telah mencoba menggunakan SetEnvIfdengan cara berikut, tetapi tidak berfungsi (log -):

SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."

1
mod_envusaha Anda mungkin gagal karena kesalahan sintaksis . SetEnvmengambil variabel dan nilai tanpa tanda sama: SetEnv URL_SCHEME http.
glasz

1
juga, SetEnvIfbaris tidak bekerja pada apache <2.4.1 karena mod_setenviftampaknya tidak memiliki akses ke lingkungan ssl . hampir membuatku gila pada 2.2.22.
glasz

Variabel lingkungan ini tampaknya spesifik untuk mod_ssl. Jika Anda menggunakan modul lain, seperti mod_gnutls, Anda tidak memilikinya.
bortzmeyer

Selain itu, mod_sslhanya menetapkan variabel lingkungan jika Anda secara eksplisit menyuruhnya melakukannya via SSLOptions.
Florian Brucker

3

Untuk beberapa alasan saya tidak bisa mendapatkan contoh di atas untuk bekerja, jadi temukan cara lain: Anda dapat menambahkan 2 aturan penulisan ulang ke dalam konfigurasi Anda sebagai berikut:

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

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

Kemudian tambahkan ini ke dalam definisi LogFormat Anda.

scheme=\"%{SCHEME}e\"

3

Karena skema url tidak tersedia secara langsung dalam format log apache, Anda dapat mencatat port kanonik (mis. 80/443) dari server yang melayani permintaan dengan menggunakan% p sebagai alternatif:

CustomLog access.log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" port:%p"

Bagaimana ini bisa mendapatkan dua upvotes begitu cepat? Bagaimanapun, ini tidak berguna jika Anda ingin secara efektif mencatat URL permintaan, dan Anda membutuhkan skema protokol URI.
Vladimir Panteleev

Port menunjukkan protokol.
Sumbu

3

Ini berfungsi untuk saya dengan Apache 2.4.23:

LogFormat "%{REQUEST_SCHEME}x ..." my_log_format

%{varname}xhanya tersedia ketika mod_ssl dimuat, lihat: https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats



Di mana% {VARNAME} x didokumentasikan? httpd.apache.org/docs/current/mod/mod_log_config.html tidak menyebutkan variabel x. Dikonfirmasi bekerja.
Artem Russakovskii

-2

Tentukan output log Anda dan tambahkan% H ke sana. Ini sama untuk Apache.

Jadi, Anda membangun LogFormatseperti ini dan afaik ada pasangan yang ditentukan dalam konfigurasi apache default.

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

dan tambahkan nama LogFormat (dalam hal ini "umum") ke akhir panggilan logfile Anda

CustomLog logs/access_log common

Lihat di sini untuk informasi lebih lanjut tentang log dan di sini tentang string format yang berbeda.


1
Um ... Saya sudah melihat ke sana. Saya menyatakan dalam pertanyaan saya bahwa %Htidak melakukan apa yang saya butuhkan.
Vladimir Panteleev
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.