Nginx 跨域配置
http {
#允许跨域请求的域,*代表所有
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' *;
}
Nginx 防盗链配置
http {
#对源站点验证
valid_referers baidu.com;
#非法引入会进入下方判断
if ($invalid_referer) {
return 404
}
Nginx 负载均衡
upstream tomcats {
server 119.3.214.158:6991;
server 119.3.214.158:6992;
server 119.3.214.158:6993;
}
server {
listen 6990;
location / {
proxy_pass http://tomcats;
}
}
upstream 参数
weight=number
设置server的权重,默认是1
upstream tomcats {
server 192.168.1.173:8080 weight=1;
server 192.168.1.174:8080 weight=3;
server 192.168.1.175:8080 weight=5;
}
max_conns=number
限制每台server的连接数,用于保护避免过载,可起到限流作用。
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=time
多长时间内缓慢启动(仅限商业版可用)
upstream tomcats {
server 192.168.1.173:8080 weight=1;
server 192.168.1.174:8080 weight=3;
# 60s秒内 权重从 0 --> 5, server由不可用变为可用
server 192.168.1.175:8080 weight=5 slow_start=60s;
}
down
将server标记为不可用
backup
将server标记为备份服务器。 当主服务器不可用时,它将启用。
fail_timeout=time
表示失败的重试时间
max_fails=number
表示失败几次,则标记server已宕机,剔出上游服务 假设目前设置如下:
max_fails=2 fail_timeout=15s
则代表在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后再过15秒,这15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复
keepalive connections
如果你在上游服务器upstream中配置支持 keepalive,Nginx 现在将重用现有的 TCP 连接而不创建新的连接。这可以大大减少TIME_WAIT繁忙的 SSL 服务器上的TCP 连接数
upstream http_backend {
server 127.0.0.1:8080;
# 保持TCP连接的数量, 方便后续重用
keepalive 16;
}
server {
location /http/ {
proxy_pass http://http_backend;
# 默认是 HTTP/1, keepalive 只有在 HTTP/1.1才可以使用
proxy_http_version 1.1;
# 如果客户端发送了这个请求头 清除它
# 因为该值 可能为 [keepalive | close], 如果是close表明客户端或服务器想要关闭该网络连接,这是HTTP/1.0请求的默认值
proxy_set_header Connection "";
...
}
}
负载均衡策略
round-robin 轮询
对应用服务器的请求以循环方式分发
加权轮询
通过给server分配权重,影响负载均衡
upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
使用此配置,每 5 个新请求将按如下方式分布在应用程序实例中:3 个请求将被定向到 srv1,一个请求将被定向到 srv2,另一个请求将被定向到 srv3
least-connected 最少连接
下一个请求被分配给活动连接数最少的服务器
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
ip-hash
通过一个散列函数确定应该为下一个请求选择哪个服务器(基于客户端的 IP 地址)
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
但是ip-hash存在一些问题:
服务器增加或减少导致必须重新计算哈希(使用新数量的服务器),现有ip的后续请求会发送到其它机器上,最终导致缓存或session失效倾斜,即太多的ip会散列到一个服务器而而导致分布不均匀 而一致性hash能很好的解决上述问题
Nginx 配置HTTPS域名证书
-
安装SSL模块
要在nginx中配置https,就必须安装ssl模块,也就是:
http_ssl_modul -
配置HTTPS
- 把ssl证书
*.crt和 私钥*.key拷贝到 /usr/local/nginx/conf 目录中 - 新增 server 监听
443端口
server { listen 443; # 你的域名 server_name dsying.cn; # 开启ssl ssl on; # 配置ssl证书 ssl_certificate dsying.cn.crt; # 配置ssl秘钥 ssl_certificate_key dsying.cn.key; # ssl会话cache ssl_session_cache shared:SSL:1m; # ssl会话超时时间 ssl_session_timeout 5m; location / { proxy_pass http://公网地址:项目端口号; } } - 把ssl证书