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上访问一级代理,再访问二级代理,再访问三级代理,再访问服务端

nginx 错误日志不显示 nginx错误日志路径_nginx

浏览器访问: www.proxy.com 

nginx 错误日志不显示 nginx错误日志路径_nginx 错误日志不显示_02

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
上面对应分别是日志格式设置的对应规则:
    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:
$http_x_real_ip:
$remote_addr: 
#当有代理时候,是和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