Nginx配置

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;
 }

漏桶算法和令牌桶算法

露桶:如果是请求限流,请求先进⼊到漏桶⾥,漏桶以固定的速度出⽔,也就是处理请求,当⽔加的过快也就是请求过多,桶就会直接溢出,也就是请求被丢弃拒绝了,所以漏桶算法能强⾏限制数据的传输速率或请求数
在这里插入图片描述
令牌桶算法:只要突发并发量不⾼于桶⾥⾯存储的令牌数据,就可以充分利⽤好机器⽹络资源。
如果桶内令牌数量⼩于被消耗的量,则产⽣的令牌的速度就是均匀处理请求的速度,可以限流
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andrew0219

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值