nginx的错误日志

nginx的错误日志

nginx错误日志平时不用太关注,但是一旦出了问题,就需要借助错误日志来判断问题所在。

1).错误日志配置参数格式:error_log /path/to/log level;

2).nginx错误日志级别:

常见的错误日志级别有debug | info | notice | warn | error | crit | alert | emerg

级别越高记录的信息越少,如果不定义,默认级别为error.它可以配置在main、http、server、location段里。

如果在配置文件中定义了两个error_log,在同一个配置段里的话会产生冲突,所以同一个段里只允许配置一个error_log。但是,在不同的配置段中出现是没问题的。

3).nginx错误日志示例

error_log  /var/log/nginx/error.log crit;

4).如果要想彻底关闭error_log,需要这样配置

error_log /dev/null;

注意:

当主配置文件和虚拟主机配置文件中同时定义了error日志后,如果只针对本虚拟机主机访问的错误日志,只能是虚拟机主机配置文件定义的错误日志生效,主配置文件里定义的错误日志不起作用。

27.nginx访问日志格式和做web服务时候,配置记录真正客户端的访问ip和代理服务器的ip

配置示例:

a).搭建nginx的web服务(192.168.171.132:80端口)并设置访问日志格式,记录真正客户端ip和代理服务ip

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

http {

...

     #access_log  logs/access.log  main;    主配置文件注释,以防止影响

    include vhost/*.conf;      #添加

}

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf     #主配置文件中释放并修改自定义格式的访问日志格式

    log_format  main  '$http_x_forwarded_for|$http_x_real_ip|$remote_addr  $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer"'

                      '"$http_user_agent" ';

    access_log  logs/access.log  main;

[root@localhost ~]# vim /usr/local/nginx/conf/vhost/www.1.conf

server{

    listen 80;

    server_name www.1.com;

    root /data/wwwroot/www.1.com;

    index index.html;

}

[root@localhost ~]# cat /data/wwwroot/www.1.com/index.html

index

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

[root@localhost ~]# > /usr/local/nginx/logs/access.log

客户端:192.168.171.1直接访问web服务:

[root@localhost ~]# cat /etc/hosts

192.168.171.132 www.1.com

[root@localhost ~]# curl www.1.com

index

服务器端查看日志:

[root@localhost ~]# cat /usr/local/nginx/logs/access.log

192.168.171.1 - - [26/Dec/2020:20:01:48 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"

b).在192.168.171.131服务机器上再搭建三级nginx反向代理

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

    server{

        listen 80;

        server_name www.proxy3.com;

        location /

        {

            #proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_pass http://192.168.171.132:80/;

        }

    }

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

c).在192.168.171.130搭建二级nginx代理

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

    server{

        listen 80;

        server_name www.proxy2.com;

        location /

        {

            #proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_pass http://192.168.171.131:80/;

        }

    }

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

d).在192.168.171.129搭建一级nginx代理

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

    server{

        listen 80;

        server_name www.proxy.com;

        location /

        {

            proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_pass http://192.168.171.130:80/;

        }

    }

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

e).windows客户端192.168.171.1上访问一级代理,再访问二级代理,再访问三级代理,再访问服务端

浏览器访问: www.proxy.com 

d).nginx的web服务查看访问日志:

[root@localhost ~]# cat /usr/local/nginx/logs/access.log

192.168.171.1, 192.168.171.129, 192.168.171.130|192.168.171.1|192.168.171.131  - [26/Dec/2020:21:41:50 +0800] "GET / HTTP/1.0" 304 0 "-""Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"

上面对应分别是日志格式设置的对应规则:

    log_format  main  '$http_x_forwarded_for|$http_x_real_ip|$remote_addr  $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer"'

                      '"$http_user_agent" ';

$http_x_forwarded_for:  #显然记录了代理过程,其中192.168.171.1是windows客户端ip

$http_x_real_ip:         #记录真实客户端的ip,windows客户端ip

$remote_addr:           #当无代理时候,是直接真实客户端的ip(windows的ip:192.168.171.1),

#当有代理时候,是和web服务直连的最近的代理服务器的ip(192.168.171.131)

nginx的自带变量 $remote_addr 代表客户端的IP

remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP。

参考链接:

https://github.com/aminglinux/nginx/blob/master/log/format.md

https://www.cnblogs.com/diaosir/p/6890825.html

nginx $remote_addr 详解_weixin_33682790的博客-CSDN博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维实战课程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值