Nginx(没记录完)
正向代理:
正向代理,作为一个媒介将互联网上获取的资源返回给相关联的客户端。代理和客户端在一个局域网,对于服务端是透明的。
反向代理:
反向代理,根据客户端的请求,从后端的服务器上获取资源,然后再将这些资源返回给客户端。代理和服务器在一个局域网,对客户端是透明的。
----------------------------------------------------------------------------------------------------------!
Nginx是反向代理的最佳选择,那么为什么需要反向代理呢?反向代理有如下作用:
•提高动态语言的I/O处理能力,Python、PHP、Java这样的动态服务的I/O处理能力不高,反向代理可以缓冲请求,交给后端一个完整的HTTP请求,同样,Nginx也可以缓冲响应,也达到了减轻后端的压力。
•加密和SSL加速。
•安全。它保护和隐藏了原始资源服务器,还可以用作应用防火墙防御一些网络攻击,比如DDoS。
•负载均衡。它帮应用服务器分配请求,以达到资源使用率最佳、吞吐率最大、响应时间最小的目的。
•缓存静态内容。代理缓存通常可以满足相当数量的网站请求,大大降低应用服务器上的负载。
•支持压缩。通过压缩优化可以提高网站访问速度,还能大大减少带宽的消耗。
----------------------------------------------------------------------------------------------------------!
Nginx配置
Nginx的配置文件是以块(block)的形式组织的。
每个块以一个花括号({})来表示,主要有6种块,如表6.1所示。
表6.1 6种配置文件块及其含义:

我们来看一个适用于Nginx+Gunicorn模式的Nginx配置(nginx_gunicorn.conf),由于篇幅限制,只列出和Python应用服务器相关的部分:
http {
upstream frontends {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
# server unix:/tmp/gunicorn.sock; # 使用UNIX Socket文件的方式
}
server {
listen 80;
server_name localhost;
location ^~ /static/ {
root /home/ubuntu/web_develop/static;
}
# 通过下面的方式把这些类型文件缓存30天,前提是保证这些文件是不经常改变的
location ~* .(woff|eot|ttf|svg|mp4|webm|jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_redirect off;
proxy_pass http://frontends;
}
}
}
替换默认的Nginx配置:
〉 sudo cp chapter6/section2/nginx_gunicorn.conf /etc/nginx/nginx.conf
〉 sudo /etc/init.d/nginx reload
在重启之前,可以使用configtest用来验证配置文件语法的正确性:
〉 sudo /etc/init.d/nginx configtest
如果发生错误,用“nginx -t”来显示配置文件的错误位置,要reload再使用“nginx -t”
------------------------------------------------------------------------------------------------------------!
负载均衡算法
Nginx的负载均衡模块目前支持如下4种调度算法。
1.round-robin:Nginx默认的轮询算法,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统将被自动剔除,使用户访问不受影响。可以通过weight指定轮询权值,weight值越大,该服务器被访问的概率越高,这主要用于后端每个服务器性能不均的情况。
2.least_conn:请求会被发送到活跃连接数最少的服务器上。
配置例子如下:
upstream backend { least_conn; # 默认的轮询算法不需要指定,如选择其他算法需要指定算法类型 server 127.0.0.1:8000;
server 127.0.0.1:8001;
}

浙公网安备 33010602011771号