nginx memiliki $scheme
variabel yang dapat digunakan dalam log_format
barisnya.
%H
adalah protokol permintaan (mis. "HTTP / 1.1").
Bagaimana saya bisa melakukan hal yang sama dengan Apache?
nginx memiliki $scheme
variabel yang dapat digunakan dalam log_format
barisnya.
%H
adalah protokol permintaan (mis. "HTTP / 1.1").
Bagaimana saya bisa melakukan hal yang sama dengan Apache?
Jawaban:
Salah satu cara untuk melakukannya adalah memiliki dua CustomLog
arahan kondisional , dikendalikan oleh apakah HTTPS
variabel diatur.
CustomLog logs/access.log "https://..." env=HTTPS
CustomLog logs/access.log "http://..." env=!HTTPS
Saya juga telah mencoba menggunakan SetEnvIf
dengan cara berikut, tetapi tidak berfungsi (log -
):
SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."
SetEnvIf
baris tidak bekerja pada apache <2.4.1 karena mod_setenvif
tampaknya tidak memiliki akses ke lingkungan ssl . hampir membuatku gila pada 2.2.22.
mod_ssl
hanya menetapkan variabel lingkungan jika Anda secara eksplisit menyuruhnya melakukannya via SSLOptions
.
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\"
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"
Ini berfungsi untuk saya dengan Apache 2.4.23:
LogFormat "%{REQUEST_SCHEME}x ..." my_log_format
%{varname}x
hanya tersedia ketika mod_ssl dimuat, lihat: https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats
Tentukan output log Anda dan tambahkan% H ke sana. Ini sama untuk Apache.
Jadi, Anda membangun LogFormat
seperti 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.
%H
tidak melakukan apa yang saya butuhkan.
mod_env
usaha Anda mungkin gagal karena kesalahan sintaksis .SetEnv
mengambil variabel dan nilai tanpa tanda sama:SetEnv URL_SCHEME http
.