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.