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