nginx进阶
1、解决跨域+防盗链
cors:cross-origin resource sharing
方法 jsonp、springboot Cors 、nginx
server {
listen 80;
server_name localhost;
#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
#对源站点验证 防盗链
valid_referers *.baidu.com;
#非法引入会进入下方判断
if ($invalid_referer) {
return 404;
}
location / {
root /home/code;
index index.html;
}
}
2、模块化体系
3、集群负载均衡
4、配置集群
#配置上游服务器 weight:数值越小,分匹越少
upstream tomacts{
server 192.168.1.110:8080 weight=1;
server 192.168.1.111:8080 weight=2;
server 192.168.1.112:8080 weight=5;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomacts
}
}
- 负载均衡 ip_hash
文档
优点:保证ip相同,访问同一个服务,可以找到会话。
弊端:upstream配置的服务器不能随意移除,可以用upstream指令down来标识。如果服务器数量有变化,会重写计算,导致会话、缓存丢失。
解决办法一致性hash
示例
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
server backend4.example.com;
}
- 一致性hash算法
服务器宕机或者新增服务时,只影响附近(顺时针)一部分用户
- url_hash
- 最少连接数
5、jmeter介绍测试并发异常率
6、upstream 参数介绍
参数 | 说明 |
---|---|
max_conns | 默认是0,限制服务器连接数,如果工作进程数(worker_processes)大于1,会导致超过max值 |
slow_start | 慢启动,会把权重慢慢增加到设置值 默认关闭,适用于集群,配置权重,具体细节查看文档 (商业版本) |
down | 不可用状态,配置之后不能访问 |
backup | 备用机,其他机器都宕机,会启用 |
max_fails | 最大失败次数,当server达到最大失败次数,nginx会踢出 结合fail_tails使用 |
fail_timeout | 失败时间段.max_fails=2 fail_timeout = 15s 失败2次后,15s内不在访问。 |
举例:
upstream tomacts{
server 192.168.1.110:8080 max_conns =2;
server 192.168.1.111:8080 weight=6 slow_start=60S;#商业版本才可以
server 192.168.1.112:8080;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomacts
}
}
7、keepalive配置
upstream http_backend {
server 127.0.0.1:8080;
keepalive 32;#保持连接数,部分链接作为长连接,减少创建,关闭。可以增大吞吐量
}
server {
...
location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;#长连接版本号
proxy_set_header Connection "";#清除connetion内容为空
...
}
}
8、缓存
静态资源文件
- 浏览器缓存:
加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地 - Nginx缓存
缓存在nginx端,提升所有访问到nginx这一端的用户 提升访问上游(upstream)服务器的速度 用户访问仍然会产生请求流量
控制浏览器缓存:
location /files {
alias /home/imooc;
# expires 10s; 设置秒数
# expires @22h30m; 晚上10点半
# expires -1h; 时间之前过期 前一小时已经过期 no-cache
# expires epoch;不设置cache no-cache
# expires off; 默认,nginx没有设置,但浏览器会有,默认浏览器缓存机制
expires max; 永不过期
}
效果说明:
- 上游存到nginx端
#proxy_cache_path 设置缓存保存的目录
#keys_zone 设置共享内存及占用空间大小
#max_size 设置缓存大小
#inactive 超过此时间,则缓存自动清理
#use_temp_path 关闭临时目录
proxy_cache_path /usr/local/nginx/upsteam_cache keys_zone=mycache:5m max_size=1g inactive=8h use_temp_path=off;
server {
listen 80;
server_name www.tomcats.com;
#开启并且使用缓存
proxy_cache mycache
#针对200和304状态码的缓存设置过期时间
proxy_cache_valid 200 304 8h
location / {
proxy_pass http://tomacts
}
}
9、配置https域名证书
1. 安装SSL模块
要在nginx中配置https,就必须安装ssl模块,也就是: http_ssl_module 。
- 进入到nginx的解压目录: /home/software/nginx-1.16.1
- 新增ssl模块(原来的那些模块需要保留)
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--with-http_ssl_module
- 编译和安装
make
make install
- 配置HTTPS
- 把ssl证书 *.crt 和 私钥 *.key 拷贝到 /usr/local/nginx/conf 目录中。
- 新增 server 监听 443 端口:
server {
listen 443;
server_name www.tomcats.com;
# 开启ssl
ssl on;
# 配置ssl证书
ssl_certificate 1_www.证书相对路径dsp.com_bundle.crt;
# 配置证书秘钥
ssl_certificate_key 2_www.证书密钥相对路径dsp.com.key;
# ssl会话cache
ssl_session_cache shared:SSL:1m;
# ssl会话超时时间
ssl_session_timeout 5m;
# 配置加密套件,写法遵循 openssl 标准
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCMSHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://tomacts
}
}
10、动静分离
方法一
方法二