反向代理
简单来说就是真是的服务器不能被外部网络直接访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一网络环境,当然可能是同一服务器,不同端口。
反向代理主要通过proxy_pass来配置,将项目的开发机地址写到proxy_pass后面即可,格式 [proxy_pass url]
server {
listen 80;
location / {
proxy_pass http:// demo;
# proxy_pass http:// localhost:8080;
}
}
注意
nginx 配置 proxy_pass,需要注意转发的路径配置
1、location /test/ {
proxy_pass http://t6:8300;
}
2、location /test/ {
proxy_pass http://t6:8300/;
}
上面两种配置,区别只在于 proxy_pass 转发的路径后是否带 “/”
针对情况 2,如果访问 url = http://server/test/test.jsp,则被 nginx 代理后,请
求路径会变为 http://proxy_pass/test.jsp,直接访问 server 的根资源
针对情况 1,如果访问 url = http://server/test/test.jsp,则被 nginx 代理后,请 求路径会便问 http://proxy_pass/test/test.jsp,将 test/ 作为根路径,请求 test/路径 下的资源
负载均衡
负载:就是nginx接受请求
均衡:就是nginx将接收到的请求按照一定的规则分发到不同的服务器进行处理
简单来说就是当有两台以上服务器时,根据规则随即将请求分发到指定的服务器上处理,负载均衡一般都需配置反向代理,通过反向代理跳到负载均衡。 upstream模块实现负载均衡
upstream demo {
ip_hash; #第一次访问记录,之后访问都是该服务器
server 10.10.10.10
server 10.10.10.11
}
server {
listen 80;
location / { # 访问根路径
proxy_pass http:// demo #代理到demo里的两个服务器上
}
}
以上配置,每次刷新就会访问不同服务器,这样就做到了负载均衡 不过,更应该做的是,当用户第一次访问到其中一台服务器后,下次访问应直接访问该台服务器,不用总变化。
nginx支持的负载均衡调度算法如下:
weight轮询(默认):将接收到的请求按顺序分配不同的后端服务器,使用中某一台服务器宕机,会自动剔除,请求受理情况不会收到影响。设置权值,weight和访问比率成正比,该权重值,主要是针对服务器硬件配置情况。
ip_hash: 每个请求按照发起客户端ip的hash结果进行匹配,这样下一个固定ip地址总会访问同一个后端服务器,在一定程度上解决了集群部署环境下session共享的问题。
fair: 智能调整调度算法,动态的根据后端服务器的响应时间分配请求,响应时间短的优先分配。如使用,选装upstream_fair模块。
url_hash: 按照访问的url的hash结果分配请求,每个url会指向后端固定的某个服务器,可以在nginx做静态服务器的情况下提高缓存效率。如需使用,需安装nginx的hash软件包。
ssl
worker_processes auto;
http {
#配置共享会话缓存大小
ssl_session_cache shared:SSL:10m;
#配置会话超时时间
ssl_session_timeout 10m;
server {
listen 443 ssl;
server_name www.example.com;
#设置长连接
keepalive_timeout 70;
ssl_certificate www.example.com.crt; # 证书文件
ssl_certificate_key www.example.com.key; #钥文件
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
websocket
location /ws/ {
proxy_pass http://127.0.0.1:80/; #通过配置端口指向部署websocker的项目
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; # 进行一个连接升级将http连接变成websocket的连接。
proxy_set_header Connection "Upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}