tengine & waf:
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
cd /etc/yum.repos.d/
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
mv CentOS6-Base-163.repo CentOS-Base.repo
yum makecache
yum -y update
cd /etc/pki/rpm-gpg/
wget http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-6
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
cd ~
yum install -y readline-devel pcre-devel openssl-devel
yum install -y gcc
unzip ngx.zip
cd ngx
chmod -R +x *
yum install pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-devel
./configure --prefix=/usr/local/nginx --with-luajit --with-http_stub_status_module --with-pcre --with-pcre-jit --without-http_redis2_module --with-http_iconv_module
gmake && gmake install
ln -s /usr/local/nginx/ /usr/local/nginx
測試openresty安裝
# vim /usr/local/nginx/nginx/conf/nginx.conf
server {
location /hello {
default_type text/html;
content_by_lua_block {
ngx.say("HelloWorld")
}
}
}
# /usr/local/nginx/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/nginx/conf/nginx.conf test is successful
# /usr/local/nginx/nginx/sbin/nginx
Hello World
# curl http://127.0.0.1/hello
HelloWorld
waf 部署測試:
上傳lua編寫的waf到conf目錄
#cp -a ./waf/waf /usr/local/nginx/nginx/conf/
修改Nginx的配置文件,加入以下配置。注意路徑,同時WAF日志默認存放在/tmp/日期_waf.log
在nginx.conf的http段添加
lua_shared_dict limit 50m;
lua_package_path "/usr/local/nginx/nginx/conf/waf/?.lua";
init_by_lua_file "/usr/local/nginx/nginx/conf/waf/init.lua";
access_by_lua_file "/usr/local/nginx/nginx/conf/waf/access.lua";
配置nginx支持php
# vim /usr/local/nginx/nginx/conf/nginx.conf
'''
修改nginx運行賬號為:nginx組的nginx用戶----這段是注釋
user nginx nginx;
'''
vi /etc/nginx/conf.d/default.conf
#增加index.php
index index.php index.html index.htm;
取消FastCGI server部分location的注釋,并要注意fastcgi_param行的參數,改為$document_root$fastcgi_script_name,或者使用絕對路徑
# /usr/local/nginx/nginx/sbin/nginx -t
# /usr/local/nginx/nginx/sbin/nginx
yum -y install zlib zlib-devel
yum install -y php php-mysql php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt libmcrypt-devel php-fpm
#啟動php-fpm
/etc/rc.d/init.d/php-fpm start
設置自動啟動
chkconfig php-fpm on
在/usr/local/nginx/nginx/html目錄編寫:
vim index.php
<?php
phpinfo();
?>
#/usr/local/nginx/nginx/sbin/nginx -s reload
測試訪問:http://waf.com/index.php?id=../../../../etc/passwd
提示有網站防火墻,則成功!
設置nginx開機啟動:
vi /etc/init.d/nginx (輸入下面的代碼)
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
# It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/nginx/sbin/nginx
nginx_config=/usr/local/nginx/nginx/conf/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL
chmod a+x /etc/init.d/nginx (a+x ==> all user can execute 所有用戶可執行)
vi /etc/rc.local
加入一行 /etc/init.d/nginx start 保存并退出,下次重啟會生效。
安裝java+kafka:
下載java1.7,然后解壓
tar zxvf jdk-7u25-linux-x64.tar.gz
mv jdk1.7.0_25 /usr/local/java
vim /etc/profile
export JAVA_HOME=/usr/local/java/
export JRE_HOME=$JAVA_HOME/jre/
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile
java --version
wget https://github.com/doujiang24/lua-resty-kafka/archive/master.zip
unzip master.zip
wget http://archive.apache.org/dist/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz
注意,kafka_2.11-0.8.2.1.tgz版本是已經編譯好的版本,解壓就能使用。
tar -xzvf kafka_2.11-0.8.2.1.tgz #解壓
mv kafka_2.11-0.8.2.1 /usr/local/kafka #移動到安裝目錄
2、配置kafka
mkdir /usr/local/kafka/log/kafka #創建kafka日志目錄
cd /usr/local/kafka/config #進入配置目錄
vi server.properties #編輯修改相應的參數
broker.id=0
port=9092 #端口號
host.name=192.168.0.11 #服務器IP地址,修改為自己的服務器IP
log.dirs=/usr/local/kafka/log/kafka #日志存放路徑,上面創建的目錄
zookeeper.connect=localhost:2181 #zookeeper地址和端口,單機配置部署,localhost:2181
:wq! #保存退出
3、配置zookeeper
mkdir /usr/local/kafka/zookeeper #創建zookeeper目錄
mkdir /usr/local/kafka/log/zookeeper #創建zookeeper日志目錄
cd /usr/local/kafka/config #進入配置目錄
vi zookeeper.properties #編輯修改相應的參數
dataDir=/usr/local/kafka/zookeeper #zookeeper數據目錄
dataLogDir=/usr/local/kafka/log/zookeeper #zookeeper日志目錄
clientPort=2181
maxClientCnxns=100
tickTime=2000
initLimit=10
syncLimit=5
:wq! #保存退出
四、創建啟動、關閉kafka腳本
cd /usr/local/kafka
#創建啟動腳本
vi kafkastart.sh #編輯,添加以下代碼
#!/bin/sh
#啟動zookeeper
/usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties &
sleep 3 #等3秒后執行
#啟動kafka
/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties &
:wq! #保存退出
#創建關閉腳本
vi kafkastop.sh #編輯,添加以下代碼
#!/bin/sh
#關閉zookeeper
/usr/local/kafka/bin/zookeeper-server-stop.sh /usr/local/kafka/config/zookeeper.properties &
sleep 3 #等3秒后執行
#關閉kafka
/usr/local/kafka/bin/kafka-server-stop.sh /usr/local/kafka/config/server.properties &
:wq! #保存退出
#添加腳本執行權限
chmod +x kafkastart.sh
chmod +x kafkastop.sh
五、設置腳本開機自動執行
vi /etc/rc.d/rc.local #編輯,在最后添加一行
sh /usr/local/kafka/kafkastart.sh & #設置開機自動在后臺運行腳本
:wq! #保存退出
sh /usr/local/kafka/kafkastart.sh #啟動kafka
sh /usr/local/kafka/kafkastop.sh #關閉kafka
至此,Linux下Kafka單機安裝配置完成。
擴展閱讀:
Kafka創建topic
/usr/local/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
最簡單的使用方式是從Github上下載一個最新的KafkaOffsetMonitor-assembly-0.2.1.jar,上傳到某服務器上,然后執行一句命令就可以運行起來。
java -cp KafkaOffsetMonitor-assembly-0.2.0.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb --zk m000:2181,m001:2181,m002:2181 --port 8088 --refresh 10.seconds --retain 2.days
在消費kafka的時候需要配置hosts信息主機名對應本地ip的映射,如下:
192.168.1.192 Bingscan
這樣的話,在執行kafka消費的時候才不會報錯:
sh /usr/local/kafka/bin/kafka-console-consumer.sh --zookeeper 192.168.1.192:2181 --topic waf_logger --from-beginning
安裝mysql
第1步、yum安裝mysql
[root@stonex ~]# yum -y install mysql-server
安裝結果:
Installed:
mysql-server.x86_64 0:5.1.73-3.el6_5
Dependency Installed:
mysql.x86_64 0:5.1.73-3.el6_5 perl-DBD-MySQL.x86_64 0:4.013-3.el6 perl-DBI.x86_64 0:1.609-4.el6
第2步、設置開機啟動
[root@stonex ~]# chkconfig mysqld on
第3步、啟動MySql服務
[root@stonex ~]# service mysqld start
第4步、設置MySQL的root用戶設置密碼
[root@stonex ~]# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
...... 省略了一些行
mysql> select user,host,password from mysql.user;
查詢用戶的密碼,都為空,用下面的命令設置root的密碼為root
mysql> set password for root@localhost=password('root');
mysql> exit
第5步、用新密碼登陸
[root@stonex ~]# mysql -u root -p
第6步、基本命令
show databases; //查看系統已存在的數據庫
use databasesname; //選擇需要使用的數據庫
drop database databasename; //刪除選定的數據庫
exit //退出數據庫的連接
create database test01; //建立名為test的數據庫
show tables; // 列出當前數據庫下的表
其他基本的增刪改查使用標準SQL即可
第7步、開放遠程登錄權限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;
關于lua+nginx全局變量和共享內存的區別;
共享內存:是在nginx上啟動時加載開辟的內存空間,用于數據交換存儲,動態,可以自由增加刪除,并且在所有worker間共享;
全局變量:僅限在lua內部的機制,在Lua VM中開辟的全局變量,僅限在lua層使用,不會共享到worker中;
+++++++
先知道:nginx在啟動后,在unix系統中會以daemon的方式在后臺運行,后臺進程包含一個master進程和多個worker進程。
+++++++
關于優先級:結論是,在實際的情況下,共享內存shared會先于全局變量創建,并且覆蓋到所有的worker里面,也就是在每次reload的時候,先以daemon啟動后,在創建master和worker的同時就創建了shared,然后才到lua的vm創建,最后才出現全局變量。理論上優先級共享緩存比lua全局變量要優先。
關于性能問題:結論是,在實際情況下,nginx的共享內存shared會更快些,因為直接轉成buffer,在請求的生命周期里面,會優先訪問shared再到lua,訪問lua的時候還得過一道VM(lua的虛擬機)。
++++++++++++