1. 程式人生 > >後端Apache日誌獲取前端Nginx反向代理的真實IP地址

後端Apache日誌獲取前端Nginx反向代理的真實IP地址

php檢視客戶訪問真實地址程式碼

<?php
function real_ip()
{
    static $realip = NULL;
    if ($realip !== NULL)
    {
        return $realip;
    }
 
    if (isset($_SERVER))
    {
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
 
            
/* 取X-Forwarded-For中第一個非unknown的有效IP字串 */ foreach ($arr AS $ip) { $ip = trim($ip); if ($ip != 'unknown') { $realip = $ip; break; } } } elseif (isset
($_SERVER['HTTP_CLIENT_IP'])) { $realip = $_SERVER['HTTP_CLIENT_IP']; } else { if (isset($_SERVER['REMOTE_ADDR'])) { $realip = $_SERVER['REMOTE_ADDR']; } else { $realip
= '0.0.0.0'; } } } else { if (getenv('HTTP_X_FORWARDED_FOR')) { $realip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('HTTP_CLIENT_IP')) { $realip = getenv('HTTP_CLIENT_IP'); } else { $realip = getenv('REMOTE_ADDR'); } } preg_match("/[\d\.]{7,15}/", $realip, $onlineip); $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0'; return $realip; } echo real_ip(); ?>

nginx配置檔案cat test.test.net.conf

log_format  test.test.net  '$remote_addr - $remote_user [$time_local] $request' '$status $body_bytes_sent $http_referer' '$http_user_agent $http_x_forwarded_for $upstream_cache_status';
server
    {
        listen       5555;
        server_name test.test.net;

        location / {

            proxy_connect_timeout 600s;
            proxy_read_timeout  600s;
            proxy_send_timeout  600s;

            proxy_buffer_size   32000k;
            proxy_buffers       1000 64000k;
            proxy_busy_buffers_size 128000k;
            proxy_temp_file_write_size 512000k;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass http://test.test.net:60081;

        }

        access_log  /usr/local/nginx/logs/test.test.net-access.log  test.test.net;

}

apache配置httpd.conf

新增%{X-FORWARDED-FOR}i

Apache日誌配置檔案中定義了兩種列印格式,分別為combined格式和common格式。

本人使用combined格式

<IfModule log_config_module>
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    LogFormat "%h ClinetIp:%{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b %{X-FORWARDED-FOR}i" common

    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    #
    # The location and format of the access logfile (Common Logfile Format).
    # If you do not define any access logfiles within a <VirtualHost>
    # container, they will be logged here.  Contrariwise, if you *do*
    # define per-<VirtualHost> access logfiles, transactions will be
    # logged therein and *not* in this file.
    #
    CustomLog "logs/access_log" common

    #
    # If you prefer a logfile with access, agent, and referer information
    # (Combined Logfile Format) you can use the following directive.
    #
    #CustomLog "logs/access_log" combined
</IfModule>

虛擬機器配置

<VirtualHost *:60081>
    ServerAdmin [email protected].net
    ServerName test.test.net
    DocumentRoot /home/w/html/test
    ErrorLog "/home/w/html/test/test.test.net-error_log"
    CustomLog "/home/w/html/test/test.test.net-access_log" combined
</VirtualHost>

訪問頁面返回日誌

閘道器IP:192.168.15.100

客戶訪問IP:192.168.15.101

192.168.15.100 ClinetIp:192.168.15.101 - - [12/Feb/2018:21:39:05 -0500] "GET / HTTP/1.0" 200 17 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6"

Apache日誌格式

日誌格式

Apache日誌配置檔案中定義了兩種列印格式,分別為combined格式和common格式。

combined格式:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

common格式:

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

宣告使用了combined日誌格式和寫入的檔名。

CustomLog "/var/log/apache2/access_log" combined

欄位說明

欄位格式含義
%aremote_ip
%Alocal_ip
%Bsize
%bsize
%Dtime_taken_ms
%hremote_host
%Hprotocol
%lident
%mmethod
%pport
%Ppid
“%q”url_query
“%r”request
%sstatus
%>sstatus
%ttime
%Ttime_taken
%uremote_user
%Uurl_stem
%vserver_name
%Vcanonical_name
%Ibytes_received
%Obytes_sent
“%{User-Agent}i”user_agent
“%{Referer}i”referer

日誌樣例

192.168.1.2 - - [02/Feb/2016:17:44:13 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "http://localhost/x1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36"

相關推薦

Apache日誌獲取前端Nginx反向代理真實IP地址

php檢視客戶訪問真實地址程式碼<?php function real_ip() { static $realip = NULL; if ($realip !== NULL) { return $realip; }

Apache獲取前端Nginx反向代理真實IP地址 (原創貼-轉載請註明出處)

====================說在前面的話==================== 環境:前段Nginx是反向代理伺服器;後端是Apache是WEB專案伺服器 目的:讓後端Apapche獲取訪問者真實IP地址,而非是反向代理地址 ==================

通過Nginx反向代理實現IP分流

通過Nginx做反向代理來實現分流,以減輕伺服器的負載和壓力是比較常見的一種伺服器部署架構。本文將分享一個如何根據來路IP來進行分流的方法。 根據特定IP來實現分流 將IP地址的最後一段最後一位為0或2或6的轉發至hi-linux-01.com來執行,否則轉發至hi-linux-02.com來執行。

nginx反向代理應用程式如何獲取客戶真實IP

nginx反向代理後應用程式如何獲取客戶端真實IP? 2017年10月30日 10:32:03 it_0101 閱讀數:6200 標籤: tomcatjavawebnginx應用伺服器servlet 更多 個人分類: 學習經驗伺服器 版權宣告

nginx反向代理走http+https通道,走http通道,導致前臺獲取不到後臺https內容的處理

前言: 目前我公司使用的伺服器架構為前臺為nginx反向代理,後端為單臺web伺服器或者叢集,目前的配置是這樣的,nginx反向代理配置了,http和https通道,但是後端伺服器配置為http通道。

.Net Core/Framework之Nginx反向代理獲取客戶IP等數據探索

aspnet keep 關於 asp off seh time 失誤 war   公司項目最近出現獲取訪問域名、端口、IP錯誤現象,通過排查發現, 之前項目一直通過Nginx自定義Headers信息來獲取,但最近運維人員失誤操作造成自定義Header信息丟失,造成項目拿不到

nginx反向代理獲取不到客戶真實ip地址

location / {    proxy_pass http://127.0.0.1:10678;    proxy_set_header Host $host; //加入下面配置         proxy_set_header X-Real-IP $remo

Nginx反向代理時tomcat日誌獲取真實IP

director div tom log sna tomcat XML localhost 如果 對於nginx+tomcat這種架構,如果後端tomcat配置保持默認,那麽tomcat的訪問日誌裏,記錄的就是前端nginx的IP地址,而不是真實的訪問IP。因此,需

nginx反向代理web服務器記錄客戶ip地址

spa gin nginx反向代理 lan form https 記錄 客戶端訪問 use nginx在做反向代理的時候,後端的nginx web服務器log中記錄的地址都是反向代理服務器的地址,無法查看客戶端訪問的真實ip。 在反向代理服務器的nginx.conf配置文件

JAVA中經過nginx反向代理獲取客戶ip獲取相關坐標等信息

IT urn 輸出 代理 nginx 高德 AD color javascrip 關於搜狐新浪ip庫查詢接口的使用 直接輸出訪客ip及所在城市: <script src="http://pv.sohu.com/cityjson?ie=utf-8" >&l

Nginx反向代理服務采用連接池參數分析,長連接減少TIME_WAIT

數據 模型 業務需求 技術 nginx服務器 程序 創建 反向代理 還需 前面已經講過,在使用locust直連後端服務器時,可以通過設置HTTP頭部為keep-alive,並在客戶端斷開連接,減少服務器的連接壓力。因為由客戶端斷開連接,客戶端的連接會變為TIME_WAIT狀

群集架構篇——nginx反向代理+keepalived雙機熱備+tomcat伺服器池+資料庫

群集架構篇——nginx反向代理+keepalived雙機熱備+tomcat伺服器池+後端資料庫 實驗所需   兩臺nginx都佈置了keepalived   漂移地址 192.168.30.100  Nginx    

群集架構篇 ——nginx反向代理+keepalived雙機熱備+tomcat伺服器池+資料庫

首先準備好兩臺nginx,兩臺tomcat,一臺mysql資料庫,如下NginxIP地址:192.168.20.39(lvs01)192.168.20.40(lvs02)漂移地址:192.168.20.66TomcatIP地址:192.168.20.41(TM01)192.168.20.42(TM02)Mys

群集架構篇 ?——nginx反向代理+keepalived雙機熱備+tomcat服務器池+數據庫

rest ipaddress base oot kill tomcat8 orm caf 1.4 首先準備好兩臺nginx,兩臺tomcat,一臺mysql數據庫,如下NginxIP地址:192.168.20.39(lvs01)192.168.20.40(lvs02)漂移地

群集架構篇——nginx反向代理+keepalived雙機熱備+tomcat服務器池+數據庫

virtual def set defs efault ddd .tar.gz web-inf 執行權限 一、系統環境 1、2臺CentOS 7作為nginx服務器綁定同一塊虛擬網卡:vnet1對應的IP分別為:192.168.80.100192.168.80.1102、2

Nginx反向代理,tomcat獲取真實IP的方法

Nginx 修改nginx.conf檔案 location / {       proxy_pass http://balance;       proxy_redirect off;  &nbs

Nginx反向代理多個Tomcat、Nginx+PHP伺服器(Nginx代理和負載功能)

需求分析:     現有3個二級域名,一個IP地址,要實現將這3個域名通過1個IP地址對外提供web服務,可使用IP+埠的方式對域名進行解析,且互不影響。如: Domain1:www.huangming.org  

微信公眾號開發時,前端傳送請求獲取signature和openID時出現跨域錯誤的解決辦法。

微信公眾平臺開發用了前端和後端兩個人,前期開發階段前端就很容易遇到跨域問題,今天在前端向後端傳送請求獲取signature,但是前段老是報錯跨域,接受後端的返回資料失敗怎麼辦呢? 其實很簡單,後端最後返回簽名的程式碼本來是這樣的: System.out.println("

nginx反向代理,jsp頁面request.getServerPort()獲取得埠號總是80解決方案

而通過nginx反向代理去訪問,瀏覽中檢視頁面原始碼,獲取得埠號總是80,如圖,該怎麼解決? 分析原因及解決方案: nginx預設反向的埠為80,因此存在被代理後的埠為80的問題,這就導致訪

nginx反向代理-伺服器組設定

nginx伺服器的反向代理時其最常用的重要功能之一,在實際工作中應用廣泛,涉及的配置指令也比較多。下面會盡量詳細地介紹對應的指令,及其使用狀態。 反向代理一般是網際網路需要向內網拉取資源,比如訪問一個web網站時,網際網路應用通過一個代理伺服器到後面真實的web伺服器拉取應用所需的資料。 nginx伺服器