目录
linux启动java程序方式
首先进如存放.jar的文件夹
直接启动
java -jar demo-1.jar
守护进程方式
nohup java -jar demo-1.jar &
查看启动日志方式
tail -f nohup.out
nginx实现简单负载均衡
upstream suibianquming {
server 127 .0.0.1:8080 weight=1;设置权重
server 127 .0.0.1:8081 weight=1;
}
server {
listen 80;
server name localhost;
#charset koi8-r;
#access_ log logs/host.access. log main;
location / {
root html;
index index.html index.htm;
proxy_ pass http://suibianquming;//这里和上面upstream suibianquming名字对应
}
}
在访问80端口之后upstream suibianquming 实现每次点击跳转到不同服务器实现负载均衡
负载均衡策略
轮询策略
默认是轮询:就是每个server轮流来
如果设置了weight的权重,就根据权重分配流量
ip_hash(固定分发)
这样每个ip会固定一个页面
upstream lbs {
ip_hash;
server xxx.xxx.xxx.xxx:8080;
server xxx.xxx.xxx.xxx:8081;
}
down(下线,不参与负载)
upstream lbs {
这时8080端口就不参与负载均衡了
server xxx.xxx.xxx.xxx:8080 down;
server xxx.xxx.xxx.xxx:8081;
}
backup 备用机策略
当所有非backup(主机)挂了的时候 backup(备用金)自动变成主机维持稳定
upstream lbs {
正常情况下只会运行8080端口,当8080挂时会自动运行8081端口
server xxx.xxx.xxx.xxx:8080;
server xxx.xxx.xxx.xxx:8081 backup;
}
节点可用性探测
max_fails 允许请求失败的次数,默认为1.当超过最⼤次数时就不会请求
fail_timeout : max_fails次失败后,暂停的时间,默认:fail_timeout为10s
下面意思就是六十秒内失败两次就不会请求,六十秒后再请求
upstream lbs {
server xxx.xxx.xxx.xxx:8080 max_fails=2 fail_timeout=60s;
server xxx.xxx.xxx.xxx:8081 max_fails=2 fail_timeout=60s;
}
location / {
root html;
index index.html index.htm;
//这里和上面upstream lbs 名字对应
proxy_ pass http://lbs ;
//下面表示500和404算失败的尝试,注意:404默认不算失败
proxy_next_upstream error timeout http_500 http_404;
}
深入配置
返回固定数据
这样只要是错误码就会全部返回200,且以json格式自己定义好的错误
location / {
proxy_pass http://lbs;
proxy_redirect default;
# 存放⽤户的真实ip
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#开启错误拦截配置,⼀定要开启
proxy_intercept_errors on;
}
# 不加 =200,则返回的就是原先的http错误码;配上后如果出现500等错误都返回给⽤户200状态,并跳转⾄/default_api
error_page 404 500 502 503 504 =200 /default_api;
location = /default_api {
default_type application/json;
return 200 '{"code":"-1","msg":"invoke fail, not found "}';
}
Nginx封禁ip
首先进入nginx的conf目录下
touch(创建)blacklist.conf;
然后vim进入配置文件 deny xxx.xx.x.x;
单独⽹站屏蔽IP的⽅法,把include blacklist.conf; 放到⽹址对应的server{}语句块,虚拟主机
所有⽹站屏蔽IP的⽅法,把include blacklist.conf; 放到http{}语句块
Nginx允许跨域
location / {
add_header 'Access-Control-AllowOrigin' $http_origin;
add_header 'Access-Control-AllowCredentials' 'true';
add_header 'Access-Control-AllowHeaders' 'DNT,web-token,apptoken,Authorization,Accept,Origin,KeepAlive,User-Agent,X-Mx-ReqToken,X-DataType,X-Auth-Token,X-Requested-With,IfModified-Since,Cache-Control,ContentType,Range';
add_header Access-Control-AllowMethods 'GET,POST,OPTIONS';
#如果预检请求则返回成功,不需要转发到后端
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age'1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 200;
}
}
rewrite实现重定向
防盗链,网站更换域名之后跳转到新域名
语法 rewrite regex replacement[flag]
在location里加
rewrite ^/(.*) https://xxx.net/$1 permanent
permanent 表示永久
# 这是⼀个正则表达式,匹配完整的域名和后⾯的路径地址
# replacement部分是https://xxx.net/$1,
$1是取⾃regex部分()⾥的内容
Nginx支持websocket
server{
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
nginx性能优化
高并发配置之服务器缓存前置
注意:
nginx缓存过期影响的优先级进⾏排序为:inactvie >源服务器端Expires/max age > proxy_cache_valid
如果出现 Permission denied 修改nginx.conf,将第⼀⾏修改为 user root
首先配置nginx,前面配置过可以把旧的nginx改个名,然后复制nginx.cong.defalt并取名nginx.conf 这时候就得到了一个全新的nginx配置文件
upstream lbs {
server 172.18.17.215:8080 max_fails=2 fail_timeout=60s;
}
server {
listen 80;
server_name nginxtest1.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://lbs;
}
配置缓存并开启缓存
proxy_cache_path /root/cache levels=1:2 keys_zone=xd_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
listen 80;
server_name nginxtest1.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://lbs;
proxy_cache xd_cache;
proxy_cache_valid 200 304 10m;
proxy_cache_valid 404 1m;
proxy_cache_key $host$uri$is_args$args;
add_header Nginx-Cache "$upstream_cache_status";
}
这时候每次刷新,在xshell不一定会有输出因为有时候走的是缓存
静态资源压缩
压缩配置,配置在upstream上
#开启gzip,减少我们发送的数据量
gzip on;
gzip_min_length 1k;
#4个单位为16k的内存作为压缩结果流缓存
gzip_buffers 4 16k;
#gzip压缩⽐,可在1~9中设置,1压缩⽐最⼩,速度最快,9压缩⽐最⼤,速度最慢,消耗CPU
gzip_comp_level 4;
#压缩的类型
gzip_types application/javascript text/plain text/css application/json application/xml text/javascript;
#给代理服务器⽤的,有的浏览器⽀持压缩,有的不⽀持,所
以避免浪费不⽀持的也压缩,所以根据客户端的HTTP头来判
断,是否需要压缩
gzip_vary on;
#禁⽤IE6以下的gzip压缩,IE某些版本对gzip的压缩⽀持很不好
gzip_disable "MSIE [1-6].";
存放文件的路径
location /static {
alias /usr/local/software/static;
}
这时候访问文件路径(nginxtest1.com/static/xx.js)就会自动压缩了;
OpenResty + Lua
OpenResty + Lua相关环境准备
参考网站: http://openresty.org/en/linux-packages.html#centos
# add the yum repo: 安装,如果失败 yum install wget
wget https://openresty.org/package/centos/openresty.repo
重命名
sudo mv openresty.repo /etc/yum.repos.d/
# update the yum index: 更新检查
sudo yum check-update
安装openresty
sudo yum install openresty
安装命令行工具
sudo yum install openresty-resty
# 列出所有 openresty 仓库⾥的软件包
sudo yum --disablerepo="*" --enablerepo="openresty" list available
第一个例子
配置conf
# 配置请求的路由
location /{
content_by_lua_block{
ngx.say("hello world");
}
}
启动nginx后
输入 curl 172.0.0.1 如果输出hello world那么启动成功
Nginx+OpenResty +Lua开发内网访问限制
配置conf
upstream lbs {
server 172.18.17.215:8080 max_fails=2 fail_timeout=60s;
}
lua_code_cache off;
lua_package_path "$prefix/lualib/?.lua;;";
lua_package_cpath "$prefix/lualib/?.so;;";
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
access_by_lua_file lua/black_ip_list.lua;
proxy_pass http://lbs;
}
进入nginx mkdir lua
进入lua touch black_ip_list.lua
编辑 vim black_ip_list.lua 输入下面的代码
local black_ips = {["127.0.0.1"]=true}
local ip = ngx.var.remote_addr
if true == black_ips[ip] then
ngx.exit(ngx.HTTP_FORBIDDEN)
return;
end
这是curl 127.0.0.1是无法访问因为被拉近黑名单
Nginx+OpenResty实现资源下载限速
location /download {
access_by_lua_block {
#最大下载速度
ngx.var.limit_rate = "300K"
}
# 下载路径
alias /usr/local/software/app;
}
漏桶算法和令牌桶算法
露桶:如果是请求限流,请求先进⼊到漏桶⾥,漏桶以固定的速度出⽔,也就是处理请求,当⽔加的过快也就是请求过多,桶就会直接溢出,也就是请求被丢弃拒绝了,所以漏桶算法能强⾏限制数据的传输速率或请求数
令牌桶算法:只要突发并发量不⾼于桶⾥⾯存储的令牌数据,就可以充分利⽤好机器⽹络资源。
如果桶内令牌数量⼩于被消耗的量,则产⽣的令牌的速度就是均匀处理请求的速度,可以限流