nginx模块pagespeed安装

下载PageSpeed模块

下载pagespeed和psol:

https://github.com/pagespeed/ngx_pagespeed/archive/v[PageSpeed版本].zip

https://dl.google.com/dl/page-speed/psol/[PageSpeed版本]-x[系统位数].tar.gz

比如PageSpeed版本1.13.35.1-beta,相应的下载地址则为:
https://codeload.github.com/pagespeed/ngx_pagespeed/zip/v1.13.35.1-beta
https://dl.google.com/dl/page-speed/psol/1.13.35.1-x64.tar.gz

wget https://codeload.github.com/pagespeed/ngx_pagespeed/zip/v1.13.35.1-beta -O ngx_pagespeed-v1.13.35.1-beta.zip
unzip ngx_pagespeed-v1.13.35.1-beta.zip
cd ngx_pagespeed-v1.13.35.1-beta/
wget https://dl.google.com/dl/page-speed/psol/1.13.35.1-x64.tar.gz -O psol-1.13.35.1-x64.tar.gz
tar -xzvf psol-1.13.35.1-x64.tar.gz

下载Nginx

wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -xvzf nginx-1.13.7.tar.gz
cd nginx-1.13.7/

编译安装

./configure --add-module=/root/ngx_pagespeed-1.13.35.1-beta/ \
--with-cc-opt='-g -O2 -fPIE -fstack-protector-strong \
-Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' \
--with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' \
--prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log \
--lock-path=/var/lock/nginx.lock \
--pid-path=/run/nginx.pid \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-scgi-temp-path=/var/lib/nginx/scgi \
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
--with-debug \
--with-pcre-jit \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_auth_request_module \
--with-http_addition_module \
--with-http_dav_module \
--with-http_geoip_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_image_filter_module \
--with-http_v2_module \
--with-http_sub_module \
--with-http_xslt_module \
--with-stream \
--with-stream_ssl_module \
--with-mail \
--with-mail_ssl_module \
--with-threads

make
make install

测试

 

对Elasticsearch的Text字段分组查询

官方文档

ES默认不支持Text类型字段进行分组查询,将fielddata设置为true。

curl -XPUT '172.16.88.100:9200/capture-2017.06.19/_mapping/capture' -d'
{
  "properties": {
    "host": {
      "type": "text",
      "fielddata": true
    }
  }
}'

一道题说明java初始化顺序

之前,在公司内部给大家做了java培训后,要考一考大家,关于初始化方面,想了一个综合涵盖继承、静态等各个方面的代码。

题目

说出下面程序运行结果:

class Language {

	static {
		System.out.println("language static block");
	}

	{
		System.out.println("language block");
	}

	public Language() {
		System.out.println("language constructor");
	}

	public Language(String name) {
		System.out.println(name);
	}

}

public class Python extends Language {

	private String name;

	public Python(String name) {
		this.name = name;
		System.out.println("python constructor");
		System.out.println(this.name);
	}

	{
		System.out.println("python block");
	}

	static {
		System.out.println("python static block");
	}

	public static void main(String[] args) {
		new Python("hello python");
	}

答案

language static block
python static block
language block
language constructor
python block
python constructor
hello python

grok解析syslog异常_grokparsefailure

logstash的异常信息并不像elastichsearch那样可以打印出详细的java堆栈错误,方便出错后排查问题。

在使用logstash中遇到_grokparsefailure,实在是太难调试,只能一点点去试、去分析。

之前在解析一个标准的syslog日志竟然也出错。用的官方的标准的pattern。

下面这行日志grok解析失败了:

官方模版中的正则可以看出对于HOSTNAME的解析不支持"_";。

SYSLOGHOST %{IPORHOST}
IPORHOST (?:%{HOSTNAME}|%{IP})
HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b)

找到问题,解决就容易了,要么改主机名要么不用官方的pattern。

ps_office改为ps-office,一切ok了。

Logstash简介

官方文档
Logstash是一个接收,处理,转发日志的工具。包含input、filter、output三大组件。分别实现收集->过滤->输出三个功能。
每个组件下面都包含丰富的插件,下图列举一些常见的。

intput

主要负责从数据源接收数据。常见的如:

  • file:从文件系统中读取一个文件,类似UNIX命令"tail -0a"。
  • syslog:监听514端口,按照RFC3164标准解析日志数据。
  • redis:从redis服务器读取数据,支持channel(发布订阅)和list模式。redis一般在Logstash消费集群中作为"broker"角色,保存events队列共Logstash消费。

filter

主要承担对接收的数据解析、过滤。常用的有:

output

作为输出端,常用的有:

  • elasticsearch:输出到搜索引擎。
  • file:将数据保存到文件中。

codes

基于数据流的过滤器,它可以作为input,output的一部分配置。可以帮助你轻松的分割发送过来已经被序列化的数据。

  • json:使用json格式对数据进行编码/解码。
  • multiline:将汇多个事件中数据汇总为一个单一的行。比如java异常信息和堆栈信息。

插件安装

插件市场

./bin/logstash-plugin install logstash-output-elasticsearch

单机启动多个MySQL实例

一:利用mysql_install_db生成数据库

mysql_install_db --datadir=/var/db/my3307/data --user=mysql
mysql_install_db --datadir=/var/db/my3308/data --user=mysql

二:配置文件

vi /etc/my_multi.conf
[mysqld_multi]
[mysqld3307] 
server-id = 3307
datadir  = /var/db/my3307/data
socket = /var/db/my3307/mysql.sock
pid-file  = /var/db/my3307/mysqld.pid
log-bin	= /var/db/my3307/logs/mysql-bin.log
log-error = /var/db/my3307/logs/mysqld.log

[mysqld3308]
server-id = 3308
datadir   = /var/db/my3308/data
socket    = /var/db/my3308/mysql.sock
pid-file  = /var/db/my3308/mysqld.pid
log-bin   = /var/db/my3308/logs/mysql-bin.log
log-error = /var/db/my3308/logs/mysqld.log

三:启动

/usr/local/bin/mysqld_multi --defaults-extra-file=/etc/my_multi.cnf stop|start|report

遇到的问题:

FATAL ERROR: Could not find ./bin/my_print_defaults If you compiled from source, you need to run make install to copy the software into the correct location ready for operation. If you are using a binary release, you must either be at the top level of the extracted archive, or pass the basedir option

解决方案:

在/usr/local下执行或者指定basedir。

/usr/local/bin/mysql_install_db
--user=mysql
--basedir=/usr/local
--datadir=/var/db/my3307/data
--defaults-file=/etc/my.cnf

通过nginx去掉codeIgniter框架的URL中的/index.php/

.htaccess为空

不需要再做rewrite处理。

CI配置

application/config/config.php

$config['uri_protocol'] = 'REQUEST_URI';

nginx配置

server {
    listen 80;
    server_name 127.0.0.1;
    root /usr/local/******;
    index index.php index.html index.htm;
    rewrite_log on;

    location / {
        root /usr/local/******;
        index index.php index.html index.htm;
        try_files $uri $uri//index.php?$query_string;
    }

    location~\.php($ | /) {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_split_path_info ^ (.+\.php)(.*) $;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
    location~/\.ht {
        deny all;
    }
}