猫不急

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

参考文档:

https://blog.csdn.net/loongshawn/article/details/78199977  nginx不转发http header问题解决
https://blog.csdn.net/shootyou/article/details/6335301 使用Nginx转发真实头信息
https://www.jianshu.com/p/6df4092a9a69 nginx处理长连接请求,解决gateway timeout错误

 

系统依赖在线安装

yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

 

获取nginx安装包(http://nginx.org/en/download.html)

wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar zxvf nginx-1.16.1.tar.gz tar
cd nginx-1.16.1/
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_sub_module --with-http_realip_module
make && make install

需要添加的模块:

--with-http_ssl_module(ssl模块) 

--with-http_sub_module(内容替换)

--with-http_realip_module(获取真实IP)

 

配置nginx系统服务

vim /usr/lib/systemd/system/nginx.service

[Unit]
Description=Nginx
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
WorkingDirectory=/usr/local/nginx
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

 

相关命令

# 更新系统服务
systemctl daemon-reload
# 添加开机自启动
systemctl enable nginx
# 启动nginx
systemctl start nginx
# 关闭nginx
systemctl stop nginx
# 停止开机自启动
systemctl disable nginx
# 查看状态
systemctl status nginx
# 重启服务
systemctl restart nginx
# 重新加载配置文件(注意:配置文件出错时,刷新不会成功,需要关注log文件输出)
/usr/local/nginx/sbin/nginx -s reload

 

 

配置nginx主配置文件中增加配置引用,使用配置引入的好处是,避免多个配置混杂。也便于配置切换。

Vi /usr/local/nginx/conf/nginx.conf

# 修改用户,否则日志无法写入硬盘
user root
# 修改处理线程数,提升性能,最好与服务器CPU数量一致
worker_processes 2;

http {
   ……
   ……
server {
listen       80;
……
}
#注意添加位置
include conf.d/*.conf;
}

 

在nginx的conf目录下建立conf.d目录

conf/conf.d/test-nginx.conf

# 分流配置,根据转发地址修改
upstream asnp_proxy {
#    如果失败两次,则60秒后重试
#    server 172.21.32.32:5888 max_fails=2 fail_timeout=60s;
#    server 172.21.32.32:6888 max_fails=2 fail_timeout=60s;
     server 172.21.100.72:8080;
}


#日志格式设定,无需修改
#$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
#$remote_user:用来记录客户端用户名称;
#$time_local: 用来记录访问时间与时区;
#$request: 用来记录请求的url与http协议;
#$status: 用来记录请求状态;成功是200,错误是500
#$body_bytes_sent :记录发送给客户端主体内容大小;
#$http_referer:用来记录从那个页面链接访问过来的;
#$http_user_agent:记录客户浏览器的相关信息;

#$request_time        : 整个请求的总时间
#$upstream_response_time:请求过程中,upstream响应时间
#$bytes_sent :客户端发送的字节数
#$request_length:客户端请求的长度
#$upstream_status:upstream状态
#$upstream_addr   :后台upstream的地址,即真正提供服务的主机地址


log_format  asnp_main '{ "@timestamp": "$time_iso8601", '
                         '"access_time": "$time_iso8601", '
                         '"remote_addr": "$remote_addr", '
                         '"remote_user": "$remote_user", '
                         '"adt_host": "$host", '
                         '"request": "$request", '
                         '"uri": "$uri", '
                         '"request_method": "$request_method", '
                         '"status": "$status", '
                         '"request_time": "$request_time", '
                         '"upstream_response_time": "$upstream_response_time", '
                         '"request_length": "$request_length", '
                         '"bytes_sent": "$bytes_sent", '
                         '"upstream_addr": "$upstream_addr", '
                         '"upstream_status": "$upstream_status", '
                         '"http_referrer": "$http_referer", '
                         '"http_x_forwarded_for": "$http_x_forwarded_for", '
                         '"http_user_agent": "$http_user_agent" '
                         '}';

# 限流配置,如有限流需要则开启,开启后需要在loaction中增加对应配置
# limit_req_zone $uri zone=db_access:20m rate=1r/s;

     server {
        # 对外的代理端口,根据需要修改
        listen 80;
        # 代理服务器名称,填写本机IP即可
        server_name 172.18.100.72;

        # 日志配置,可以按各种频率输出,目前是按月,也可以按天
        if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") {
                        set $year $1;
                        set $month $2;
                        set $day $3;
                        set $hour $4;
                        set $minutes $5;
                        set $seconds $6;
        }

        # 日志输出路径配置
        access_log logs/asnp_access-$year-$month.log asnp_main;
        error_log  logs/asnp_error.log;

        # 开放http访问
        location / {
                proxy_pass http://asnp_proxy/;

                # 设置IP
                proxy_set_header X-Real-IP $remote_addr;

                #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                # 连接后端服务器超时时间(秒)
                proxy_connect_timeout 30;

                # 将域名代理过去
                proxy_set_header Host $host:$server_port;

                real_ip_header    X-Forwarded-For;
                real_ip_recursive on;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;

                proxy_headers_hash_max_size 512;
                proxy_headers_hash_bucket_size 128;

        }
}

 

# 限流配置,如有限流需要则开启,开启后需要在loaction中增加对应配置
# limit_req_zone $uri zone=db_access:20m rate=1r/s;

http{
....

#       限流测试样例,指定url进行限流
#       location /http/mytest2 {
#                proxy_pass http://aesb_proxy/http/mytest2;
#                
#                # 选择前面的限流规则
#                limit_req zone=db_access burst=5;
#        }

}

 

 

 

创建一个数据库,编码选择UTF8MB4.数据库名任意,建议叫logstash。用于存储mysql日志。

DROP TABLE IF EXISTS `t_nginxlog`;
CREATE TABLE `t_nginxlog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `stand_time` timestamp NULL DEFAULT NULL,
  `access_time` timestamp NULL DEFAULT NULL,
  `remote_addr` varchar(50) DEFAULT NULL,
  `remote_user` varchar(50) DEFAULT NULL,
  `adt_host` varchar(50) DEFAULT NULL,
  `request` varchar(200) DEFAULT NULL,
  `uri` varchar(500) DEFAULT NULL,
  `request_method` varchar(20) DEFAULT NULL,
  `status` varchar(20) DEFAULT NULL,
  `request_time` varchar(20) DEFAULT NULL,
  `upstream_response_time` varchar(20) DEFAULT NULL,
  `request_length` varchar(20) DEFAULT NULL,
  `bytes_sent` varchar(20) DEFAULT NULL,
  `upstream_addr` varchar(50) DEFAULT NULL,
  `upstream_status` varchar(20) DEFAULT NULL,
  `http_referrer` varchar(255) DEFAULT NULL,
  `http_x_forwarded_for` varchar(500) DEFAULT NULL,
  `http_user_agent` varchar(500) DEFAULT NULL,
  `insert_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

 

 安装logstash进行日志采集(待续)

下载安装包

wget https://mirrors.huaweicloud.com/logstash/7.8.0/logstash-7.8.0.tar.gz

tar zxvf  logstash-7.8.0.tar.gz

# 指定jdbc扩展包,进行安装否则不能访问数据库,配置文件中需要指定jdbc驱动路径。
bin/logstash-plugin install file:///home/logstash-output-jdbc.zip

 

制作logstash日志采集任务文件

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
    file {
        path     => ["/usr/local/nginx/logs/asnp_access*.log"]
        start_position => "beginning"
        codec => "json"
    }
}

filter {
     date {
        match => [ "access_time", "YYYY-MM-dd'T'HH:mm:ssZ"]
        target => "access_time"
     }

     # add 8 hour
     ruby {
       code => "event.set('access_time', event.get('access_time').time.localtime + 8*60*60)"
     }

}

output {
    stdout {
    #  codec => json
      codec => rubydebug
    }
    jdbc
    {
       driver_jar_path => "/opt/logstash/mysql-connector-java-5.1.42.jar"
       driver_class => "com.mysql.jdbc.Driver"
       connection_string => "jdbc:mysql://172.18.100.70:3306/logstash?user=root&password=root&useUnicode=true&characterEncoding=UTF-8&useSSL=false"
       statement => [ "INSERT INTO t_nginxlog (stand_time,access_time,remote_addr,remote_user,adt_host,request,uri,request_method,status,request_time,upstream_response_time,request_length,bytes_sent,upstream_addr,upstream_status
,http_referrer,http_x_forwarded_for,http_user_agent) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)","@timestamp","access_time","remote_addr","remote_user","adt_host","request","uri","request_method","status","request_time","upstre
am_response_time","request_length","bytes_sent","upstream_addr","upstream_status","http_referrer","http_x_forwarded_for","http_user_agent"]}
}

 

启动logstash进行日志采集

# 后台启动,指定对应的配置文件
nohup ./logstash-7.8.0/bin/logstash -f asnp-log.conf --config.reload.automatic &

 

安装granafa

https://mirrors.huaweicloud.com/grafana/7.1.1/grafana-7.1.1.linux-amd64.tar.gz

直接解压启动即可,默认端口为3000,用户为admin/admin

 

posted on 2020-07-27 16:19  猫不急  阅读(233)  评论(0编辑  收藏  举报