一、高级功能
1、nginx跨域
在http { server { ...} } 中添加
#允许跨域请求的域,*代表所有 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' *;
2、nginx防盗链
在http { server { ...} } 中添加
#验证源站 valid_referers *.imooc.com; #非法引入将进入下方判断 if ($invalid_referer) { return 404; }
3、nginx压缩静态文件
在 http{...} 模块中添加
#开启gzip,减少我们发送的数据量 gzip on; #大于1k后开始压缩 gzip_min_length 1k; #4个单位为16k内存作为压缩结果流缓存 gzip_buffers 4 16k; #gzip压缩比,可在1~9中设置,1压缩比最小,速度最快,9压缩比最大,速度最慢,消耗CPU gzip_comp_level 5; #压缩类型 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].";
4、配置https
- 获取相应的域名注册服务提供商(阿里云、腾讯云等)ssl证书信息
- 在下载到的ssl证书中获取nginx相关证书(包括两份文件:.key 和 .pom)
- 将对应的nginx证书上传到nginx服务的特定位置(如:/usr/loca/nginx/cert)
- 配置nginx(http默认端口为:80,https默认端口为:443
server { listen 443; server_name www.test.com; # 开启ssl ssl on; # 配置ssl证书 ssl_certificate /usr/local/nginx/cert/214806751670884.pem; # 配置证书秘钥 ssl_certificate_key /usr/local/nginx/cert/214806751670884.key; # ssl会话cache ssl_session_cache shared:SSL:1m; # ssl会话超时 ssl_session_timeout 5m; # 配置加密套件,写法遵循 openssl 标准 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location ~* \.(txt)$ { root public; } location / { proxy_pass http://127.0.0.1:8011; } }
- 如果进行完上述操作之后,发现启动nginx说咩有ssl由于安装了模块nginx没有安装ssl使用命令安装模块
进入到nginx安装包目录下,依次执行命令
./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
二、负载平衡
1、基本配置
- upstream
nginx 主要用于七层负载均衡
在http { ... } 中添加
# worker设置一个过程,成功的连接数易于测试和观察 worker_processes 1; upstream tomcats { server 192.168.1.173:8080; server 192.168.1.174:8080; server 192.168.1.175:8080; } # 监听地址 server { listen 80; server_name www.test.com; location / { # 指向上述配置upstream proxy_pass http://tomcats; } }
2、upstream下相关指令
- weight
每台服务器在设置用户访问时要求的权重信息默认为1,
upstream tomcats { server 192.168.1.173:8080 weight=2; server 192.168.1.174:8080 weight=4; server 192.168.1.175:8080 weight=5; }
- max_conns
限制每台server防止过载的连接数可以限制流量
# worker设置一个过程,成功的连接数易于测试和观察 worker_processes 1; upstream tomcats { server 192.168.1.173:8080 max_conns=2; server 192.168.1.174:8080 max_conns=2; server 192.168.1.175:8080 max_conns=2; }
- slow_start
- 只能使用商业版
- 必须使用两台或两台以上的服务器
- 权重信息必须配置weight才可使用
默认设置服务器权重从0恢复到标准值的时间为0,缓慢恢复
upstream tomcats { server 192.168.1.173:8080 weight=2 slow_start = 60s; server 192.168.1.174:8080; server 192.168.1.175:8080 weight=5; }
- down
标记的服务节点不能使用
upstream tomcats { # 不可使用 server 192.168.1.173:8080 down; servr 192.168.1.174:8080 weight=1;
server 192.168.1.175:8080 weight=1;
}
- backup
表示该服务器节点为备用机,只有其他的服务器都不可用(如全部宕机)后,才可以被访问
upstream tomcats {
# 备用机
server 192.168.1.173:8080 backup;
server 192.168.1.174:8080 weight=1;
server 192.168.1.175:8080 weight=1;
}
- max_fails 、fail_timeout
两个指令必须配合使用
max_fails 表示失败几次几次后,就将该服务器节点标记为宕机,剔除集群上游服务器
fail_timeout 表示被max_fails标记为宕机后,多长时间之后再去尝试请求该服务器节点,如果依然失败,则重复上述操作
upstream tomcats {
server 192.168.1.173:8080 max_fails=2 fail_timeout=15s;
server 192.168.1.174:8080 weight=1;
server 192.168.1.175:8080 weight=1;
}
3、keepalive
- keepalive
设置长连接处理的数量
- proxy_http_version
设置长连接http的版本信息,proxy_http_version 1.1;
- proxy_set_header
清楚connection header信息
upstream tomcats {
server 192.168.1.190:8080;
keepalive 32;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
4、ip_hash
ip_hash 可以保证用户访问可以请求到上游服务中的固定的服务器,前提是用户ip没有发生更改
-
注意:使用ip_hash后,如果想要停用某个服务器节点,不可直接移除后台服务器,必须使用down,否则hash算法将失效,进行重新计算(通过ip的前三位计算 192.0.1),影响用户使用
-
官方文档:
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash
upstream tomcats {
ip_hash;
server 192.168.1.173:8080;
server 192.168.1.174:8080 down;
server 192.168.1.175:8080;
}
5、url_hash、least_conn
根据用户请求的url地址,进行hash后访问固定的服务器节点
upstream tomcats {
# url hash
hash $request_uri;
# 最少连接数
# least_conn
server 192.168.1.173:8080;
server 192.168.1.174:8080;
server 192.168.1.175:8080;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats;
}
}
三、nginx缓存控制
- expires
expires 命令控制一下浏览器的缓存,主要是针对一些静态资源
1、浏览器缓存
- 浏览器缓存是缓存在用户本地
- 用于加速用户访问,提升单个用户体验(浏览器访问者)
2、nginx缓存
- nginx缓存是缓存在nginx端
- 提升所有访问到nginx端的用户体验
- 提升上游upstream各个服务器节点的速度
- 用户访问仍然会产生请求流量
3、nginx缓存控制
- 控制浏览器缓存
在具体的 location 中配置
location /files {
alias /home/imooc;
# 允许浏览器缓存该资源10s
# expires 10s;
# @表示在指定时间点后缓存过期
# expires @22h30m;
# 在之前1h就已经过期了,既不进行缓存
# expires -1h;
# 有缓存,但不使用缓存
# expires epoch;
# 关闭缓存,默认为关闭
# expires off;
# 最大时间,永不过期
expires max;
}
- 控制上游服务器节点缓存
需先在http中配置配置缓存的基本信息 在到对应的location中进行配置
# proxy_cache_path 设置缓存目录
# keys_zone 设置共享内存以及占用空间大小
# max_size 设置缓存大小
# inactive 超过此时间则被清理
# use_temp_path 临时目录,使用后会影响nginx性能
proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off;
location / {
proxy_pass http://tomcats;
# 启用缓存,和keys_zone一致
proxy_cache mycache;
# 针对200和304状态码缓存时间为8小时
proxy_cache_valid 200 304 8h;
}
作者:慕凌峰 链接:https://www.jianshu.com/p/c816a19d233a 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。