Server: Log the X-Forwarded-For header in the access log

This commit is contained in:
Kovid Goyal 2017-06-26 23:43:09 +05:30
parent 042df155ea
commit dcf95a3418
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 8 additions and 2 deletions

View File

@ -210,6 +210,7 @@ class HTTPRequest(Connection):
Connection.__init__(self, *args, **kwargs) Connection.__init__(self, *args, **kwargs)
self.max_header_line_size = int(1024 * self.opts.max_header_line_size) self.max_header_line_size = int(1024 * self.opts.max_header_line_size)
self.max_request_body_size = int(1024 * 1024 * self.opts.max_request_body_size) self.max_request_body_size = int(1024 * 1024 * self.opts.max_request_body_size)
self.forwarded_for = None
def read(self, buf, endpos): def read(self, buf, endpos):
size = endpos - buf.tell() size = endpos - buf.tell()
@ -243,6 +244,7 @@ class HTTPRequest(Connection):
'Become ready to read an HTTP request' 'Become ready to read an HTTP request'
self.method = self.request_line = None self.method = self.request_line = None
self.response_protocol = self.request_protocol = HTTP1 self.response_protocol = self.request_protocol = HTTP1
self.forwarded_for = None
self.path = self.query = None self.path = self.query = None
self.close_after_response = False self.close_after_response = False
self.header_line_too_long_error_code = httplib.REQUEST_URI_TOO_LONG self.header_line_too_long_error_code = httplib.REQUEST_URI_TOO_LONG
@ -337,6 +339,7 @@ class HTTPRequest(Connection):
if inheaders.get("Expect", '').lower() == "100-continue": if inheaders.get("Expect", '').lower() == "100-continue":
buf = BytesIO((HTTP11 + " 100 Continue\r\n\r\n").encode('ascii')) buf = BytesIO((HTTP11 + " 100 Continue\r\n\r\n").encode('ascii'))
return self.set_state(WRITE, self.write_continue, buf, inheaders, request_content_length, chunked_read) return self.set_state(WRITE, self.write_continue, buf, inheaders, request_content_length, chunked_read)
self.forwarded_for = inheaders.get('X-Forwarded-For')
self.read_request_body(inheaders, request_content_length, chunked_read) self.read_request_body(inheaders, request_content_length, chunked_read)

View File

@ -525,8 +525,11 @@ class HTTPConnection(HTTPRequest):
return return
if not self.opts.log_not_found and status_code == httplib.NOT_FOUND: if not self.opts.log_not_found and status_code == httplib.NOT_FOUND:
return return
line = '%s port-%s %s %s "%s" %s %s' % ( ff = self.forwarded_for
self.remote_addr, self.remote_port, username or '-', if ff:
ff = '[%s] ' % ff
line = '%s port-%s %s%s %s "%s" %s %s' % (
self.remote_addr, self.remote_port, ff or '', username or '-',
fast_now_strftime('%d/%b/%Y:%H:%M:%S %z'), fast_now_strftime('%d/%b/%Y:%H:%M:%S %z'),
force_unicode(self.request_line or '', 'utf-8'), force_unicode(self.request_line or '', 'utf-8'),
status_code, ('-' if response_size is None else response_size)) status_code, ('-' if response_size is None else response_size))