nginx3

nginx优化

工作进程优化

对工作进程的数量和其并发数量进行优化,充分的利用硬件机器资源。

长连接

减少三次握手所花费的时间,对连接进行保持一定时间。

压缩优化

减少带宽,对传输的数据进行压缩,请求到客户机后再进行解压。

客户端缓存优化

减少静态文件如图片等数据传输的占用带宽,将静态数据可以在客户端缓存,刷新时可以在缓存中找到数据,不去服务器上请求。

集群

集群介绍

传统web访问模型:用户体验差

单点故障解决方案:

  • 部署一台备份服务器,宕机直接切换
    问题:服务器利用率低,成本高,切换不及时,服务器压力依然大。

  • 部署多台服务器,根据DNS的轮询解析机制实现用户分发
    问题:其中一台故障,就会有一部分用户访问不到网站。

  • 多机阵列 ---集群模式
    将多个物理机器组成一个逻辑计算机,实现负载均衡和容错。

搭建一个基本集群

在集群中,nginx扮演的角色是:分发器。其任务是接收请求,分发请求,响应请求

功能模块:
ngx_http_upstream_module 基于应用层分发模块
ngx_strean_core_module 基于传输层分发模块(1.9开始提供)

Nginx集群其实是:虚拟主机+反向代理+upstream分发模块组成。

  • 虚拟主机:接受和响应请求
  • 反向代理:带用户信息去数据服务器拿数据。
  • upstream: 告诉nginx去哪个数据服务器拿数据

数据走向:

  1. 虚拟主机接受请求
  2. 虚拟主机去找反向代理
  3. 反向代理让去找upstream
  4. upstream 告诉一个数据服务器IP
  5. Nginx去找数据服务器,并发起用户请求
  6. 数据服务器接收nginx的请求并处理请求
  7. 数据服务器响应请求给nginx
  8. nginx响应请求给用户

配置分发器:
在生产环境中,数据服务器必须是一模一样的。

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream web {
       server 192.168.10.42;  # 两台分发的数据服务器,upstream根据自己规则分发
       server 192.168.10.43;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass http://web;  # 去找名为web的upstream
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

测试

  1. 测试nginx和数据服务器的连通性elinks http://192.168.10.42 --dump,所有机器都要测。
  2. 测试分发,访问nginx服务器elinks http://192.168.112.128,upstream的默认分发方式是轮询。

nginx的分发算法

将用户分发到不同数据服务器的算法。

  • 轮询
  • weigth
  • ip_hash 相同的ip地址会分发到相同的数据服务器
  • 第三方

基于请求头分发

  1. 基于host分发,也就是基于域名的分发。
upstream web1{
	server 192.168.10.42;
}

server {
	listen       80; #监听的对外端口
	server_name  www.web1.com; #域名

	location / {
		proxy_pass   http://web1;
	}
}
	
upstream web2{
	server 192.168.10.43;
}

server {
	listen       80;#监听的对外端口
	server_name  www.web2.com;#域名

	location / {
		proxy_pass   http://web2;
	}
}
  1. 基于开发语言分发
http{
	upstream php {
		server 192.168.10.41;
	}
	upstream html {
		server 192.168.10.42;
	}

	server {
		listen 80;
		server_name www.web1.com;
		location ~* \.php$ {
			proxy_pass http://php;
		}
	}

	server {
		listen 80;
		server_name www.web2.com;
		location ~* \.html$ {  # 匹配url是以html结尾的都走html的upstream进行分发
			proxy_pass http://html;
		}
	}
}
  1. 基于浏览器分发
upstream elinks { server 192.168.10.42; }
upstream chrome { server 192.168.10.43; }
upstream any { server 192.168.10.42:81; }
server {
 listen 80;
 server_name www.web1.com;
 
location / {
    proxy_pass http://any;
    
    if ( $http_user_agent ~* Elinks ) {
    proxy_pass http://elinks;
    }
    
    if ( $http_user_agent ~* chrome ) {  # ~*模糊匹配,不区分大小写
    proxy_pass http://chrome;
    }
  }
}
  1. 基于源IP分发,可以根据不同地域分发,即判断出ip是哪些区域的。
    geo模块,判断访问nginx的属于哪个地方的
upstream bj.server {
 server 192.168.10.42;
 }
upstream sh.server {
 server 192.168.10.43;
 }
upstream default.server {
 server 192.168.10.42:81;
 }
geo $geo {
 default default;
 192.168.10.241/32 bj;
 192.168.10.242/32 sh;
}
location / {
 proxy_pass http://$geo.server$request_uri;
 }

部署发布一个python开发的web网站

部署流程

Centos7.5+Nginx+python+Django+uwsgi+mysql

安装pythton

1. 下载 wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
2. 解压 tar xf Python-3.7.1.tar.xz
3. 安装依赖 yum -y install gcc-* openssl-* libffi-devel sqlite-devel
4. 配置安装 当前目录:/usr/local/Python-3.7.1
  ./configure --enable-optimizations --with-openssl=/usr/bin/ssl
  make -j8           
  make install

默认安装路径是:/usr/local/python3.7

可以安装ipython,比cpython界面友好些, pipp3 install ipython

升级pip3

pip3是python的包管理工具,该工具提供了对python包的查找、下载、安装、卸载功能
pip3 install --upgrade pip
在升级过程中可能会遇到SSL的问题,解决方案:

  1. cd /usr/local/Python-3.7.1
  2. vim Modules/Setup
  3. 将图中红框中代码注释打开
  4. 重新执行 make -j8 && make install
  5. pip3 install --upgrade pip

安装vertualenv

virtualenv是一个创建隔绝的Python环境工具,virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用python工程所需要的包。
pip3 install virtualenv
使用:
创建一个虚拟环境:mkvirtualenv -p python3 web
进入一个虚拟环境:source env/bin/activate
退出 虚拟环境:deactivate

安装django

  1. 在 虚拟环境中安装django pip3 install Django==2.1.2
  2. 在/user/local/nginx/html下创建一个django项目 django-admin startproject myweb

安装uwsgi

uwsgi是服务器和服务端应用程序的通信协议,规定了怎么把请求转发给应用程序和返回。

  1. 安装 pip3 install uwsgi
  2. 创建配置文件 mkdir /etc/uwsgi
  3. vim /etc/uwsgi/uwsgi.ini
[uwsgi]
uid = root
gid = root
socket = 127.0.0.1:9090
master = true
vhost = true
no-site = true
workers = 2
reload-mercy = 10
vacuum = true
max-requests = 1000
limit-as = 512
buffer-size = 30000
pidfile = /var/run/uwsgi9090.pid
daemonize = /var/log/uwsgi9090.log

# 虚拟环境下diango所在的位置
pythonpath = /usr/local/Python-3.7.1/web/lib/python3.7/site-packages
  1. 启动uwsgi uwsgi --ini /etc/uwsgi/uwsgi.ini

发布网站

1.编辑nginx配置 文件

location / {
	include uwsgi_params;
	uwsgi_pass 127.0.0.1:9090;
	uwsgi_param UWSGI_SCRIPT myweb1.wsgi;  
	uwsgi_param UWSGI_CHDIR /usr/local/nginx/html/myweb1;  # django项目地址
	index index.html index.htm;
	client_max_body_size 35m;
	uwsgi_cache_valid 1m;
	uwsgi_temp_file_write_size 64k;
	uwsgi_buffers	8 64k;
	uwsgi_buffer_size 64k;
	uwsgi_read_timeout 300;
	uwsgi_send_timeout  300;
	uwsgi_connect_timeout 300;
	}

2.启动nginx
3.测试,小火箭就出来了。

修改了django的代码或者配置文件都要重启uwsgi。

请求顺序

posted on 2021-11-26 22:49  爱吃沙拉的狮  阅读(71)  评论(0)    收藏  举报