赞
踩
yum -y install wget gcc-c++ ncurses ncurses-devel cmake make perl bison openssl openssl-devel gcc* libxml2 libxml2-devel libjpeg* libpng* freetype* autoconf automake zlib* fiex* libxml* libmcrypt* libtool-ltdl-devel* libaio libiao-devel bzr libtool
wget https://www.openssl.org/source/openssl-1.0.2s.tar.gz
tar -zxvf openssl-1.0.2s.tar.gz
cd /usr/local/src/openssl-1.0.2s
./configure --prefix=/usr/local/openssl-1.0.2s
make
make install
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
tar -zxvf pcre-8.43.tar.gz
cd /usr/local/src/pcre-8.43
./configure --prefix=/usr/local/pcre-8.43
make
make install
wget https://sourceforge.net/projects/libpng/files/zlib/1.2.11/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd /usr/local/src/zlib-1.2.11
./configure --prefix=/usr/local/zlib-1.2.11
make
make install
wget https://nginx.org/download/nginx-1.17.2.tar.gz
tar -zxvf nginx-1.17.2.tar.gz
cd /usr/local/src/nginx-1.17.2
./configure --prefix=/usr/local/nginx-1.17.2 --with-openssl=/usr/local/src/openssl-1.0.2s --with-pcre=/usr/local/src/pcre-8.43 --with-zlib=/usr/local/src/zlib-1.2.11 --with-http_ssl_module
make
make install
http {
...
upstream servers {
# 配置轮询服务器和权重
server 192.168.6.66:6000 weight=1;
server 192.168.6.66:6001 weight=2;
}
server {
listen 80;
location / {
proxy_pass http://servers;
}
}
}
upstream servers {
server 192.168.6.66:6001 weight=1 max_fails=2 fail_timeout=60s;
server 192.168.6.66:6002 weight=2 max_fails=2 fail_timeout=60s;
}
limit_req_zone $binary_remote_addr zone=customelimit:10m rate=10r/s;
location / {
limit_req zone=customelimit burst=20 nodelay;
proxy_pass http://servers;
}
geo $limit {
default 1;
192.168.2.0/24 0;
}
map $limit $limit_key {
1 $binary_remote_addr;
0 "";
}
limit_req_zone $limit_key zone=customelimit:10m rate=1r/s;
location / {
limit_req zone=customelimit burst=1 nodelay;
proxy_pass http://servers;
}
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 2d;
}
# 缓存路径, inactive表示缓存的时间,到期之后将会将缓存清理
proxy_cache_path /data/cache/nginx/ levels=1:2 keys_zone=cache:512m inactive=1d max_size=8g;
location / {
location ~ \.(htm|html)?$ {
proxy_cache cache;
# 将该变量值做hash,作为key
proxy_cache_key $uri$is_args$args;
# HTTP响应头部可以看到X-Cache字段,内容可以有HIT,MISS,EXPIRES等等
add_header X-Cache $upstream_cache_status;
proxy_cache_valid 200 10m;
proxy_cache_valid any 1m;
proxy_pass http://servers;
proxy_redirect off;
}
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
root /data/webapps/edc;
expires 3d;
add_header Static Nginx_Proxy;
}
}
location / {
deny 192.168.1.1;
deny 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
yum install yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
yum install openresty
yum install openresty-resty
# 查看openresty是否安装成功
yum --disablerepo="*" --enablerepo="openresty" list available
# 运行openresty
service openresty start
lua_shared_dict ip_blacklist 1m;
server {
listen 80;
location / {
access_by_lua_file lua/ip_blackList.lua;
proxy_pass http://servers;
}
}
local redis_host = "192.168.1.132"
local redis_port = 6379
local redis_pwd = 123456
local redis_db = 2
-- 连接超时时间 ms
local redis_connection_timeout = 100
-- 设置黑名单键
local redis_key = "ip_blacklist"
-- 缓存查找时间 s
local cache_ttl = 60
-- Redis配置结束
local ip = ngx.var.remote_addr
local ip_blacklist = ngx.shared.ip_blacklist
local last_update_time = ip_blacklist:get("last_update_time")
-- 每次缓存查找时间之后从缓存Redis中更新黑名单ip_blackList
if last_update_time == nil or last_update_time < ( ngx.now() - cache_ttl ) then
local redis = require "resty.redis";
local red = redis:new();
redis:set_timeout(redis_connect_timeout);
local ok, err = red:connect(redis_host, redis_port);
if not ok then
ngx.log(ngx.ERR, "Redis connection error while connect:" .. err);
else
local ok, err = red:auth(redis_pwd)
if not ok then
ngx.log(ngx.ERR, "Redis password error while auth:" ... err);
else
local new_ip_blacklist, err = red:smembers(redis_key);
if err then
ngx.log(ngx.ERR, "Redis read error while retrieving ip_blacklist" ... err);
else
ngx.log(ngx.ERR, "Get data success:" .. new_ip_blacklist);
-- 使用更新的黑名单值new_ip_blacklist替换本地存储的黑名单值ip_blacklist
ip_blacklist:flush_all();
for index, banned_ip in ipairs(new_ip_blacklist) do
ip_blacklist:set(banned_ip, true);
end
-- 记录更新时间
ip_blacklist:set("last_update_time", ngx.now());
end
end
end
end
if ip_blacklist:get(ip) then
ngx.log(ngx.ERR, "Banned IP detected and refused access:" ... ip);
return ngx.exit(ngx.HTTP_FORBIDDEN);
end
upstream host1 {
server 192.168.2.46:2001 weight = 1;
server 192.168.2.46.2003 weight = 2;
}
upstream host2 {
server 192.168.1.155:1111 max_fails = 1 fail_timeout = 60;
}
upstream default {
server 192.168.1.153:1111 max_fails = 1 fail_timeout = 60;
}
map $COOKIE_version $group {
~*v1$ host1;
~*v2$ host2;
default default;
}
lua_shared_dict ip_blacklist 1m;
server {
listen 80;
# set $group "dafault";
# if ($http_cookie ~* "version=v1") {
# set $group host1;
# }
# if ($http_cookie ~* "version=v2") {
# set $group host2;
# }
location / {
access_by_lua_file lua/ip_blacklist.lua;
proxy_pass http://$group;
}
}
server {
listen 80;
set $group "dafault";
if ($remote_addr ~ "192.168.119.1") {
set $group host1;
}
if ($remote_addr ~ "192.168.119.2") {
set $group host2;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。