nginx 负载均衡

旧城等待, 2022-01-17 10:09 515阅读 0赞

为什么80%的码农都做不了架构师?>>> hot3.png

传递 http 请求到后端 http 服务器

这是通过 ngx_http_upstream_module 实现的,例如下面的配置

  1. upstream backend {
  2. server 172.16.0.16:8080 weight=1 max_fails=2 fail_timeout=10s;
  3. server 172.16.0.16:8081 weight=1 max_fails=2 fail_timeout=10s;
  4. server 172.16.0.17:8080 weight=1 max_fails=2 fail_timeout=10s;
  5. server 172.16.0.17:8081 down;
  6. }
  7. server {
  8. location / {
  9. # 传递 http 请求到 backend 服务器
  10. proxy_pass http://backend;
  11. }
  12. # 传递 远程的主机地址
  13. proxy_set_header Host $http_host;
  14. proxy_set_header Forwarded $remote_addr;
  15. proxy_set_header X-Real-IP $remote_addr;
  16. proxy_set_header X-Scheme $scheme;
  17. }

server 指令常用的参数如下

  • weight: 访问权重,默认值为1
  • max_fails: 允许请求失败的次数,默认为1
  • fail_timeout: 默认是10s, 有两层含义

    • 在 10s 时间内最多容许 2 次失败
    • 2次失败以后,10s时间内不分配请求到这台服务器
  • backup: 备用服务器, 当其他所有的非 backup 服务器出现故障时,请求backup机器
  • max_conns: 同时连接到一台后端服务器的连接数,默认为0即无限制
  • down:标识服务器不可用

通过传递 fastcgi 请求到后端 fastcgi 服务器

这是通过 ngx_http_fastcgi_module 实现的,例如下面的配置

  1. upstream fastcgi_backend {
  2. server 172.16.0.16:8080 weight=1 max_fails=2 fail_timeout=10s;
  3. server 172.16.0.17:8080 weight=1 max_fails=2 fail_timeout=10s;
  4. }
  5. server {
  6. listen 8100;
  7. server_name localhost;
  8. index index.html;
  9. location / {
  10. # 传递 fastcgi 请求到 backend 服务器
  11. fastcgi_pass fastcgi_backend;
  12. include fastcgi_params.default;
  13. }
  14. }

nginx 通过 uwsgi 分发请求到 django

这是通过 ngx_http_uwsgi_module 实现的,

nginx 的配置

  1. upstream uwsgi_backend {
  2. server 127.0.0.1:8180 weight=1 max_fails=2 fail_timeout=10s;
  3. }
  4. server {
  5. listen 8100;
  6. server_name localhost;
  7. index index.html;
  8. location / {
  9. # 传递 uwsgi 请求到 backend 服务器
  10. uwsgi_pass uwsgi_backend;
  11. include uwsgi_params.default;
  12. }
  13. }

创建 django 项目

  1. django-admin startproject HelloWorld

添加 HelloWorld/HelloWorld/view.py 文件

  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. from django.http import HttpResponse
  4. def hello(request):
  5. return HttpResponse("Hello world ! ")

修改 HelloWorld/HelloWorld/urls.py 文件

  1. from django.conf.urls import *
  2. from HelloWorld.view import hello
  3. urlpatterns = patterns("",
  4. ('^hello/$', hello),
  5. )

创建 uwsgi 配置文件 uwsgi.ini

注意:chdir 修改成项目的根目录

  1. [uwsgi]
  2. chdir=/data/work/project/HelloWorld
  3. module=HelloWorld.wsgi:application
  4. socket=0.0.0.0:8180
  5. processes=5
  6. master=True
  7. pidfile=/tmp/project-master.pid
  8. vacuum=True
  9. max-requests=5000
  10. daemonize=/var/log/uwsgi_hello.log

启动 uwsgi 服务

  1. uwsgi --ini uwsgi.ini

访问 http://127.0.0.1:8100/hello

转载于:https://my.oschina.net/hopez/blog/804695

发表评论

表情:
评论列表 (有 0 条评论,515人围观)

还没有评论,来说两句吧...

相关阅读

    相关 nginx负载均衡

    负载均衡   我们已经明确了所谓代理服务器的概念,那么接下来,Nginx扮演了反向代理服务器的角色,它是以依据什么样的规则进行请求分发的呢?不用的项目应用场景,分发的规则

    相关 Nginx负载均衡

    Nginx负载均衡有4种配置方案 1、轮询 轮询即Round Robin,根据Nginx配置文件中的顺序,依次把客户端的web请求分发到不同的后端服务器上 2、最少

    相关 Nginx负载均衡

    1、负载均衡 先来简单了解一下什么是负载均衡。单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。那么负载均衡的前提就

    相关 nginx 负载均衡

    nginx 负载均衡 Nginx 配置 upstream 模块实现负载均衡,假设Nginx只代理到一台下游服务的话,那么当下游服务宕掉之后那么nginx就无法在处理客户端

    相关 Nginx负载均衡

    最近迷上了Nginx,真实麻雀虽小,五脏俱全..功能实在强大.. nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现

    相关 Nginx负载均衡

    测试环境 本次测试直接host指定域名,然后在虚拟机中安装了三台CentOS。 测试域名  :a.com A服务器IP :192.168.0.108(主) B服务器