Linux中 Nginx+uwsgi部署flask项目 Nginx负载均衡 反向代理
Nginx是一款自由的、开源的、高性能HTTP服务器和反向代理服务器。
- 轻量级,同样起web服务,比 apache占用更少的内存及资源
- 抗并发, nginx处理请求是异步非阻塞的,而 apache则是阻塞型的,在高并发下 nginx能保持低资源低消耗高性能;官方測试能够支撑5万并发连接,实际生产环境中能跑到2-3万并发连接
- 配置文件非常简单,风格和程序一样進俗易懂
- 提供负载均衡、反向代理,支持 rewrite,支持gzip压缩
- 稳定性高,宕机概率微乎其微
- 开源,可免费使用
安装Nginx
来源于
https://www.cnblogs.com/taiyonghai/p/6728707.html
- 下载相关组件
[root@localhost src]# wget http://nginx.org/download/nginx-1.10.2.tar.gz
省略安装内容...
[root@localhost src]# wget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gz
省略安装内容...
[root@localhost src]# wget http://zlib.net/zlib-1.2.11.tar.gz
省略安装内容...
[root@localhost src]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
省略安装内容...
- 安装Nginx及相关组件
openssl安装[root@localhost src]# tar zxvf openssl-fips-2.0.10.tar.gz
省略安装内容...
[root@localhost src]# cd openssl-fips-2.0.10
[root@localhost openssl-fips-2.0.10]# ./config && make && make install
省略安装内容...pcre安装[root@localhost src]# tar zxvf pcre-8.40.tar.gz
省略安装内容...
[root@localhost src]# cd pcre-8.40
[root@localhost pcre-8.40]# ./configure && make && make install
省略安装内容...zlib安装[root@localhost src]# tar zxvf zlib-1.2.11.tar.gz
省略安装内容...
[root@localhost src]# cd zlib-1.2.11
[root@localhost zlib-1.2.11]# ./configure && make && make install
省略安装内容...nginx安装[root@localhost src]# tar zxvf nginx-1.10.2.tar.gz
省略安装内容...
[root@localhost src]# cd nginx-1.10.2
[root@localhost nginx-1.10.2]# ./configure && make && make install
省略安装内容...
- Nginx基本操作
启动
[root@localhost ~]# /usr/local/nginx/sbin/nginx
停止/重启
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop(quit、reload)
命令帮助
[root@localhost ~]# /usr/local/nginx/sbin/nginx -h
验证配置文件
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf启动nginx 使用`ps -ef | grep nginx`查看nginx进程是否启动启动成功 访问本地127.0.0.1 会出现Nginx的欢迎界面
uwsgi安装
通过pip安装
pip install uwsgi
uwsgi配置文件
在我们的项目目录中创建一个uwsgi.ini配置文件
我的配置文件如下
[uwsgi]
uid=root #使用权限
pid=root
socket = 127.0.0.1:8008 #地址和端口号
http=0.0.0.0:8000 #http监听
harakiri = 300 #超时设置
pidfile=/opt/CowRestAPI/uwsgi.pid #指定pid文件的位置,记录主进程的pid号
vacuum=true #当服务器退出的时候自动清理环境,删除unix socket文件和pid文件
limit-post= 67108864 #限制HTTP请求体的大小
chair=/opt/CowRestAPI #项目的目录
thunder-lock = true #序列化接受的内容
master = true #主进程
wsgi-file = /opt/CowRestAPI/api.py #载入wsgi-file
callable = app #callable指出的是具体执行.run方法的那个实体的名字,一般而言都是app=Flask(__name__)的,所以这里是app
processes = 1 #进程数量
threads = 4 #线程数量
daemonize = /opt/CowRestAPI/uwsgiserver.log #使用进程在后台运行,并打印日志
touch-reload = /opt/CowRestAPI/api.py #flask的启动文件
stats = 0.0.0.0:8080 #指定的地址开启状态服务
buffer-size = 32768 #设置用于uwsgi包解析的内部缓存区大小。默认是4k
在不使用Nginx的情况下
需要配置http=0.0.0.0:8000 (本地)
或者输入自己的公网IP加端口
在自己的项目目录下
使用`uwsgi uwsgi.ini`启动项目
然后访问自己的 ip + 端口 可以正常访问自己的项目
使用uwsgi+Nginx的情况下
需要配置socket不能使用http
Nginx的配置文件
在自己下载的nginx文件中会有一个nginx.conf
我的nginx配置文件如下
部分也有注释说明可以参考
nginx.conf
user root; #使用指定用户
#user nobody;
worker_processes auto; #使用的worker进程数#error_log logs/error.log; #错误日志问价
#error_log logs/error.log notice; #日志级别
#error_log logs/error.log info;
#pid logs/nginx.pid; #存放进程pidevents {worker_connections 1024; #每个worker最大连接数默认1024
}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;fastcgi_buffers 8 128k;send_timeout 60;server {listen 80; #监听的端口 可以添加多个 listen 81#listen 81;server_name 47.93.37.167; #自己的公网ip 本地直接localhost Nginx可以监听多个域名client_max_body_size 10m; #最大的报文,默认1mrewrite /baidu/(.*) https://baidu.com; #重定向 访问/baidu/...就会跳转指定的url页面location / {include uwsgi_params; #说明与uwsgi进行连接uwsgi_param UWSGI_CHDIR /opt/CowRestAPI; #项目目录uwsgi_param UWSGI_SCRIPT api:app; #api为flask项目启动文件,app是run方法的那个实体的名字,一般而言都是app=Flask(__name__)的uwsgi_pass 127.0.0.1:8008; #此处的ip和端口需要和uwsgi配置文件中的socket一样,才能建立连接}location - /\secret\/(.*)$ {return 403; #访问secret 返回403 隐藏} }
}
如果访问出现nginx 504 Gateway Time-out的错误
一般看来, 这种情况可能是由于nginx默认的fastcgi进程响应的缓冲区太小造成的, 这将导致fastcgi进程被挂起, 如果你的fastcgi服务对这个挂起处理的不好, 那么最后就极有可能导致504 Gateway Time-out
现在的网站, 尤其某些论坛有大量的回复和很多内容的, 一个页面甚至有几百K
默认的fastcgi进程响应的缓冲区是8K, 我们可以设置大点
在nginx.conf里, 加入:
fastcgi_buffers 8 128k
这表示设置fastcgi缓冲区为8×128k
当然如果您在进行某一项即时的操作, 可能需要nginx的超时参数调大点, 例如设置成60秒:
send_timeout 60;
我只是调整了这两个参数, 结果就是没有再显示那个超时, 可以说效果不错
如果还有此类问题可以参考以下链接
https://www.cnblogs.com/xiamidong/p/4105583.html
nginx的location配置详解
语法规则: location [=|~|~*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
https://www.cnblogs.com/sign-ptk/p/6723048.html
反向代理
http {include mime.types;default_type application/octet-stream;#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;fastcgi_buffers 8 128k;send_timeout 60;server {listen 80; #监听的端口 可以添加多个 listen 81#listen 81;server_name localhost; location / {proxy_pass http://192.168.1.101:9000; #反向代理#以下是一些反向代理的配置可删除proxy_redirect off; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IPproxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; #允许客户端请求的最大单文件字节数client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时)proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传}}
}
Nginx负载均衡 反向代理
Nginx.conf 其中的设置
http {include mime.types;default_type application/octet-stream;#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;fastcgi_buffers 8 128k;send_timeout 60;upstream nginx_test {#ip_hash #只访问到了一台 保持session的一致性 server 192.168.1.101:9000 weight=1 max_fails=5 fail_timeout=20s; #设置健康检查和超时时间 加上down 暂时不参与负载server 192.168.1.102:9000 weight=3; #两台服务ip weight代表比重 越大访问次数越多}server {listen 80; #监听的端口 可以添加多个 listen 81#listen 81;server_name localhost; rewrite /baidu/(.*) https://baidu.com; #重定向 访问/baidu/...就会跳转指定的url页面location / {proxy_pass http://nginx_test;}}
}
Linux中 Nginx+uwsgi部署flask项目 Nginx负载均衡 反向代理相关推荐
- 使用 Nginx + Gunicorn 部署 Flask 项目
使用 Nginx + Gunicorn 部署 Flask 项目 Flask Web 项目开发完成后,开发人员只是在开发环境运行,只有本地可以访问到项目.如果要让用户访问到项目,需要将项目部署到生产环境 ...
- nginx怎么部署php项目,nginx怎么正确部署前端项目
目的: nginx部署打包成为dist的前端项目 (学习视频分享:php视频教程) 相关知识:docker 安装与使用 docker pull nginx docker run --restart=o ...
- 使用Nginx+uWSGI部署Django项目
1.linux安装python3环境 参考链接:https://www.cnblogs.com/zzqit/p/10087680.html 2.安装uwsgi pip3 install uwsgiln ...
- Nginx安装/负载均衡/反向代理配置与调优
[Nginx安装] Linux下直接使用包管理安装 sudo apt-get install nginx 使用whereis命令查看安装位置 whereis nginx #sbin下代表nginx可执 ...
- 架构之Nginx(负载均衡/反向代理)
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器 ,也是一个 IMAP/POP3/SMTP 代理 服务器 . Nginx 是由 Igor Sys ...
- Nginx学习总结(10)——Nginx前后端分离将多个请求转发到多个Tomcat,负载均衡反向代理
一.谈谈"渲染" 相信好多人都挺听过"渲染"这个词,但不清楚它是什么意思?前端开发以为这是后端的活儿,后端开发以为是前端的事儿,推着推着就不了了之.其实渲染很简 ...
- CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目
写在前面的话 最近总是见到有新学 Django 的朋友在部署自己的项目到 Linux 上面的时候运行不起来,所以就动手写了这篇博客. 对于不会搭建 Python 3 环境的朋友可以参考前面的博客[CE ...
- Ubuntu nginx+uwsgi部署Django项目
前提条件:首先项目使用一下命令启动成功后,输入公网ip后可以启动成功 python manage.py runserver 0.0.0.0:80 一.阿里云配置安全组 添加8000端口 二.安装配置u ...
- centos7根据端口查进程_记录一次CentOs7下Nginx+WSGI部署Django项目(超详细)
记录一次Django部署的文章,不是很熟悉Linux系统,踩了不少坑,本篇文章相当于是一个总结,我会在本文中详细介绍,部署单个Django项目和多个Django的方法,如读者有更好的方法,欢迎留言一起 ...
最新文章
- Redis消息通知系统的实现
- 浅谈悲催的“期末考试”
- Python入门笔记(17):错误、异常
- 7.Java中变量的隐式转换以及强类型转换
- Codeforces Round #578 (Div. 2)
- 关于半马尔可夫(semi-markov)的一个形象解释
- ubuntu修改固定ip
- Java进阶04 RTTI
- 产品经理如何洞察人性?
- IXWebHosting主机如何退款中文图解教程
- https提供安全的web通讯
- open jdk 证书 问题
- 常见视频高速接口分析MIPI,LVDS,RGB,HDMI
- 嵌入式Linux开发与单片机开发的区别
- pc端和移动端抓包工具
- Ipython安装错误集锦
- UNIX环境高级编程(第2版)- 第1~10章
- python聊天室设计_如何使用 Python 开发一个聊天室?
- 2022年,计算机er保研选计科还是电信?
- linux流控系统,Linux流量控制(TC)之表面